From c354afc8d7ad9a3f024ac73796faab8e1d8bb64d Mon Sep 17 00:00:00 2001 From: moilanik Date: Sun, 28 Jun 2026 04:27:38 +0300 Subject: [PATCH] v3 --- docs/git-pages-nginx-arkkitehtuuri.md | 98 +++++++++++++++++++++++---- git-pages/dev-values.yaml | 10 +-- 2 files changed, 90 insertions(+), 18 deletions(-) diff --git a/docs/git-pages-nginx-arkkitehtuuri.md b/docs/git-pages-nginx-arkkitehtuuri.md index d471d62..c92b47c 100644 --- a/docs/git-pages-nginx-arkkitehtuuri.md +++ b/docs/git-pages-nginx-arkkitehtuuri.md @@ -91,7 +91,8 @@ Browser → GET → Traefik | Tiedosto | Muutos | |----------|--------| | `scripts/publish-git-pages.sh` | Uusi: `curl -X PUT` tar.gz upload-sidecariin | -| `scripts/report-status.sh` | Tarkista URL-muoto | +| `scripts/report-status.sh` | URL: `reports/` → `${GITHUB_REF_NAME}/` | +| `scripts/ci-report.sh` | URL (rivi 101): `reports/` → `${GITHUB_REF_NAME}/` | | `git-pages/docs/architecture.md` | Uusi arkkitehtuuri | | `docs/design-rationale.md` | Päivitys | | `files/retention-*.sh` | Lue PV:tä suoraan, ei git-pages API:a | @@ -240,7 +241,7 @@ retention: rules: branches: default: - maxAgeDays: 90 + minAgeDays: 7 keepMin: 5 ``` @@ -355,6 +356,18 @@ Tarkista: `GITHUB_REF_NAME` on oltava asetettu — Gitea Actions asettaa sen aut Sama muuri: `reports/` → `${GITHUB_REF_NAME}/`. Loppuosa identtinen. +## CI-report (ci-report.sh) + +`scripts/ci-report.sh` rakentaa URL:n suoraan single-entry-tapauksessa (rivi 101). + +### Muutos + +| Kohta | Nykyinen (rivi 101) | Uusi | +|-------|-------------------|------| +| URL | `${GIT_PAGES_URL}/${GITHUB_REPOSITORY}/reports/${SHA8}/${SUITE}/${SINGLE_ENTRY}` | `${GIT_PAGES_URL}/${GITHUB_REPOSITORY}/${GITHUB_REF_NAME}/${SHA8}/${SUITE}/${SINGLE_ENTRY}` | + +`reports/` → `${GITHUB_REF_NAME}/`. Lisäksi `GITHUB_REF_NAME` pitää lisätä env-var-tarkistuksiin, jos sitä ei ole. + ## Retention Retention siirtyy lukemaan PV:tä suoraan (find, ls, stat) git-pages API:n sijaan. Nykyinen malli luki `.git-pages/manifest.json` HTTP:lla — uusi lukee FS:ää. @@ -369,7 +382,51 @@ Retention siirtyy lukemaan PV:tä suoraan (find, ls, stat) git-pages API:n sijaa ... ``` -### Logiikka +### Logiikka commit-tasolla + +Retention on commit-kohtainen. Yksi commit = yksi kansio `/{sha8}/`, jonka alla voi olla useita suiteja (`cucumber/`, `bats/`, jne.). + +``` +/app/data/{owner}/{repo}/{branch}/ + abc12345/ ← yksi commit + cucumber/ + index.html + .meta + bats/ + index.html + .meta + def67890/ ← toinen commit + cucumber/ + index.html + .meta +``` + +Toiminta aktiiviselle branchille (löytyy Giteasta): + +1. Listaa commit-kansiot (`abc12345/`, `def67890/`, ...) uusin ensin (viimeksi muokattu) +2. Ohita `keepMin` kpl — nämä säilytetään aina +3. Jos raportti on alle `minAgeDays` päivää vanha → skip (liian tuore poistettavaksi) +4. Muut poistetaan (`rm -rf {sha8}/`), jolloin kaikki commitin suite-tulokset poistuvat kerralla + +Poistuneelle branchille (404 Giteasta): poista koko `{branch}/`-kansio. + +### Parametrit + +```yaml +retention: + rules: + branches: + default: + keepMin: 5 + minAgeDays: 7 + main: + keepMin: 20 + minAgeDays: 14 +``` + +**Parametrin nimi:** `maxAgeDays` → `minAgeDays` (arvo sama, uusi nimi kertoo mitä se todella tekee: minimi-ikä ennen poistoa). + +### Skripti (ydin) ```bash DATA_ROOT="/app/data" @@ -380,32 +437,47 @@ for owner_dir in "$DATA_ROOT"/*/; do repo=$(basename "$repo_dir") for branch_dir in "$repo_dir"*/; do branch=$(basename "$branch_dir") + branch_urlenc=$(echo "$branch" | sed 's/\//%2F/g') # Tarkista onko branch yhä olemassa Giteassa HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: token $GITEA_TOKEN" \ - "$GITEA_API_URL/api/v1/repos/$owner/$repo/branches/$(echo "$branch" | sed 's/\//%2F/g')") + "$GITEA_API_URL/api/v1/repos/$owner/$repo/branches/$branch_urlenc") if [ "$HTTP_CODE" = "404" ]; then - # Branch kuollut — poista kaikki + # Branch poistettu — tuhoa koko branch rm -rf "$branch_dir" continue fi - # Aktiivinen branch — retention-säännöt - for sha8_dir in "$branch_dir"*/; do - [ -d "$sha8_dir" ] || continue - age=$(( ( $(date +%s) - $(stat -c %Y "$sha8_dir") ) / 86400 )) - # maxAgeDays + keepMin (sama logiikka kuin nykyään) - … + # Aktiivinen branch — hae säännöt + rules=$(jq -r ".branches.\"$branch\" // .branches.default" "$RETENTION_CONFIG") + keep_min=$(echo "$rules" | jq -r '.keepMin // 5') + min_age=$(echo "$rules" | jq -r '.minAgeDays // 7') + + # Listaa commit-kansiot uusin ensin + commits=$(ls -1t "$branch_dir") + count=0 + for sha8 in $commits; do + [ -d "$branch_dir/$sha8" ] || continue + count=$((count + 1)) + + # Ohita keepMin kpl + [ "$count" -le "$keep_min" ] && continue + + # Tarkista ikä + age_seconds=$(( $(date +%s) - $(stat -c %Y "$branch_dir/$sha8") )) + age_days=$(( age_seconds / 86400 )) + [ "$age_days" -lt "$min_age" ] && continue + + # Poista koko commit + rm -rf "$branch_dir/$sha8" done done done done ``` -**Tarkennettava:** Branch-nimen erikoismerkit (`feature/x`) pitää URL-enkoodata Gitea API -kutsuun (`%2F`), koska branch voi sisältää `/`. - ## Avoimet asiat (ei tässä MVP:ssä) - ForwardAuth GET/HEAD-reitille (OIDC) diff --git a/git-pages/dev-values.yaml b/git-pages/dev-values.yaml index 7e1282a..a8372a8 100644 --- a/git-pages/dev-values.yaml +++ b/git-pages/dev-values.yaml @@ -19,11 +19,11 @@ retention: rules: branches: default: - maxAgeDays: 90 + minAgeDays: 3 keepMin: 5 main: - maxAgeDays: 365 - keepMin: 20 + minAgeDays: 3 + keepMin: 10 master: - maxAgeDays: 365 - keepMin: 20 + minAgeDays: 3 + keepMin: 10