diff --git a/.gitea/workflows/build-feature.yml b/.gitea/workflows/build-feature.yml index 236b17e..a554e1e 100644 --- a/.gitea/workflows/build-feature.yml +++ b/.gitea/workflows/build-feature.yml @@ -19,8 +19,7 @@ on: env: GITEA_API_URL: ${{ fromJson(inputs.env_json).GITEA_API_URL }} - PAGES_HOST: ${{ fromJson(inputs.env_json).PAGES_HOST }} - GIT_PAGES_PUBLISH_URL: ${{ fromJson(inputs.env_json).GIT_PAGES_PUBLISH_URL }} + GIT_PAGES_URL: ${{ fromJson(inputs.env_json).GIT_PAGES_URL }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} diff --git a/.gitea/workflows/ci-engine.yml b/.gitea/workflows/ci-engine.yml index ba66fb6..5cdace7 100644 --- a/.gitea/workflows/ci-engine.yml +++ b/.gitea/workflows/ci-engine.yml @@ -16,8 +16,7 @@ jobs: runs-on: ubuntu-latest env: GITEA_API_URL: https://gitea.app.keskikuja.site - PAGES_HOST: ci-reports.helm-dev.keskikuja.site - GIT_PAGES_PUBLISH_URL: https://ci-reports.helm-dev.keskikuja.site + GIT_PAGES_URL: https://ci-reports.helm-dev.keskikuja.site GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} steps: diff --git a/.gitea/workflows/gitea-env.conf b/.gitea/workflows/gitea-env.conf index 3349d01..72dba50 100644 --- a/.gitea/workflows/gitea-env.conf +++ b/.gitea/workflows/gitea-env.conf @@ -1,3 +1,2 @@ GITEA_API_URL=https://gitea.app.keskikuja.site -PAGES_HOST=ci-reports.helm-dev.keskikuja.site -GIT_PAGES_PUBLISH_URL=https://ci-reports.helm-dev.keskikuja.site +GIT_PAGES_URL=https://ci-reports.helm-dev.keskikuja.site diff --git a/README.md b/README.md index 625b97d..5a1eded 100644 --- a/README.md +++ b/README.md @@ -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. -### 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 -Jokaisen jobin alussa ajetaan `ci-validate.sh`, joka tarkistaa: -- Vaaditut ympäristömuuttujat on asetettu -- URLit ovat oikeaa muotoa +Jokaisen jobin alussa `ci-validate.sh` tarkistaa: +- `.gitea/workflows/gitea-env.conf` on olemassa ja sen arvot ovat validit +- `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 diff --git a/docs/ai-context.md b/docs/ai-context.md index c5b2a0e..6deda3f 100644 --- a/docs/ai-context.md +++ b/docs/ai-context.md @@ -32,7 +32,7 @@ Ohut ja yksiselitteinen: ``` scripts/publish-git-pages.sh - → PATCH tar osoitteeseen PAGES_HOST + → PATCH tar osoitteeseen GIT_PAGES_URL → palauttaa BASE URL:n git-pages tarjoaa: @@ -48,7 +48,7 @@ provider-logiikasta. ## Architecture (POC-tila) - **Provider & Consumer -malli**: `ci-engine.yml` on lukittu rajapinta. 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, Gitea API branch-check. - **Commit-status**: Gitea Actions näyttää automaattisesti. API vain diff --git a/docs/ci-pipeline-practices.md b/docs/ci-pipeline-practices.md index 7ab8230..ba08ad5 100644 --- a/docs/ci-pipeline-practices.md +++ b/docs/ci-pipeline-practices.md @@ -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 }} (4) ↓ - kaikki jobit → $GITEA_API_URL, $PAGES_HOST jne. + kaikki jobit → $GITEA_API_URL, $GIT_PAGES_URL jne. (5) ``` @@ -84,7 +84,7 @@ Vaiheet: 2. `config-provider.yml` lukee confin ja tuottaa yhden JSON-stringin outputina 3. `ci.yml` välittää JSONin `needs` + `with:` -ketjulla 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: - **config-provider.yml** — reusable workflow, joka muuntaa conf-tiedoston diff --git a/scripts/publish-git-pages.sh b/scripts/publish-git-pages.sh index e9e9326..81228a7 100755 --- a/scripts/publish-git-pages.sh +++ b/scripts/publish-git-pages.sh @@ -5,8 +5,7 @@ SUITE_PATH="${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 "${PAGES_HOST:-}" ] || { echo "ERROR: PAGES_HOST 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_URL:-}" ] || { echo "ERROR: GIT_PAGES_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 "${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; } @@ -16,12 +15,11 @@ REPO="${GITHUB_REPOSITORY##*/}" SHA8="${GITHUB_SHA:0:8}" PAGES_USER="${GIT_PAGES_PUBLISH_USER:-publish}" 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; } -PUBLISH_BASE="${GIT_PAGES_PUBLISH_URL%/}" -PUBLISH_SITE_URL="${PUBLISH_BASE}/" +PUBLISH_SITE_URL="${GIT_PAGES_URL}/" WORK=$(mktemp -d) TAR=$(mktemp) diff --git a/scripts/publish.sh b/scripts/publish.sh index 8ffb5d0..eb9b53e 100644 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -6,8 +6,7 @@ SUITE_PATH="${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_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_PUBLISH_URL:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_URL 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_TOKEN:-}" ] || { echo "ERROR: GIT_PAGES_PUBLISH_TOKEN is not set" >&2; exit 1; } SCRIPT_DIR="$(dirname "$0")" diff --git a/scripts/report-status.sh b/scripts/report-status.sh index 4d7cc7f..d2c10ce 100755 --- a/scripts/report-status.sh +++ b/scripts/report-status.sh @@ -13,7 +13,7 @@ SUITE="${4:-}" if [ -n "$SUITE" ]; then 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 URL="${GITEA_API_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" fi diff --git a/tests/features/step_definitions/commit-status.steps.js b/tests/features/step_definitions/commit-status.steps.js index 8358205..3cbe24a 100644 --- a/tests/features/step_definitions/commit-status.steps.js +++ b/tests/features/step_definitions/commit-status.steps.js @@ -27,7 +27,7 @@ function bashQuiet(cmd) { } 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() { diff --git a/tests/publish-git-pages.bats b/tests/publish-git-pages.bats index b99f8f5..1e62214 100644 --- a/tests/publish-git-pages.bats +++ b/tests/publish-git-pages.bats @@ -3,8 +3,7 @@ setup() { source tests/helpers/mock-api.sh export GITEA_API_URL="http://localhost:18080" - export PAGES_HOST="reports.example.com" - export GIT_PAGES_PUBLISH_URL="http://localhost:18080/" + export GIT_PAGES_URL="http://localhost:18080" export GIT_PAGES_PUBLISH_TOKEN="publish-token-abc" export GITHUB_REPOSITORY="test-owner/test-repo" export GITHUB_SHA="abc123def456789012345678901234567890abcd" @@ -32,18 +31,11 @@ teardown() { [[ "$output" == *"GITEA_API_URL"* ]] } -@test "missing PAGES_HOST → exit 1" { - unset PAGES_HOST +@test "missing GIT_PAGES_URL → exit 1" { + unset GIT_PAGES_URL run bash scripts/publish-git-pages.sh "unit-tests" [ "$status" -eq 1 ] - [[ "$output" == *"PAGES_HOST"* ]] -} - -@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"* ]] + [[ "$output" == *"GIT_PAGES_URL"* ]] } @test "missing GIT_PAGES_PUBLISH_TOKEN → exit 1" { @@ -73,7 +65,7 @@ teardown() { mock_start run bash scripts/publish-git-pages.sh "unit-tests" [ "$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" { @@ -85,7 +77,7 @@ teardown() { mock_start run bash scripts/publish-git-pages.sh "sub/suite" [ "$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" { diff --git a/tests/publish.bats b/tests/publish.bats index f725e7a..36832b4 100644 --- a/tests/publish.bats +++ b/tests/publish.bats @@ -3,8 +3,7 @@ setup() { export GITEA_API_URL="http://localhost:18080" export GITEA_TOKEN="test-token-abc" - export PAGES_HOST="reports.example.com" - export GIT_PAGES_PUBLISH_URL="http://localhost:18080/" + export GIT_PAGES_URL="http://localhost:18080" export GIT_PAGES_PUBLISH_TOKEN="publish-token-abc" export GITHUB_REPOSITORY="test-owner/test-repo" export GITHUB_SHA="abc123def456789012345678901234567890abcd" @@ -30,18 +29,11 @@ setup() { [[ "$output" == *"GITEA_TOKEN"* ]] } -@test "missing PAGES_HOST → exit 1" { - unset PAGES_HOST +@test "missing GIT_PAGES_URL → exit 1" { + unset GIT_PAGES_URL run bash scripts/publish.sh "unit-tests" [ "$status" -eq 1 ] - [[ "$output" == *"PAGES_HOST"* ]] -} - -@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"* ]] + [[ "$output" == *"GIT_PAGES_URL"* ]] } @test "missing GIT_PAGES_PUBLISH_TOKEN → exit 1" { diff --git a/tests/report-status.bats b/tests/report-status.bats index 94df6fa..786c731 100644 --- a/tests/report-status.bats +++ b/tests/report-status.bats @@ -4,7 +4,7 @@ setup() { source tests/helpers/mock-api.sh export GITEA_API_URL="http://localhost:18080" 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_SHA="abc123def456789012345678901234567890abcd" export GITHUB_RUN_ID="42"