env conf ylimääräinen value pois
CI / load-config (push) Successful in 12s
ci-cucumber Cucumber tests passed
ci-bats Bats tests
ci-build Build complete
CI / feature (push) Successful in 2m21s
CI / main (push) Has been skipped

This commit is contained in:
moilanik
2026-06-13 19:58:06 +03:00
parent 7b99392dd7
commit 09da2a7f28
13 changed files with 52 additions and 52 deletions
+1 -2
View File
@@ -19,8 +19,7 @@ on:
env: env:
GITEA_API_URL: ${{ fromJson(inputs.env_json).GITEA_API_URL }} GITEA_API_URL: ${{ fromJson(inputs.env_json).GITEA_API_URL }}
PAGES_HOST: ${{ fromJson(inputs.env_json).PAGES_HOST }} GIT_PAGES_URL: ${{ fromJson(inputs.env_json).GIT_PAGES_URL }}
GIT_PAGES_PUBLISH_URL: ${{ fromJson(inputs.env_json).GIT_PAGES_PUBLISH_URL }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }}
+1 -2
View File
@@ -16,8 +16,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
GITEA_API_URL: https://gitea.app.keskikuja.site GITEA_API_URL: https://gitea.app.keskikuja.site
PAGES_HOST: ci-reports.helm-dev.keskikuja.site GIT_PAGES_URL: https://ci-reports.helm-dev.keskikuja.site
GIT_PAGES_PUBLISH_URL: https://ci-reports.helm-dev.keskikuja.site
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }}
steps: steps:
+1 -2
View File
@@ -1,3 +1,2 @@
GITEA_API_URL=https://gitea.app.keskikuja.site GITEA_API_URL=https://gitea.app.keskikuja.site
PAGES_HOST=ci-reports.helm-dev.keskikuja.site GIT_PAGES_URL=https://ci-reports.helm-dev.keskikuja.site
GIT_PAGES_PUBLISH_URL=https://ci-reports.helm-dev.keskikuja.site
+28 -6
View File
@@ -192,17 +192,39 @@ Consumer-repossa on oltava seuraavat asetukset:
`GITEA_TOKEN` on Gitean sisäinen secret (`secrets.GITEA_TOKEN`), joka on automauttisesti saatavilla — sitä ei tarvitse erikseen luoda. `GITEA_TOKEN` on Gitean sisäinen secret (`secrets.GITEA_TOKEN`), joka on automauttisesti saatavilla — sitä ei tarvitse erikseen luoda.
### Org/Repo Variables (`{repo} → Settings → Actions → Variables`) ### Config-tiedosto (`.gitea/workflows/gitea-env.conf`)
Nämä tulevat `config-file`:n kautta (`env_json`-input). Katso [config-model.md](docs/config-model.md). Tiedoston **nimi ja polku on lukittu**: `.gitea/workflows/gitea-env.conf` consumer-repon juuressa.
Tämän tiedoston perusteella `config-provider.yml` tuottaa `env_json`-outputin, joka välitetään
workflowille.
Tiedosto on `key=value`-muotoinen (kuten `.env`). Kommentit ja tyhjät rivit sallittuja.
**Vaaditut avaimet:**
| Avain | Kuvaus |
|-------|--------|
| `GITEA_API_URL` | Gitea-palvelimen base URL (esim. `https://gitea.app.example.com`) |
| `GIT_PAGES_URL` | Git-pages-palvelimen URL ilman trailing slash (esim. `https://ci-reports.example.com`) |
**Validointisäännöt:**
- Arvot eivät saa olla tyhjiä
- Jos avaimen nimessä on `URL`, arvon on alettava `http://` tai `https://`
- Tiedoston on oltava olemassa (muuten job keskeytyy)
Esimerkki:
```
GITEA_API_URL=https://gitea.app.example.com
GIT_PAGES_URL=https://ci-reports.example.com
```
### Validaatio ### Validaatio
Jokaisen jobin alussa ajetaan `ci-validate.sh`, joka tarkistaa: Jokaisen jobin alussa `ci-validate.sh` tarkistaa:
- Vaaditut ympäristömuuttujat on asetettu - `.gitea/workflows/gitea-env.conf` on olemassa ja sen arvot ovat validit
- URLit ovat oikeaa muotoa - `GITEA_TOKEN` ja `GIT_PAGES_PUBLISH_TOKEN` on asetettu
Jos validointi epäonnistuu, job keskeytyy selkeällä virheviestillä ja Gitean commit-status näyttää epäonnistumisen linkkinä lokiin. Jos validointi epäonnistuu, job keskeytyy exit-koodilla 1 ja Gitean commit-status näyttää epäonnistumisen linkkinä lokiin.
### Muuta ### Muuta
+2 -2
View File
@@ -32,7 +32,7 @@ Ohut ja yksiselitteinen:
``` ```
scripts/publish-git-pages.sh <report-dir> scripts/publish-git-pages.sh <report-dir>
→ PATCH tar osoitteeseen PAGES_HOST → PATCH tar osoitteeseen GIT_PAGES_URL
→ palauttaa BASE URL:n → palauttaa BASE URL:n
git-pages tarjoaa: git-pages tarjoaa:
@@ -48,7 +48,7 @@ provider-logiikasta.
## Architecture (POC-tila) ## Architecture (POC-tila)
- **Provider & Consumer -malli**: `ci-engine.yml` on lukittu rajapinta. - **Provider & Consumer -malli**: `ci-engine.yml` on lukittu rajapinta.
ADR 0005. ADR 0005.
- **Raporttien hostaus**: git-pages Helm-chartilla (`git-pages/`). - **Raporttien hostaus**: git-pages Helm-chartilla (`git-pages/`), `GIT_PAGES_URL` määrittää perusosoitteen.
- **Retention**: sidecar samassa podissa, HTTP API localhost:3000, - **Retention**: sidecar samassa podissa, HTTP API localhost:3000,
Gitea API branch-check. Gitea API branch-check.
- **Commit-status**: Gitea Actions näyttää automaattisesti. API vain - **Commit-status**: Gitea Actions näyttää automaattisesti. API vain
+2 -2
View File
@@ -75,7 +75,7 @@ gitea-env.conf → config-provider.yml → env_json (yksi JSON-string)
GITEA_API_URL: ${{ fromJson(inputs.env_json).GITEA_API_URL }} GITEA_API_URL: ${{ fromJson(inputs.env_json).GITEA_API_URL }}
(4) (4)
kaikki jobit → $GITEA_API_URL, $PAGES_HOST jne. kaikki jobit → $GITEA_API_URL, $GIT_PAGES_URL jne.
(5) (5)
``` ```
@@ -84,7 +84,7 @@ Vaiheet:
2. `config-provider.yml` lukee confin ja tuottaa yhden JSON-stringin outputina 2. `config-provider.yml` lukee confin ja tuottaa yhden JSON-stringin outputina
3. `ci.yml` välittää JSONin `needs` + `with:` -ketjulla 3. `ci.yml` välittää JSONin `needs` + `with:` -ketjulla
4. `build-feature.yml` purkaa arvot workflow `env:`-tasolle `fromJson()`:lla 4. `build-feature.yml` purkaa arvot workflow `env:`-tasolle `fromJson()`:lla
5. Kaikki jobit käyttävät valmiita env-muuttujia (`$PAGES_HOST` jne.) 5. Kaikki jobit käyttävät valmiita env-muuttujia (`$GIT_PAGES_URL` jne.)
Avainkomponentit: Avainkomponentit:
- **config-provider.yml** — reusable workflow, joka muuntaa conf-tiedoston - **config-provider.yml** — reusable workflow, joka muuntaa conf-tiedoston
+3 -5
View File
@@ -5,8 +5,7 @@ SUITE_PATH="${1:-}"
[ -n "$SUITE_PATH" ] || { echo "ERROR: suite_path argument required" >&2; exit 1; } [ -n "$SUITE_PATH" ] || { echo "ERROR: suite_path argument required" >&2; exit 1; }
[ -n "${GITEA_API_URL:-}" ] || { echo "ERROR: GITEA_API_URL is not set" >&2; exit 1; } [ -n "${GITEA_API_URL:-}" ] || { echo "ERROR: GITEA_API_URL is not set" >&2; exit 1; }
[ -n "${PAGES_HOST:-}" ] || { echo "ERROR: PAGES_HOST is not set" >&2; exit 1; } [ -n "${GIT_PAGES_URL:-}" ] || { echo "ERROR: GIT_PAGES_URL is not set" >&2; exit 1; }
[ -n "${GIT_PAGES_PUBLISH_URL:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_URL is not set" >&2; exit 1; }
[ -n "${GIT_PAGES_PUBLISH_TOKEN:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_TOKEN is not set" >&2; exit 1; } [ -n "${GIT_PAGES_PUBLISH_TOKEN:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_TOKEN is not set" >&2; exit 1; }
[ -n "${GITHUB_REPOSITORY:-}" ] || { echo "ERROR: GITHUB_REPOSITORY is not set" >&2; exit 1; } [ -n "${GITHUB_REPOSITORY:-}" ] || { echo "ERROR: GITHUB_REPOSITORY is not set" >&2; exit 1; }
[ -n "${GITHUB_SHA:-}" ] || { echo "ERROR: GITHUB_SHA is not set" >&2; exit 1; } [ -n "${GITHUB_SHA:-}" ] || { echo "ERROR: GITHUB_SHA is not set" >&2; exit 1; }
@@ -16,12 +15,11 @@ REPO="${GITHUB_REPOSITORY##*/}"
SHA8="${GITHUB_SHA:0:8}" SHA8="${GITHUB_SHA:0:8}"
PAGES_USER="${GIT_PAGES_PUBLISH_USER:-publish}" PAGES_USER="${GIT_PAGES_PUBLISH_USER:-publish}"
REPORT_DIR="reports/${SHA8}/${SUITE_PATH%/}" REPORT_DIR="reports/${SHA8}/${SUITE_PATH%/}"
REPORT_BASE="https://${PAGES_HOST}/${OWNER}/${REPO}/reports/${SHA8}" REPORT_BASE="${GIT_PAGES_URL}/${OWNER}/${REPO}/reports/${SHA8}"
[ -d "$REPORT_DIR" ] || { echo "ERROR: not a directory: $REPORT_DIR" >&2; exit 1; } [ -d "$REPORT_DIR" ] || { echo "ERROR: not a directory: $REPORT_DIR" >&2; exit 1; }
PUBLISH_BASE="${GIT_PAGES_PUBLISH_URL%/}" PUBLISH_SITE_URL="${GIT_PAGES_URL}/"
PUBLISH_SITE_URL="${PUBLISH_BASE}/"
WORK=$(mktemp -d) WORK=$(mktemp -d)
TAR=$(mktemp) TAR=$(mktemp)
+1 -2
View File
@@ -6,8 +6,7 @@ SUITE_PATH="${1:-}"
[ -n "$SUITE_PATH" ] || { echo "ERROR: suite_path argument required" >&2; exit 1; } [ -n "$SUITE_PATH" ] || { echo "ERROR: suite_path argument required" >&2; exit 1; }
[ -n "${GITEA_API_URL:-}" ] || { echo "ERROR: GITEA_API_URL is not set" >&2; exit 1; } [ -n "${GITEA_API_URL:-}" ] || { echo "ERROR: GITEA_API_URL is not set" >&2; exit 1; }
[ -n "${GITEA_TOKEN:-}" ] || { echo "ERROR: GITEA_TOKEN is not set" >&2; exit 1; } [ -n "${GITEA_TOKEN:-}" ] || { echo "ERROR: GITEA_TOKEN is not set" >&2; exit 1; }
[ -n "${PAGES_HOST:-}" ] || { echo "ERROR: PAGES_HOST is not set" >&2; exit 1; } [ -n "${GIT_PAGES_URL:-}" ] || { echo "ERROR: GIT_PAGES_URL is not set" >&2; exit 1; }
[ -n "${GIT_PAGES_PUBLISH_URL:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_URL is not set" >&2; exit 1; }
[ -n "${GIT_PAGES_PUBLISH_TOKEN:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_TOKEN is not set" >&2; exit 1; } [ -n "${GIT_PAGES_PUBLISH_TOKEN:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_TOKEN is not set" >&2; exit 1; }
SCRIPT_DIR="$(dirname "$0")" SCRIPT_DIR="$(dirname "$0")"
+1 -1
View File
@@ -13,7 +13,7 @@ SUITE="${4:-}"
if [ -n "$SUITE" ]; then if [ -n "$SUITE" ]; then
SUITE="${SUITE%/}/" SUITE="${SUITE%/}/"
URL="https://${PAGES_HOST}/${GITHUB_REPOSITORY}/reports/${GITHUB_SHA:0:8}/${SUITE}" URL="${GIT_PAGES_URL}/${GITHUB_REPOSITORY}/reports/${GITHUB_SHA:0:8}/${SUITE}"
else else
URL="${GITEA_API_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" URL="${GITEA_API_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
fi fi
@@ -27,7 +27,7 @@ function bashQuiet(cmd) {
} }
function runReportStatus(args) { function runReportStatus(args) {
return bash(`export GITEA_API_URL="http://localhost:18080" GITEA_TOKEN="test-token-abc123" PAGES_HOST="reports.example.com" GITHUB_REPOSITORY="test-owner/test-repo" GITHUB_SHA="abc123def456789012345678901234567890abcd" GITHUB_RUN_ID="42"; bash "${REPORT_SCRIPT}" ${args}`); return bash(`export GITEA_API_URL="http://localhost:18080" GITEA_TOKEN="test-token-abc123" GIT_PAGES_URL="https://reports.example.com" GITHUB_REPOSITORY="test-owner/test-repo" GITHUB_SHA="abc123def456789012345678901234567890abcd" GITHUB_RUN_ID="42"; bash "${REPORT_SCRIPT}" ${args}`);
} }
function getMockBody() { function getMockBody() {
+6 -14
View File
@@ -3,8 +3,7 @@
setup() { setup() {
source tests/helpers/mock-api.sh source tests/helpers/mock-api.sh
export GITEA_API_URL="http://localhost:18080" export GITEA_API_URL="http://localhost:18080"
export PAGES_HOST="reports.example.com" export GIT_PAGES_URL="http://localhost:18080"
export GIT_PAGES_PUBLISH_URL="http://localhost:18080/"
export GIT_PAGES_PUBLISH_TOKEN="publish-token-abc" export GIT_PAGES_PUBLISH_TOKEN="publish-token-abc"
export GITHUB_REPOSITORY="test-owner/test-repo" export GITHUB_REPOSITORY="test-owner/test-repo"
export GITHUB_SHA="abc123def456789012345678901234567890abcd" export GITHUB_SHA="abc123def456789012345678901234567890abcd"
@@ -32,18 +31,11 @@ teardown() {
[[ "$output" == *"GITEA_API_URL"* ]] [[ "$output" == *"GITEA_API_URL"* ]]
} }
@test "missing PAGES_HOST → exit 1" { @test "missing GIT_PAGES_URL → exit 1" {
unset PAGES_HOST unset GIT_PAGES_URL
run bash scripts/publish-git-pages.sh "unit-tests" run bash scripts/publish-git-pages.sh "unit-tests"
[ "$status" -eq 1 ] [ "$status" -eq 1 ]
[[ "$output" == *"PAGES_HOST"* ]] [[ "$output" == *"GIT_PAGES_URL"* ]]
}
@test "missing GIT_PAGES_PUBLISH_URL → exit 1" {
unset GIT_PAGES_PUBLISH_URL
run bash scripts/publish-git-pages.sh "unit-tests"
[ "$status" -eq 1 ]
[[ "$output" == *"GIT_PAGES_PUBLISH_URL"* ]]
} }
@test "missing GIT_PAGES_PUBLISH_TOKEN → exit 1" { @test "missing GIT_PAGES_PUBLISH_TOKEN → exit 1" {
@@ -73,7 +65,7 @@ teardown() {
mock_start mock_start
run bash scripts/publish-git-pages.sh "unit-tests" run bash scripts/publish-git-pages.sh "unit-tests"
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
[[ "$output" == "https://reports.example.com/test-owner/test-repo/reports/abc123de" ]] [[ "$output" == "http://localhost:18080/test-owner/test-repo/reports/abc123de" ]]
} }
@test "publish with suite subpath" { @test "publish with suite subpath" {
@@ -85,7 +77,7 @@ teardown() {
mock_start mock_start
run bash scripts/publish-git-pages.sh "sub/suite" run bash scripts/publish-git-pages.sh "sub/suite"
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
[[ "$output" == "https://reports.example.com/test-owner/test-repo/reports/abc123de" ]] [[ "$output" == "http://localhost:18080/test-owner/test-repo/reports/abc123de" ]]
} }
@test "git-pages returns HTTP 500 → exit 1" { @test "git-pages returns HTTP 500 → exit 1" {
+4 -12
View File
@@ -3,8 +3,7 @@
setup() { setup() {
export GITEA_API_URL="http://localhost:18080" export GITEA_API_URL="http://localhost:18080"
export GITEA_TOKEN="test-token-abc" export GITEA_TOKEN="test-token-abc"
export PAGES_HOST="reports.example.com" export GIT_PAGES_URL="http://localhost:18080"
export GIT_PAGES_PUBLISH_URL="http://localhost:18080/"
export GIT_PAGES_PUBLISH_TOKEN="publish-token-abc" export GIT_PAGES_PUBLISH_TOKEN="publish-token-abc"
export GITHUB_REPOSITORY="test-owner/test-repo" export GITHUB_REPOSITORY="test-owner/test-repo"
export GITHUB_SHA="abc123def456789012345678901234567890abcd" export GITHUB_SHA="abc123def456789012345678901234567890abcd"
@@ -30,18 +29,11 @@ setup() {
[[ "$output" == *"GITEA_TOKEN"* ]] [[ "$output" == *"GITEA_TOKEN"* ]]
} }
@test "missing PAGES_HOST → exit 1" { @test "missing GIT_PAGES_URL → exit 1" {
unset PAGES_HOST unset GIT_PAGES_URL
run bash scripts/publish.sh "unit-tests" run bash scripts/publish.sh "unit-tests"
[ "$status" -eq 1 ] [ "$status" -eq 1 ]
[[ "$output" == *"PAGES_HOST"* ]] [[ "$output" == *"GIT_PAGES_URL"* ]]
}
@test "missing GIT_PAGES_PUBLISH_URL → exit 1" {
unset GIT_PAGES_PUBLISH_URL
run bash scripts/publish.sh "unit-tests"
[ "$status" -eq 1 ]
[[ "$output" == *"GIT_PAGES_PUBLISH_URL"* ]]
} }
@test "missing GIT_PAGES_PUBLISH_TOKEN → exit 1" { @test "missing GIT_PAGES_PUBLISH_TOKEN → exit 1" {
+1 -1
View File
@@ -4,7 +4,7 @@ setup() {
source tests/helpers/mock-api.sh source tests/helpers/mock-api.sh
export GITEA_API_URL="http://localhost:18080" export GITEA_API_URL="http://localhost:18080"
export GITEA_TOKEN="test-token-abc123" export GITEA_TOKEN="test-token-abc123"
export PAGES_HOST="reports.example.com" export GIT_PAGES_URL="https://reports.example.com"
export GITHUB_REPOSITORY="test-owner/test-repo" export GITHUB_REPOSITORY="test-owner/test-repo"
export GITHUB_SHA="abc123def456789012345678901234567890abcd" export GITHUB_SHA="abc123def456789012345678901234567890abcd"
export GITHUB_RUN_ID="42" export GITHUB_RUN_ID="42"