uusi report logiikka
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 1m37s
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 1m37s
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:
@@ -79,16 +79,14 @@ Ei monoliittista `ci-tests.yml`. Jokainen testityyppi tai operaatio on oma `work
|
||||
|
||||
## 3. Exit-koodin käsittely
|
||||
|
||||
Jokainen testi kaappaa komentonsa exit-koodin eksplisiittisesti:
|
||||
`set -e` on oletuksena käytössä Gitea Actions -stepeissä — ensimmäinen feilaava komento pysäyttää stepin
|
||||
ja exit-koodi välittyy natiivisti. Ylimääräistä `EXIT=$?` + `echo >> GITHUB_ENV` -käärettä ei tarvita.
|
||||
|
||||
```yaml
|
||||
- name: Run tests
|
||||
shell: bash
|
||||
run: |
|
||||
<testikomento> > results.txt 2>&1
|
||||
EXIT=$?
|
||||
echo "EXIT=${EXIT}" >> "${GITHUB_ENV}"
|
||||
exit ${EXIT}
|
||||
```
|
||||
|
||||
**Miksi ei pipeä (`| tee`):**
|
||||
@@ -101,8 +99,8 @@ Jokainen testi kaappaa komentonsa exit-koodin eksplisiittisesti:
|
||||
<komento> > results.txt 2>&1
|
||||
```
|
||||
|
||||
Ilman `EXIT=$?` + `exit ${EXIT}` komento voi feilata mutta job menee läpi vihreänä — `container:`-modessa
|
||||
shellin käyttäytyminen vaihtelee.
|
||||
`set -e` ei pelasta pipe-tilanteessa — `|` syö exit-koodin kuten ennenkin. Redirectillä exit-koodi
|
||||
välittyy luonnollisesti.
|
||||
|
||||
## 4. Konttipolitiikka
|
||||
|
||||
@@ -120,38 +118,15 @@ valmiin `ci-container-build-<kontti>.yml`-pohjan jossa `workflow_dispatch`-tuki
|
||||
|
||||
### 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.
|
||||
Ainoa sallittu tapa on `container:`-direktiivi. `docker run` komennolla kontin
|
||||
käynnistäminen stepin sisällä on anti-pattern.
|
||||
|
||||
```yaml
|
||||
# Tapa A: container:-direktiivi
|
||||
jobs:
|
||||
<työkalu>:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ${{ inputs.<image-name> }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: <owner>/gitea-ci-library
|
||||
path: .ci
|
||||
- name: Run <työkalu>
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p "reports/${GITHUB_SHA:0:8}/<suite>"
|
||||
<komento> > "reports/${GITHUB_SHA:0:8}/<suite>/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:
|
||||
<työkalu>:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v4
|
||||
@@ -162,86 +137,86 @@ jobs:
|
||||
- name: Run <työkalu>
|
||||
shell: bash
|
||||
run: |
|
||||
docker volume create ws-<suite>
|
||||
tar c . | docker run --rm -i -v ws-<suite>:/data alpine tar x -C /data
|
||||
mkdir -p "reports/${GITHUB_SHA:0:8}/<suite>"
|
||||
set +e
|
||||
docker run --rm \
|
||||
-v ws-<suite>:/data \
|
||||
--entrypoint bash ${{ inputs.<image-name> }} \
|
||||
-c 'cd /data && <komento>' \
|
||||
> "reports/${GITHUB_SHA:0:8}/<suite>/results.txt" 2>&1
|
||||
EXIT=$?
|
||||
docker volume rm ws-<suite> > /dev/null 2>&1
|
||||
echo "EXIT=${EXIT}" >> "${GITHUB_ENV}"
|
||||
exit ${EXIT}
|
||||
mkdir -p "reports/<suite>"
|
||||
<komento> > "reports/<suite>/results.txt" 2>&1
|
||||
|
||||
- name: Publish <suite> reports
|
||||
if: always()
|
||||
run: bash .ci/scripts/publish-git-pages.sh <suite>
|
||||
|
||||
- name: Report status
|
||||
- name: Post-process reports
|
||||
if: always()
|
||||
run: |
|
||||
if [ "${EXIT}" = "0" ]; then
|
||||
bash .ci/scripts/report-status.sh success "<kuvaus>" <context> <suite>
|
||||
else
|
||||
bash .ci/scripts/report-status.sh failure "<kuvaus>" <context> <suite>
|
||||
fi
|
||||
<mahdollinen_raporttien_jälkikäsittely>
|
||||
|
||||
- name: Report
|
||||
if: always()
|
||||
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite>
|
||||
```
|
||||
|
||||
**Malli:** `example-bats-tests.yml` (tapa B).
|
||||
Jos testi tuottaa raportteja suoraan ilman jälkikäsittelyä, Post-process-steppiä ei tarvita.
|
||||
Jos jälkikäsittely on tarpeen (coverage-extraktio, HTML-generointi raa'asta outputista),
|
||||
se tehdään omassa stepissä `if: always()` — katso tarkemmin [Raporttitasot](#5-raporttitasot).
|
||||
|
||||
**Mallit:**
|
||||
- `example-cucumber-tests.yml` — ei post-processia
|
||||
- `example-bats-tests.yml` — post-process coverage + report
|
||||
|
||||
## 5. Raporttitasot
|
||||
|
||||
Testi tuottaa raportin `reports/${GITHUB_SHA:0:8}/<suite>/`-hakemistoon. `publish-git-pages.sh` julkaisee sen,
|
||||
`report-status.sh` linkittää commit-statusin siihen. Molemmat `if: always()`.
|
||||
Testi tuottaa raportin `reports/<suite>/`-hakemistoon. Yksi `ci-report.sh`-kutsu hoitaa sekä
|
||||
julkaisun että commit-statuksen — erillistä Publish + Report Status -kaksivaiheisuutta ei tarvita.
|
||||
|
||||
### Taso 1: Pelkkä teksti
|
||||
### Taso 1: Ei jälkikäsittelyä
|
||||
|
||||
Kun testi tuottaa vain stdout/stderr — tallennetaan `results.txt`:
|
||||
Kun testi tuottaa raportit suoraan (kuten `pytest --html` tai `cucumber-js --format html`):
|
||||
|
||||
```yaml
|
||||
- name: Run tests
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p "reports/${GITHUB_SHA:0:8}/<suite>"
|
||||
<testikomento> > "reports/${GITHUB_SHA:0:8}/<suite>/results.txt" 2>&1
|
||||
EXIT=$?
|
||||
echo "EXIT=${EXIT}" >> "${GITHUB_ENV}"
|
||||
exit ${EXIT}
|
||||
mkdir -p "reports/<suite>"
|
||||
<testikomento>
|
||||
|
||||
- name: Publish reports
|
||||
- name: Report
|
||||
if: always()
|
||||
shell: bash
|
||||
run: bash .ci/scripts/publish-git-pages.sh <suite>
|
||||
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite>
|
||||
```
|
||||
|
||||
- name: Report status
|
||||
if: always()
|
||||
### Taso 2: Jälkikäsittely tarvitaan
|
||||
|
||||
Kun testi tuottaa raakadataa (stdout, coverage-tiedostot) joka pitää muuntaa tai siirtää
|
||||
`reports/<suite>/`-hakemistoon, käytetään Post-process-steppiä:
|
||||
|
||||
```yaml
|
||||
- name: Run tests
|
||||
shell: bash
|
||||
run: |
|
||||
if [ "${EXIT}" = "0" ]; then
|
||||
bash .ci/scripts/report-status.sh success "<kuvaus>" <context> <suite>
|
||||
else
|
||||
bash .ci/scripts/report-status.sh failure "<kuvaus>" <context> <suite>
|
||||
fi
|
||||
mkdir -p "reports/<suite>"
|
||||
<testikomento> > "reports/<suite>/results.txt" 2>&1
|
||||
|
||||
- name: Post-process reports
|
||||
if: always()
|
||||
run: |
|
||||
<coverage-extraktio>
|
||||
<HTML-generointi raa'asta outputista>
|
||||
|
||||
- name: Report
|
||||
if: always()
|
||||
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite>
|
||||
```
|
||||
|
||||
### Taso 2: HTML-raportti
|
||||
**Malli:** `example-bats-tests.yml`.
|
||||
|
||||
Kun testi tuottaa strukturoitua dataa (JUnit XML, coverage, tms.) — generoidaan HTML ja `index.html`:
|
||||
### Monta raportoitavaa tiedostoa
|
||||
|
||||
Kun `reports/<suite>/`-hakemistossa on useita tiedostoja tai alihakemistoja,
|
||||
`ci-report.sh` generoi automaattisesti `reports/<suite>/index.html` jos hakemistossa
|
||||
on enemmän kuin yksi raportoitava item.
|
||||
|
||||
```
|
||||
reports/<sha8>/<suite>/
|
||||
├── index.html ← generoitu: linkit alla oleviin
|
||||
reports/<suite>/
|
||||
├── results.txt ← testin stdout
|
||||
├── junit.xml ← testin JUnit XML -output
|
||||
└── junit.html ← generoitu HTML (xsltproc, tms.)
|
||||
```
|
||||
|
||||
`index.html` linkittää kaikkiin raporttitiedostoihin. Selain avaa sen ja navigoi sieltä
|
||||
yksittäisiin raportteihin.
|
||||
|
||||
## 6. Nimeäminen
|
||||
|
||||
Tiedostonimet `.gitea/workflows/`-kansiossa noudattavat yhtenäistä rakennetta, jotta
|
||||
@@ -457,8 +432,9 @@ Gitean Settings → Branches → Add Rule:
|
||||
|
||||
| Skripti | Käyttötarkoitus |
|
||||
|---|---|
|
||||
| `report-status.sh` | POSTaa commit-statuksen linkillä |
|
||||
| `publish-git-pages.sh` | Julkaisee raporttihakemiston git-pagesiin |
|
||||
| `ci-report.sh` | Yhdistetty raportointi: julkaisee git-pagesiin ja asettaa commit-statuksen. Korvaa erilliset `publish-git-pages.sh` + `report-status.sh` -kutsut. Käyttö: `bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite>` |
|
||||
| `report-status.sh` | POSTaa commit-statuksen linkillä (kutsutaan `ci-report.sh`:n sisältä) |
|
||||
| `publish-git-pages.sh` | Julkaisee raporttihakemiston git-pagesiin (kutsutaan `ci-report.sh`:n sisältä) |
|
||||
| `ci-validate.sh` | Validoi `.conf`-tiedoston (kutsutaan `config-provider.yml`:stä) |
|
||||
|
||||
---
|
||||
@@ -499,7 +475,7 @@ Ei pipeä (`|`) komennon perässä — se syö exit-koodin. Käytä redirectiä
|
||||
|
||||
### Commit-status vain raporttilinkille (ADR 0007)
|
||||
|
||||
`report-status.sh`-skriptiä käytetään VAIN kun on raportti linkitettäväksi.
|
||||
`ci-report.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
|
||||
|
||||
Reference in New Issue
Block a user