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
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:
@@ -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.
|
||||
@@ -87,7 +87,7 @@ JSON-muotoisen `env_json`:n.
|
||||
Kutsu:
|
||||
```yaml
|
||||
load-config:
|
||||
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@main
|
||||
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@v1
|
||||
secrets: inherit
|
||||
with:
|
||||
config_path: .gitea/workflows/gitea-env.conf
|
||||
|
||||
+62
-6
@@ -137,7 +137,7 @@ on:
|
||||
|
||||
jobs:
|
||||
load-config:
|
||||
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@main
|
||||
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@v1
|
||||
secrets: inherit
|
||||
with:
|
||||
config_path: .gitea/workflows/gitea-env.conf
|
||||
@@ -159,7 +159,7 @@ jobs:
|
||||
report-summary:
|
||||
needs: [load-config, unit-tests, acc-tests]
|
||||
if: always()
|
||||
uses: org/gitea-ci-library/.gitea/workflows/report-summary.yml@main
|
||||
uses: org/gitea-ci-library/.gitea/workflows/report-summary.yml@v1
|
||||
with:
|
||||
env_json: ${{ needs.load-config.outputs.env_json }}
|
||||
suites: junit cucumber
|
||||
@@ -181,14 +181,14 @@ on:
|
||||
|
||||
jobs:
|
||||
load-config:
|
||||
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@main
|
||||
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@v1
|
||||
secrets: inherit
|
||||
with:
|
||||
config_path: .gitea/workflows/gitea-env.conf
|
||||
|
||||
check-version:
|
||||
needs: [load-config]
|
||||
uses: org/gitea-ci-library/.gitea/workflows/check-version.yml@main
|
||||
uses: org/gitea-ci-library/.gitea/workflows/check-version.yml@v1
|
||||
secrets: inherit
|
||||
with:
|
||||
env_json: ${{ needs.load-config.outputs.env_json }}
|
||||
@@ -212,7 +212,7 @@ jobs:
|
||||
build-push:
|
||||
needs: [load-config, check-version, unit-tests, acc-tests]
|
||||
if: needs.check-version.outputs.artifact_exists != 'true'
|
||||
uses: org/gitea-ci-library/.gitea/workflows/docker-build-push.yml@main
|
||||
uses: org/gitea-ci-library/.gitea/workflows/docker-build-push.yml@v1
|
||||
secrets: inherit
|
||||
with:
|
||||
env_json: ${{ needs.load-config.outputs.env_json }}
|
||||
@@ -221,7 +221,7 @@ jobs:
|
||||
report-summary:
|
||||
needs: [load-config, unit-tests, acc-tests]
|
||||
if: always()
|
||||
uses: org/gitea-ci-library/.gitea/workflows/report-summary.yml@main
|
||||
uses: org/gitea-ci-library/.gitea/workflows/report-summary.yml@v1
|
||||
with:
|
||||
env_json: ${{ needs.load-config.outputs.env_json }}
|
||||
suites: junit cucumber
|
||||
@@ -388,3 +388,59 @@ hajota vanhemmilla versioilla.
|
||||
| `report-status.sh` | POSTaa commit-statuksen linkillä |
|
||||
| `publish-git-pages.sh` | Julkaisee raporttihakemiston git-pagesiin |
|
||||
| `ci-validate.sh` | Validoi `.conf`-tiedoston (kutsutaan `config-provider.yml`:stä) |
|
||||
|
||||
---
|
||||
|
||||
## ADR-yhteenveto — consumerin kannalta oleelliset säännöt
|
||||
|
||||
Nämä säännöt on formalisoitu [docs/adr/](docs/adr/)-hakemistossa. Tässä tiivistelmä
|
||||
consumer-näkökulmasta:
|
||||
|
||||
### Reititin ei sisällä suorittavaa koodia (ADR 0010)
|
||||
|
||||
`ci-feature.yml` ja `ci-main.yml` ovat **puhtaita reitittimiä**:
|
||||
- **Vain** `uses:`, `needs:` ja `if:` sallittu
|
||||
- **Ei** `run:`-komentoja, ei inline-skriptejä, ei `actions/checkout`
|
||||
|
||||
Kaikki suorittava koodi on omissa `workflow_call`-tiedostoissaan:
|
||||
- `ci-unit-tests.yml` — testikomento, publish, status
|
||||
- `ci-acc-tests.yml` — testikomento, publish, status
|
||||
- Provider-workflowt (`config-provider.yml`, `check-version.yml`, …)
|
||||
|
||||
### Yksi steppi = yksi workflow_call-tiedosto
|
||||
|
||||
Jokainen pipeline-steppi (testityyppi, build, deploy) on oma tiedostonsa.
|
||||
Ei kahta eri komentoa samassa workflow'ssa. Tämä pitää reitittimet ohuina
|
||||
ja steppitiedostot itsenäisinä — testattavissa erikseen.
|
||||
|
||||
### Provider-versio on `@v1` (ADR 0009)
|
||||
|
||||
Kaikki `org/gitea-ci-library/…`-viittaukset käyttävät `@v1`-tagia:
|
||||
```yaml
|
||||
uses: org/gitea-ci-library/.gitea/workflows/config-provider.yml@v1
|
||||
```
|
||||
`@main` on vain providerin oman repon sisäiseen dogfood-käyttöön.
|
||||
|
||||
Breaking changet on kielletty — `v1`-rajapinta on pysyvä.
|
||||
|
||||
### Exit-koodi on ainoa onnistumisen mittari (ADR 0008)
|
||||
|
||||
Älä käytä pipeä (`|`) komennon perässä — se syö exit-koodin.
|
||||
Käytä redirectiä (`> file 2>&1`) jos haluat logit talteen.
|
||||
|
||||
### Commit-status vain raporttilinkille (ADR 0007)
|
||||
|
||||
`report-status.sh`-skriptiä käytetään VAIN kun on raportti linkitettäväksi.
|
||||
Tool-jobit (build, deploy) luottavat Gitean natiiviin job-statukseen.
|
||||
|
||||
### Providerin checkout ei kuulu consumerille
|
||||
|
||||
Providerin scriptit haetaan `actions/checkout`-stepillä. Consumer käyttää
|
||||
providerin määrittelemää polkua (`.ci/scripts/`). Consumer ei kopioi eikä
|
||||
muokkaa providerin tiedostoja.
|
||||
|
||||
### Testattavuus
|
||||
|
||||
Jokainen `workflow_call`-tiedosto on testattavissa itsenäisesti — consumer
|
||||
voi ajaa `ci-unit-tests.yml`:n paikallisesti act:lla tai Gitean
|
||||
`workflow_dispatch`:llä ilman koko pipelineä.
|
||||
|
||||
Reference in New Issue
Block a user