report kutsu päivittää todellisen commit statuksen
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 20s
acc-tests Cucumber test report
CI Feature / Cucumber tests (push) Successful in 1m7s
CI Feature / Bats tests (push) Failing after 14s
CI Feature / Report Summary (push) Successful in 8s
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 20s
acc-tests Cucumber test report
CI Feature / Cucumber tests (push) Successful in 1m7s
CI Feature / Bats tests (push) Failing after 14s
CI Feature / Report Summary (push) Successful in 8s
This commit is contained in:
@@ -1,21 +1,41 @@
|
|||||||
name: Build CI Bats Container (Manual)
|
name: CI Container Build Bats
|
||||||
on: workflow_dispatch
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
config_path:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
default: '.gitea/workflows/example-gitea-env.conf'
|
||||||
|
description: 'Polku .gitea-env.conf-tiedostoon'
|
||||||
|
dockerfile_path:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
default: 'Dockerfile.ci-bats'
|
||||||
|
description: 'Polku Dockerfileen'
|
||||||
|
image_name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
default: 'ci-bats'
|
||||||
|
description: 'Kontin nimi ilman registry-polkua'
|
||||||
|
tag:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
default: 'latest'
|
||||||
|
description: 'Image-tägi'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
load-config:
|
load-config:
|
||||||
name: Load config
|
|
||||||
uses: niko/gitea-ci-library/.gitea/workflows/config-provider.yml@main
|
uses: niko/gitea-ci-library/.gitea/workflows/config-provider.yml@main
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
with:
|
with:
|
||||||
config_path: .gitea/workflows/example-gitea-env.conf
|
config_path: ${{ inputs.config_path }}
|
||||||
|
|
||||||
build-push:
|
build-push:
|
||||||
name: Build & Push
|
|
||||||
needs: [load-config]
|
needs: [load-config]
|
||||||
uses: niko/gitea-ci-library/.gitea/workflows/ci-container-build-push.yml@main
|
uses: niko/gitea-ci-library/.gitea/workflows/ci-container-build-push.yml@main
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
with:
|
with:
|
||||||
env_json: ${{ needs.load-config.outputs.env_json }}
|
env_json: ${{ needs.load-config.outputs.env_json }}
|
||||||
dockerfile_path: Dockerfile.ci-bats
|
dockerfile_path: ${{ inputs.dockerfile_path }}
|
||||||
image_name: ci-bats
|
image_name: ${{ inputs.image_name }}
|
||||||
tag: latest
|
tag: ${{ inputs.tag }}
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
FROM bats/bats:1.11.0
|
FROM bats/bats:1.11.0
|
||||||
RUN apk add --no-cache lsof python3 jq curl ruby nodejs && \
|
RUN apk add --no-cache lsof python3 jq curl ruby nodejs git && \
|
||||||
gem install bashcov -v 3.3.0
|
gem install bashcov -v 3.3.0
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -euo pipefail
|
|||||||
DESCRIPTION="${1:-}"
|
DESCRIPTION="${1:-}"
|
||||||
CONTEXT="${2:-}"
|
CONTEXT="${2:-}"
|
||||||
SUITE="${3:-}"
|
SUITE="${3:-}"
|
||||||
|
STATUS="${4:-success}"
|
||||||
|
|
||||||
[ -n "$DESCRIPTION" ] || { echo "ERROR: description argument required" >&2; exit 1; }
|
[ -n "$DESCRIPTION" ] || { echo "ERROR: description argument required" >&2; exit 1; }
|
||||||
[ -n "$CONTEXT" ] || { echo "ERROR: context argument required" >&2; exit 1; }
|
[ -n "$CONTEXT" ] || { echo "ERROR: context argument required" >&2; exit 1; }
|
||||||
@@ -75,12 +76,12 @@ if [ "$TOTAL" -eq 1 ]; then
|
|||||||
ENTRY="${SUBDIRS[0]}/index.html"
|
ENTRY="${SUBDIRS[0]}/index.html"
|
||||||
fi
|
fi
|
||||||
URL="${GIT_PAGES_URL}/${GITHUB_REPOSITORY}/reports/${SHA8}/${SUITE}/${ENTRY}"
|
URL="${GIT_PAGES_URL}/${GITHUB_REPOSITORY}/reports/${SHA8}/${SUITE}/${ENTRY}"
|
||||||
bash .ci/scripts/report-status.sh success "$DESCRIPTION" "$CONTEXT" "" "$URL"
|
bash .ci/scripts/report-status.sh "$STATUS" "$DESCRIPTION" "$CONTEXT" "" "$URL"
|
||||||
else
|
else
|
||||||
generate_index
|
generate_index
|
||||||
cp -a "$REPORT_DIR/." "$STAGED/"
|
cp -a "$REPORT_DIR/." "$STAGED/"
|
||||||
bash .ci/scripts/publish-git-pages.sh "$SUITE"
|
bash .ci/scripts/publish-git-pages.sh "$SUITE"
|
||||||
bash .ci/scripts/report-status.sh success "$DESCRIPTION" "$CONTEXT" "$SUITE"
|
bash .ci/scripts/report-status.sh "$STATUS" "$DESCRIPTION" "$CONTEXT" "$SUITE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf "$STAGED"
|
rm -rf "$STAGED"
|
||||||
|
|||||||
@@ -102,9 +102,35 @@ ja exit-koodi välittyy natiivisti. Ylimääräistä `EXIT=$?` + `echo >> GITHUB
|
|||||||
`set -e` ei pelasta pipe-tilanteessa — `|` syö exit-koodin kuten ennenkin. Redirectillä exit-koodi
|
`set -e` ei pelasta pipe-tilanteessa — `|` syö exit-koodin kuten ennenkin. Redirectillä exit-koodi
|
||||||
välittyy luonnollisesti.
|
välittyy luonnollisesti.
|
||||||
|
|
||||||
**Yksi asia per step:** Älä koskaan niputa useaa post-process-komentoa samaan `run:`-blockiin.
|
**Yksi asia per step:** Älä koskaan niputa useaa komentoa samaan `run:`-blockiin — oli kyse
|
||||||
`bash -e` pysäyttää koko stepin jos yksi komento epäonnistuu — seuraavat jäävät ajamatta.
|
sitten post-processista tai testi- / tarkistusvaiheista. `bash -e` pysäyttää koko stepin
|
||||||
Käytä erillisiä steppejä `if: always()`:lla, jotta jokainen vaihe ajetaan itsenäisesti:
|
ensimmäisellä failaavalla komennolla, ja loput jäävät ajamatta.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# VÄÄRIN — helm template fail → kubeconform jää ajamatta, report jää tekemättä
|
||||||
|
- name: Run tests
|
||||||
|
run: |
|
||||||
|
helm template ... > /tmp/manifests.yaml
|
||||||
|
kubeconform ... > results.txt 2>&1
|
||||||
|
|
||||||
|
# OIKEIN — erilliset stepit
|
||||||
|
- name: Helm template
|
||||||
|
run: helm template platform-helm/ -f values.yaml > /tmp/manifests.yaml 2>&1
|
||||||
|
|
||||||
|
- name: Kubeconform
|
||||||
|
if: success()
|
||||||
|
run: |
|
||||||
|
mkdir -p reports/kubeconform
|
||||||
|
kubeconform ... > reports/kubeconform/results.txt 2>&1
|
||||||
|
|
||||||
|
- name: Report
|
||||||
|
if: always()
|
||||||
|
run: bash .ci/scripts/ci-report.sh "Helm kubeconform" helm-test kubeconform ${{ job.status }}
|
||||||
|
```
|
||||||
|
|
||||||
|
Sama pätee post-process-steppeihin. Älä koskaan niputa useaa post-process-komentoa
|
||||||
|
samaan `run:`-blockiin. Käytä erillisiä steppejä `if: always()`:lla, jotta jokainen
|
||||||
|
vaihe ajetaan itsenäisesti:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# VÄÄRIN — jos coverage epäonnistuu, report jää generoimatta
|
# VÄÄRIN — jos coverage epäonnistuu, report jää generoimatta
|
||||||
@@ -180,9 +206,30 @@ jobs:
|
|||||||
|
|
||||||
- name: Report
|
- name: Report
|
||||||
if: always()
|
if: always()
|
||||||
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite>
|
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite> ${{ job.status }}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Huomio `actions/checkout@v4`:stä:** `container:`-direktiivillä kaikki stepit
|
||||||
|
ajetaan kontin *sisällä* — myös `actions/checkout@v4`. Se on JavaScript-action
|
||||||
|
joka vaatii sekä `nodejs` että `git`. Ilman kumpaa tahansa checkout feilaa
|
||||||
|
`exit 127`.
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
# Varmista että kontissa on nodejs + git
|
||||||
|
RUN apk add --no-cache nodejs git
|
||||||
|
```
|
||||||
|
|
||||||
|
**Tarkista siis aina** että CI-kontin Dockerfilessä on sekä `nodejs` että `git`
|
||||||
|
asennettuna. Sama pätee mihin tahansa konttiin jota käytetään `container:`-direktiivillä.
|
||||||
|
|
||||||
|
**Usean runnerin cache-ongelma:** Jos eri kerroilla käynnistyy eri runnereita,
|
||||||
|
niillä voi olla eri versio `latest`-imagen digesteistä. Tämä on `latest`-tagin
|
||||||
|
tunnettu ongelma. Ratkaisuja:
|
||||||
|
- Rebuildaa kontti ja aja `docker pull <image>` manuaalisesti kaikilla
|
||||||
|
runnereilla
|
||||||
|
- Käytä versioitua tagia (`v2`, `v3`, ...) ja päivitä workflow'n default
|
||||||
|
buildauksen jälkeen
|
||||||
|
|
||||||
Jos testi tuottaa raportteja suoraan ilman jälkikäsittelyä, Post-process-steppiä ei tarvita.
|
Jos testi tuottaa raportteja suoraan ilman jälkikäsittelyä, Post-process-steppiä ei tarvita.
|
||||||
Jos jälkikäsittely on tarpeen (coverage-siirto, HTML-generointi raa'asta outputista),
|
Jos jälkikäsittely on tarpeen (coverage-siirto, HTML-generointi raa'asta outputista),
|
||||||
se tehdään omassa stepissä `if: always()` — katso tarkemmin [Raporttitasot](#5-raporttitasot).
|
se tehdään omassa stepissä `if: always()` — katso tarkemmin [Raporttitasot](#5-raporttitasot).
|
||||||
@@ -209,7 +256,7 @@ Kun testi tuottaa raportit suoraan (kuten `pytest --html` tai `cucumber-js --for
|
|||||||
|
|
||||||
- name: Report
|
- name: Report
|
||||||
if: always()
|
if: always()
|
||||||
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite>
|
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite> ${{ job.status }}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Taso 2: Jälkikäsittely tarvitaan
|
### Taso 2: Jälkikäsittely tarvitaan
|
||||||
@@ -235,7 +282,7 @@ omassa stepissään** — älä koskaan niputa useaa post-process-komentoa samaa
|
|||||||
|
|
||||||
- name: Report
|
- name: Report
|
||||||
if: always()
|
if: always()
|
||||||
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite>
|
run: bash .ci/scripts/ci-report.sh "<kuvaus>" <context> <suite> ${{ job.status }}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Huomio subdir-sisällöstä:** Jos testi tuottaa dataa alihakemistoon (esim.
|
**Huomio subdir-sisällöstä:** Jos testi tuottaa dataa alihakemistoon (esim.
|
||||||
@@ -557,7 +604,7 @@ Gitean Settings → Branches → Add Rule:
|
|||||||
|
|
||||||
| Skripti | Käyttötarkoitus |
|
| Skripti | Käyttötarkoitus |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `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>` |
|
| `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> ${{ job.status }}` |
|
||||||
| `report-status.sh` | POSTaa commit-statuksen linkillä (kutsutaan `ci-report.sh`:n sisältä) |
|
| `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ä) |
|
| `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ä) |
|
| `ci-validate.sh` | Validoi `.conf`-tiedoston (kutsutaan `config-provider.yml`:stä) |
|
||||||
|
|||||||
Reference in New Issue
Block a user