This commit is contained in:
moilanik
2026-06-28 04:27:38 +03:00
parent d01866fcfb
commit c354afc8d7
2 changed files with 90 additions and 18 deletions
+85 -13
View File
@@ -91,7 +91,8 @@ Browser → GET → Traefik
| Tiedosto | Muutos | | Tiedosto | Muutos |
|----------|--------| |----------|--------|
| `scripts/publish-git-pages.sh` | Uusi: `curl -X PUT` tar.gz upload-sidecariin | | `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 | | `git-pages/docs/architecture.md` | Uusi arkkitehtuuri |
| `docs/design-rationale.md` | Päivitys | | `docs/design-rationale.md` | Päivitys |
| `files/retention-*.sh` | Lue PV:tä suoraan, ei git-pages API:a | | `files/retention-*.sh` | Lue PV:tä suoraan, ei git-pages API:a |
@@ -240,7 +241,7 @@ retention:
rules: rules:
branches: branches:
default: default:
maxAgeDays: 90 minAgeDays: 7
keepMin: 5 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. 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
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:ää. 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 ```bash
DATA_ROOT="/app/data" DATA_ROOT="/app/data"
@@ -380,32 +437,47 @@ for owner_dir in "$DATA_ROOT"/*/; do
repo=$(basename "$repo_dir") repo=$(basename "$repo_dir")
for branch_dir in "$repo_dir"*/; do for branch_dir in "$repo_dir"*/; do
branch=$(basename "$branch_dir") branch=$(basename "$branch_dir")
branch_urlenc=$(echo "$branch" | sed 's/\//%2F/g')
# Tarkista onko branch yhä olemassa Giteassa # Tarkista onko branch yhä olemassa Giteassa
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \ HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: token $GITEA_TOKEN" \ -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 if [ "$HTTP_CODE" = "404" ]; then
# Branch kuollut — poista kaikki # Branch poistettu — tuhoa koko branch
rm -rf "$branch_dir" rm -rf "$branch_dir"
continue continue
fi fi
# Aktiivinen branch — retention-säännöt # Aktiivinen branch — hae säännöt
for sha8_dir in "$branch_dir"*/; do rules=$(jq -r ".branches.\"$branch\" // .branches.default" "$RETENTION_CONFIG")
[ -d "$sha8_dir" ] || continue keep_min=$(echo "$rules" | jq -r '.keepMin // 5')
age=$(( ( $(date +%s) - $(stat -c %Y "$sha8_dir") ) / 86400 )) min_age=$(echo "$rules" | jq -r '.minAgeDays // 7')
# maxAgeDays + keepMin (sama logiikka kuin nykyään)
# 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
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ä) ## Avoimet asiat (ei tässä MVP:ssä)
- ForwardAuth GET/HEAD-reitille (OIDC) - ForwardAuth GET/HEAD-reitille (OIDC)
+5 -5
View File
@@ -19,11 +19,11 @@ retention:
rules: rules:
branches: branches:
default: default:
maxAgeDays: 90 minAgeDays: 3
keepMin: 5 keepMin: 5
main: main:
maxAgeDays: 365 minAgeDays: 3
keepMin: 20 keepMin: 10
master: master:
maxAgeDays: 365 minAgeDays: 3
keepMin: 20 keepMin: 10