Files
gitea-ci-library/docs/workflows.md
T
moilanik f58497f5e8
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 23s
POC GitOps E2E / e2e (push) Successful in 53s
unit-tests Bats test report
CI Feature / Bats tests (push) Failing after 1m32s
acc-tests Cucumber test report
CI Feature / Cucumber tests (push) Failing after 1m45s
CI Feature / Report Summary (push) Successful in 5s
skill & docs
2026-06-22 06:34:37 +03:00

8.8 KiB

Reusable workflowt

Provider-workflowt tarjoavat ydintoiminnallisuuden. Consumer kokoaa ne haluamakseen pipelineksi. Esimerkkitoteutus: example-*-tiedostot.


Yhteiset konventiot

Kaikki workflowt:

  • Käyttävät concurrency:-ryhmää estämään saman branchin rinnakkaiset ajot
  • Provider-workflowt lukevat konfiguraation inputtina (env_json)
  • Statusraportointi: tool-jobit natiivilla, test-jobit API:lla raporttilinkin takia (ADR 0007)
  • Exit-koodi aina ylös, ei pipeä (ADR 0008)

Provider-workflowt

config-provider.yml — Konfiguraation lataus ja validointi

Trigger: workflow_call

Inputs:

Parametri Pakollinen Kuvaus
config_path Kyllä Polku .conf-tiedostoon

Secrets:

Secret Pakollinen Kuvaus
GITEA_TOKEN Kyllä Validointia varten
GIT_PAGES_PUBLISH_TOKEN Kyllä Validointia varten

Outputs:

Output Kuvaus
env_json JSON-muotoiset ympäristömuuttujat
config_path Sama polku takaisin (DRY downstream-käyttöön)

Steppi-kaavio:

checkout → validate CI config → parse conf to JSON

check-version.yml — Version ja artifactin tarkistus

Trigger: workflow_call — käytetään vain main-haarassa

Inputs: env_json

Outputs: artifact_exists (true/false), version (string)

Steppi-kaavio:

checkout → laske versio package.json + git-tageista → output

docker-build-push.yml — Docker build & push

Trigger: workflow_call

Inputs:

Parametri Pakollinen Kuvaus
env_json Kyllä Konffi gitea-env.conf:stä
version Kyllä Version string (check-version output)

env_json-avaimet:

Avain Pakollinen Kuvaus
DOCKER_REGISTRY Kyllä Registry (esim. gitea.app.keskikuja.site/niko)
DOCKER_IMAGE_NAME Kyllä Kuvan nimi ilman registry-polkua
DOCKER_UI_URL Ei Registry UI -linkki raportointia varten
DOCKERFILE Ei Dockerfile-polku, oletus Dockerfile
GITEA_API_URL Kyllä Gitean API-URL
GIT_TAG_PREFIX Ei Tag-prefix (esim. docker/)

Secrets: GITEA_TOKEN, DOCKER_USERNAME, DOCKER_PASSWORD

Steppi-kaavio:

build-push (build + push, labelit: commit+date) → tag-commit (git-tagin luonti)

Huomio: Ei käytä container:-direktiiviä — ajaa suoraan runnerilla, joten actions/checkout toimii ilman node-asennuksia.


helm-build-push.yml — Helm chart build & push

Trigger: workflow_call

Inputs:

Parametri Pakollinen Kuvaus
env_json Kyllä Konffi gitea-env.conf:stä
version Kyllä Version string (check-version output)
chart_path Ei Polku Chart.yaml-hakemistoon, oletus .

env_json-avaimet:

Avain Pakollinen Kuvaus
HELM_REGISTRY Kyllä OCI-registry (esim. gitea.app.keskikuja.site/niko)
HELM_UI_URL Ei Registry UI -linkki raportointia varten
GITEA_API_URL Kyllä Gitean API-URL
GIT_TAG_PREFIX Ei Tag-prefix (esim. helm/)

Secrets: GITEA_TOKEN, HELM_USER, HELM_PASSWORD

Steppi-kaavio:

build-push (helm package → helm push OCI) → tag-commit (git-tagin luonti)

Steppien kuvaus build-push-jobissa:

  1. Node.js-asennusapk add --no-cache nodejs (vaaditaan actions/checkout-actionia varten)
  2. Checkout — sovellusrepo ja gitea-ci-library .ci/-polkuun
  3. Packagehelm package versiolla $VERSION
  4. Push OCIhelm push registryyn autentikoinnilla
  5. Report status — commit-status + UI-linkki

Kompromissi: Kontti alpine/helm ei sisällä node.js:ää, mutta actions/checkout@v4 on JavaScript-action ja vaatii sen. Siksi nodejs asennetaan lennossa ennen checkouttia. Tämä vaatii internet-yhteyden eikä toimi air gap -ympäristössä. Korvaa tarvittaessa custom-kontilla (jossa helm + nodejs, ks. skills/ci-container-build/SKILL.md).


Consumer-esimerkki (example-*)

example-feature.yml — Feature-haaran CI

Trigger: push [branches-ignore: main]

load-config → bats + cucumber → report-summary (always)

example-main.yml — Main-haaran CI

Trigger: push [branches: main]

load-config → check-version →
  [artifact exists] → done
  [no artifact]    → bats + cucumber
                     ├─ docker-build-push → gitops-values ─┐
                     └─ helm-build-push  → gitops-chart   ─┤
                                                           ├─ gitops-summary
                     tag-maintenance ←─────────────────────┘

GitOps-jobit (gitops-chart, gitops-values) dispatchaavat GitOps-repon workflown ja asettavat commit-statusin code-repoon + GitOps-repoon (kaksisuuntainen track). Katso skills/gitops-update/SKILL.md.

example-bats-tests.yml — Bats unit-testit

Trigger: workflow_call

Ajaa Bats-testit Docker-kontissa, generoi coveragen (bashcov), julkaisee raportit git-pagesiin, asettaa commit-statuksen linkillä raporttiin.

example-cucumber-tests.yml — Cucumber hyväksymätestit

Trigger: workflow_call

Ajaa Cucumber-testit Node-kontissa, julkaisee raportit git-pagesiin, asettaa commit-statuksen linkillä raporttiin.

report-summary.yml — Raporttien koontinäkymä

Trigger: workflow_call — ajetaan if: always() testien jälkeen

Inputs: env_json, suites (space-separated lista suite-nimistä)

Generoi Markdown-taulukon GITHUB_STEP_SUMMARY:yn kaikista julkaistuista raporteista. Renderöityy HTML:ksi Gitea 1.27+ Summary-välilehdellä. Forward-compatibeli — ei haittaa vanhemmilla Gitea-versioilla.


Provider-skriptit

gitops-update.sh — GitOps-version päivitys

Riippuvuudet: yq, scripts/report-status.sh, git

Päivittää GitOps-repon konfiguraatiotiedoston versionumeron yq:lla, committaa muutoksen ja asettaa commit-statuksen molempiin repoihin (kaksisuuntainen track):

Status Mihin repo Context Linkki
GitOps-repo source/{repo} Code-repon committiin
Code-repo (dispatchin jälkeen) gitops/{repo} {RUN_ID} GitOps-repon committiin

Input-ympäristömuuttujat (ajetaan GitOps-repon workflow'ssa):

Muuttuja Pakollinen Kuvaus
INPUT_FILE Kyllä Tiedosto GitOps-repossa (esim. dev/Chart.yaml)
YQ_TPL Kyllä yq-lauseke {{VERSION}}-placeholderilla
VERSION Kyllä Uusi versio (esim. 0.2.3)
SOURCE_REPO Kyllä Lähdekoodirepo (esim. org/app)
SOURCE_COMMIT Kyllä Lähdekoodin commit-SHA
GITOPS_REPO Kyllä GitOps-repo slug
GITEA_API_URL Kyllä Gitean API-URL
GITEA_TOKEN Kyllä Gitea API-token (write GitOps-repoon)
GITOPS_BRANCH Ei GitOps-repon branch (oletus main)
GIT_TAG_PREFIX Ei Komponentin tag-prefix status-nimeämiseen

Commit-status (GitOps-repoon):

Kenttä Formaatti Esimerkki
Context source/{repo} source/gitea-ci-library
Description Install to {env} {version} Install to dev 0.2.0
Target URL Linkki code-repon committiin /org/repo/commit/sha

{env} parsitaan INPUT_FILE:stä (dev/Chart.yamldev).

Steppikuvaus:

  1. Korvaa YQ_TPL:n {{VERSION}} versiolla
  2. Muodostaa CLONE_URL tokenilla ja hostilla
  3. Kloonaa GitOps-repon
  4. Ajaa yq eval -i päivittääkseen tiedoston
  5. Jos muutoksia: commit + push [skip ci], muuten status — no change
  6. Asettaa commit-statuksen GitOps-repoon (source-konteksti, linkki code-repoon)

Scriptiä ei ajeta code reposta. Se ajaa GitOps-repon workflow'ssa.

Code-repon commit-status (dispatchin jälkeen)

GitOps-päivityksen valmistuttua dispatch-workflow.sh tulostaa GITOPS_COMMIT=<sha> (GitOps-repon commitin SHA). Code repo asettaa oman commit-statusinsa linkillä GitOps-committiin:

Kenttä Formaatti Esimerkki
Context gitops/{repo} {RUN_ID} gitops/gitea-ci-library 473
Description Install to {env} {version} Install to dev 0.2.0
Target URL Linkki GitOps-repon committiin /niko/gitea-ci-gitops-tests/commit/def456

Loppuraportti (GITHUB_STEP_SUMMARY)

gitops-summary-job (tai report-summary-job) lisää rivin GitOps-päivityksestä GITHUB_STEP_SUMMARYyn:

Component Version Status GitOps commit
helm 0.2.0 success link

Kokonainen esimerkki molemmista puolista: skills/gitops-update/SKILL.md ja .gitea/workflows/example-main.yml.