pipeline siivous ja testikattavuuden nosto (#9)
CI / load-config (push) Successful in 16s
CI / feature (push) Has been skipped
ci-cucumber Cucumber tests passed
ci-bats Bats tests
ci-build Build complete
CI / main (push) Successful in 2m23s

Co-authored-by: moilanik <niko.moilanen@tietoevry.com>
Reviewed-on: #9
This commit is contained in:
2026-06-14 03:26:44 +03:00
parent a1d1f1e5ab
commit c422825bf0
33 changed files with 779 additions and 302 deletions
+60
View File
@@ -50,6 +50,53 @@ Käytäntö:
- Jos `docker run` tarvitsee env-arvoja, välitä ne eksplisiittisesti `-e VAR`-lipulla
- `GITHUB_ENV` on validi tapa välittää arvoja stepien välille samassa jobissa, mutta ei leviä `docker run`-kontteihin ilman `-e`-lippua
### Cross-job config propagation (validated 2026-06-13)
Config-arvojen vienti kaikkiin jobeihin ilman toistoa vaatii kahden
mekanismin ketjuttamista:
1. **`needs` + `with:`** — `jobs.<job_id>.with.<with_id>` tukee
`needs`-kontekstia. Tämä mahdollistaa sen, että yhden jobin outputit
voidaan välittää toiselle reusable workflowille inputeina.
2. **Workflow `env:`** — ainoa natiivi mekanismi, joka tekee arvoista
näkyviä kaikissa jobeissa automaattisesti (POC validioitu).
Ketju toimii näin:
```
gitea-env.conf → config-provider.yml → env_json (yksi JSON-string)
(1) (2)
ci.yml with: env_json
${{ needs.load-config.outputs.env_json }}
(3)
build-feature.yml workflow env:
GITEA_API_URL: ${{ fromJson(inputs.env_json).GITEA_API_URL }}
(4)
kaikki jobit → $GITEA_API_URL, $GIT_PAGES_URL jne.
(5)
```
Vaiheet:
1. Consumer määrittelee arvot `gitea-env.conf`:ssä (KEY=VALUE)
2. `config-provider.yml` lukee confin ja tuottaa yhden JSON-stringin outputina
3. `ci.yml` välittää JSONin `needs` + `with:` -ketjulla
4. `build-feature.yml` purkaa arvot workflow `env:`-tasolle `fromJson()`:lla
5. Kaikki jobit käyttävät valmiita env-muuttujia (`$GIT_PAGES_URL` jne.)
Avainkomponentit:
- **config-provider.yml** — reusable workflow, joka muuntaa conf-tiedoston
yhdeksi JSON-outputiksi. Yksi output riittää, ei per-key outputteja.
- **`jobs.<job_id>.with`** — tukee `needs`-kontekstia (Gitea Actions,
kuten GitHub Actions). Tämä on kriittinen yksityiskohta: ilman tätä
config-arvoja ei voi välittää reusable workflowille dynaamisesti.
- **workflow `env:`** — ainoa tapa jakaa arvot kaikkiin jobeihin.
`fromJson(inputs.env_json).KEY` purkaa yksittäiset arvot ilman toistoa.
- **Per-job `env:`** — sisältää vain secretit (`GITEA_TOKEN`,
`GIT_PAGES_PUBLISH_TOKEN`), ei config-arvoja.
## 5. Pipeline Provides All Dependencies
- Ei luottamusta runnerin esiasennettuihin työkaluihin
@@ -63,3 +110,16 @@ Käytäntö:
- Rinnakkaiset jobit (bats + cucumber) — tuloksia saa heti kun valmistuu
- Jokainen testisetti omassa jobissaan
- Finalize/build voi kerätä yhteenvedon (ei julkaista summarya jos kenelläkään ei ole linkkiä)
## 7. Inline Logic Threshold
Logiikka workflow YAML:ssa on hauras: YAML:n sisennys, heredocit ja
kenoviivat tuottavat helposti toimimattomia steppejä.
**Kynnys siirtää scriptiksi:** heti kun steppiin tulee ehtoja, silmukoita,
tai yli 3 riviä inline-koodia, siirrä omaksi scriptikseen `.gitea/scripts/`-
kansioon.
Esimerkki: coverage-datan purku ja navigointi-indexin luonti oli aluksi
inline-heredocina workflow YAML:ssa. Siirto omaan `bats-coverage.sh`-scriptiin
teki siitä luettavan, testattavan ja muokattavan ilman YAML-muotoiluriskejä.