# Changelog — misc-scripts All notable changes to the operator helper scripts. Newest on top. ## 2026-06-17 ### Added — `gitea-image-prune.sh` - New operator CLI to inspect and prune old container images in the self-hosted Gitea registry (`gitea.dooplex.hu`, owner `admin`) and reclaim disk on the Longhorn-backed packages PVC. Pure `curl` + `jq`; interactive menu + scriptable flags. Safe **dry-run default**. - Modes: `list` (per-tag upload date + apparent image size, newest-first, shared-layer caveat), `prune` (`--keep N` or `--older-than DAYS`; always protects `^latest$` + `--protect` regexes), `reclaim` (delete orphaned manifest versions + trigger/await the `cleanup_packages` GC cron). `--measure` does best-effort before/after `du` via `kubectl`. - Implements the **three-step reclaim mechanism proven live** on Gitea 1.26.2: deleting a tag frees only the index pointer; the orphaned `sha256:` manifest versions must also be deleted (default `cleanup_packages` does not remove untagged manifests); the cron then GCs the unreferenced blobs. Orphan detection is fail-closed. - Safety: orders by upload date (never parses mixed `v`/bare tags), checks every HTTP status, never echoes/logs the token, audit log per run, typed confirmation on `--apply` (stricter for `--all`). - Token via `GITEA_TOKEN`/`--token-file`. Minimal scopes documented in README: `read:package` (list), `write:package` (delete), `read:admin` (cron list), `write:admin` (cron trigger). - README section added documenting usage, scopes, the reclaim caveat, the live verification result, and the native cleanup-rule recommendation. ### Changed — Gitea instance (operational, not a script change) - Added `[cron.cleanup_packages] RUN_AT_START = true` to Gitea's `app.ini` (on the data PVC) so the package GC also runs on every Gitea restart. Enables reclaim without a `write:admin` token. Backup at `app.ini.bak.prune-spike`.