v3
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user