tägitys käyttöön consumer viittauksessa provider tiedostoihin
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 24s
unit-tests Link to Bats reports
CI Feature / Bats tests (push) Successful in 1m46s
acc-tests Link to Cucumber reports
CI Feature / Cucumber tests (push) Successful in 1m8s
CI Feature / Report Summary (push) Successful in 5s

This commit is contained in:
moilanik
2026-06-16 06:01:29 +03:00
parent 14a411e340
commit db1342685c
8 changed files with 208 additions and 8 deletions
@@ -0,0 +1,53 @@
# 9. Breaking changes kielletty
## Päätös
Providerin `v1`-tagin osoittamaa rajapintaa ei koskaan rikota.
Consumerin `uses:`-kutsut säilyvät yhteensopivina — uusi versiotagi
(`v2`, `v3`) luodaan VAIN jos taaksepäin yhteensopimaton muutos on
pakottava. Käytännössä: `v1` on pysyvä, ja sitä ylläpidetään
eteenpäin.
## Rajapinnan määritelmä
Providerin rajapinta = `config-provider.yml` ja `check-version.yml`
workflow_call-inputit ja -outputit:
- Inputtien nimet, tyypit ja required-arvot eivät muutu
- Outputtien nimet eivät katoa
- Secret-nimet eivät muutu
- Workflow-tiedoston nimi ja polku eivät muutu
Sisäinen toteutus (scriptit, checkout-logiikka, build-vaiheet) voi
muuttua vapaasti — consumer ei ole niistä riippuvainen.
## Versiotagin siirto
Tagi `v1` siirretään automaattisesti uusimpaan onnistuneeseen
main-commitin CI-ajoon (`tag-maintenance.yml`). Tagin nimi luetaan
tiedostosta `CURRENT_PROVIDER_VERSION`.
Jos breaking change joskus tulee pakottavaksi:
1. Päivitä `CURRENT_PROVIDER_VERSION``v2`
2. Luo uusi `v2`-tagi manuaalisesti (osoittaa uuteen rajapintaan)
3. `tag-maintenance.yml` alkaa ylläpitää `v2`:ta eteenpäin
4. `v1`-tagia **ei poisteta** — se jää osoittamaan viimeistä
v1-yhteensopivaa committia. `v1`:tä käyttävät consumerit
jatkavat toimintaansa ilman muutoksia.
5. Uudet consumerit ottavat käyttöön `@v2`:n.
Aktiivisesti ylläpidetään vain yhtä tagia (`CURRENT_PROVIDER_VERSION`).
Vanhat tagit säilyvät paikoillaan taaksepäin yhteensopivuutta varten.
## Perustelu
Yhden aktiivisen tagin ylläpito on yksinkertaisempaa kuin usean
rinnakkaisen version aktiivinen hallinta. Homelab-ympäristössä
consumerit ovat saman ylläpitäjän hallinnassa — eri tiimien
rinnakkaisia aktiiviversioita ei tarvita.
Breaking changen sattuessa vanha tagi säilyy — vanhat consumerit
eivät hajoa. Uusi tagi otetaan käyttöön uusissa consumereissa.
Breaking changen kielto pakottaa suunnittelemaan rajapinnat
huolellisesti etukäteen.
@@ -0,0 +1,43 @@
# 10. Pipeline-reititin — ei komentoja
## Päätös
CI-pipelinetiedostot (`ci-main.yml`, `ci-feature.yml`) ovat puhtaita
**reitittimiä**. Ne eivät saa sisältää `run:`-komentoja, inline-skriptejä
tai varsinaista build-/test-logiikkaa. Niiden ainoa sallittu sisältö on:
- `uses:` — viittaus reusable workflow'hun
- `needs:` — riippuvuus toisen jobin valmistumiseen
- `if:` — ehdollinen suoritus
- `secrets: inherit` — salaisuuksien välitys
## Mikä ei kuulu reitittimeen
- `run:`-komennot
- Inline-skriptit (shell, Python, tms.)
- `actions/checkout` (paitsi providerin sisäinen infrastruktuuri)
- Build-työkalut, testikomennot, Docker-komennot
- Raporttien generointi
## Missä logiikka on
| Kerros | Tiedosto | Sisältö |
|---|---|---|
| Reititin | `ci-main.yml`, `ci-feature.yml` | Vain `uses:`-kutsut |
| Workflow_call | `ci-unit-tests.yml`, `ci-acc-tests.yml`, … | Varsinainen testi-/build-logiikka |
| Provider | `config-provider.yml`, `check-version.yml`, … | Jaettu infrastruktuuri |
| Skriptit | `scripts/` | Apufunktiot (status, publish, validointi) |
## Perustelu
Reitittimen ja toteutuksen erottelu:
- Reititin kertoo **mitä** ajetaan ja **missä järjestyksessä** — luettavissa
yhdellä silmäyksellä ilman teknistä taustaa
- Toteutus (workflow_call) kertoo **miten** — tekninen henkilö voi keskittyä
yhteen tiedostoon kerrallaan
- Providerin reusable workflow't eivät koskaan sisällä inline-logiikkaa —
skriptit ovat omissa tiedostoissaan
Tämä on sama periaate kuin web-sovelluksissa: reititin ei sisällä
business-logiikkaa, vain HTTP-verbit ja polut.