From 65d385f9b931b8214a11fb55a64823a2a30ddaec Mon Sep 17 00:00:00 2001 From: niko Date: Wed, 17 Jun 2026 17:02:44 +0300 Subject: [PATCH] =?UTF-8?q?skill=20p=C3=A4ivitetty=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: moilanik Reviewed-on: https://gitea.app.keskikuja.site/niko/gitea-ci-library/pulls/21 --- skills/ci-container-build/SKILL.md | 3 +- skills/consumer-pipelines/SKILL.md | 93 +++++++++++++++++++++++++++++- 2 files changed, 92 insertions(+), 4 deletions(-) diff --git a/skills/ci-container-build/SKILL.md b/skills/ci-container-build/SKILL.md index 3c39c0a..4e9c659 100644 --- a/skills/ci-container-build/SKILL.md +++ b/skills/ci-container-build/SKILL.md @@ -129,7 +129,7 @@ Dockerfile yhdistää tarvitut työkalut yhteen konttiin. Molemmat tavat kelpaav # Tapa A: COPY --from toisesta imagesta FROM __BASE_IMAGE__:__VERSION__ COPY --from=__SOURCE_IMAGE__:__VERSION__ /path/to/binary /usr/local/bin/ -RUN apk add --no-cache __PAKETIT__ +RUN apk add --no-cache __PAKETIT__ # Ei koskaan git:iä — kloonaus kuuluu pipelinelle # Tapa B: curl-lataus (normaali Dockerfilessa) FROM __BASE_IMAGE__:__VERSION__ @@ -146,3 +146,4 @@ tulee suoraan GitHub Releasesista tai vastaavasta. - Älä lisää `workflow_call`-triggariä — CI-konttia ei koskaan buildata automaattisesti - Älä poista `.`-prefiksiä olemassaolevista tiedostoista — ne kuuluvat monorepo-nimeämiskonventioon - Älä sisällytä CI-konttiin mitään sovelluskoodia — vain työkalut +- Älä koskaan asenna `git`:iä CI-konttiin — repon kloonaus ja checkout ovat Gitea Actionsin natiiveja operaatioita, eivät kontin vastuulla. Git paisuttaa konttia turhaan ja luo harhan että kontti hallitsee repoa diff --git a/skills/consumer-pipelines/SKILL.md b/skills/consumer-pipelines/SKILL.md index 11279d2..92ba264 100644 --- a/skills/consumer-pipelines/SKILL.md +++ b/skills/consumer-pipelines/SKILL.md @@ -46,14 +46,14 @@ jobs: : needs: [load-config] - uses: ./.gitea/workflows/..yml@main + uses: ./.gitea/workflows/..yml secrets: inherit with: env_json: ${{ needs.load-config.outputs.env_json }} : needs: [load-config] - uses: ./.gitea/workflows/..yml@main + uses: ./.gitea/workflows/..yml secrets: inherit with: env_json: ${{ needs.load-config.outputs.env_json }} @@ -118,6 +118,80 @@ shellin käyttäytyminen vaihtelee. CI-kontin build-workflow'n template: [skills/ci-container-build/SKILL.md](../ci-container-build/SKILL.md) — sisältää valmiin `ci-container-build-.yml`-pohjan jossa `workflow_dispatch`-tuki manuaaliajoon. +### 4.1 CI-kontin ajaminen jobissa + +CI-kontin voi ajaa joko `container:`-direktiivillä (kaikki stepit kontissa) +tai `docker run --rm`:llä stepin sisällä (checkout natiivisti). Molemmat tavat +toimivat. + +```yaml +# Tapa A: container:-direktiivi +jobs: + : + runs-on: ubuntu-latest + container: + image: ${{ inputs. }} + steps: + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: /gitea-ci-library + path: .ci + - name: Run + shell: bash + run: | + mkdir -p "reports/${GITHUB_SHA:0:8}/" + > "reports/${GITHUB_SHA:0:8}//results.txt" 2>&1 + EXIT=$? + echo "EXIT=${EXIT}" >> "${GITHUB_ENV}" + exit ${EXIT} +``` + +```yaml +# Tapa B: docker run --rm stepin sisällä (kuten example-bats-tests.yml) +jobs: + : + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + repository: /gitea-ci-library + path: .ci + + - name: Run + shell: bash + run: | + docker volume create ws- + tar c . | docker run --rm -i -v ws-:/data alpine tar x -C /data + mkdir -p "reports/${GITHUB_SHA:0:8}/" + set +e + docker run --rm \ + -v ws-:/data \ + --entrypoint bash ${{ inputs. }} \ + -c 'cd /data && ' \ + > "reports/${GITHUB_SHA:0:8}//results.txt" 2>&1 + EXIT=$? + docker volume rm ws- > /dev/null 2>&1 + echo "EXIT=${EXIT}" >> "${GITHUB_ENV}" + exit ${EXIT} + + - name: Publish reports + if: always() + run: bash .ci/scripts/publish-git-pages.sh + + - name: Report status + if: always() + run: | + if [ "${EXIT}" = "0" ]; then + bash .ci/scripts/report-status.sh success "" + else + bash .ci/scripts/report-status.sh failure "" + fi +``` + +**Malli:** `example-bats-tests.yml` (tapa B). + ## 5. Raporttitasot Testi tuottaa raportin `reports/${GITHUB_SHA:0:8}//`-hakemistoon. `publish-git-pages.sh` julkaisee sen, @@ -310,7 +384,7 @@ jobs: : needs: [load-config, check-version] if: needs.check-version.outputs.artifact_exists != 'true' - uses: ./.gitea/workflows/..yml@main + uses: ./.gitea/workflows/..yml secrets: inherit with: env_json: ${{ needs.load-config.outputs.env_json }} @@ -406,6 +480,19 @@ Ei kahta eri komentoa samassa workflow'ssa. Kaikki provider-viittaukset käyttävät `@v1`-tagia. `@main` on vain providerin oman repon sisäiseen dogfood-käyttöön. Breaking changet kielletty — `v1`-rajapinta on pysyvä. +### Paikalliset `uses:` eivät käytä refiä + +Gitea act runner v1.0.8 muodostaa paikallisista `uses: ./.gitea/workflows/*.yml@main`-viittauksista +epävalidin git-refin `main@`, joka aiheuttaa virheen `Revision invalid : reference must +be defined once at the beginning`. + +Paikallisista `uses:`-direktiiveistä EI koskaan käytetä `@main`- tai muuta ref-päätettä: +- `uses: ./.gitea/workflows/chart.helm-lint.yml` ← oikein +- `uses: ./.gitea/workflows/chart.helm-lint.yml@main` ← väärin + +Ilman refiä runner käyttää workflow'ta triggeröivästä commitista. Ulkoisten repojen +viittauksissa (`niko/...@v1`) pääte pysyy. Nämä resolvoidaan eri reittiä ja toimivat oikein. + ### Exit-koodi on ainoa onnistumisen mittari (ADR 0008) Ei pipeä (`|`) komennon perässä — se syö exit-koodin. Käytä redirectiä (`> file 2>&1`).