[Enhancement]: Shrink CI Linux jobs off ubuntu-full (~18GB) and stop orphaning runner images #156

Closed
opened 2026-08-12 13:14:19 +00:00 by Grok · 3 comments
Member

Summary

CI test and Linux AppImage jobs currently use runs-on: ubuntu-full, which maps to a full GitHub-runner-compatible image (catthehacker / gitea/runner-images full tags). Those images are ~18 GB compressed / ~60 GB extracted on the runner host.

Two problems:

  1. Image size — neither job needs a full runner image. Tests need Python 3.12, a few Qt offscreen system libs, and pytest. AppImage builds need a C compiler, patchelf, fuse, clamav, and Python/Nuitka — all installable via apt on a modest base.
  2. Orphaned images — when a new full image is pulled (tag move, manual pull, or label change), older digests often remain on the runner disk. Forgejo Runner does not auto-update images and does not prune superseded digests, so disk fills with multiple ~18 GB copies.

Goals

  • Run test (and ideally AppImage) on the existing modest python-3.12 runner label already used by lint / prune workflows (~0.4 GB base), installing only required packages with apt.
  • Avoid composite Actions that require Node.js when the modest image may not ship Node (match the existing git clone + system Python pattern).
  • Stop referencing ubuntu-full from this repo’s Linux workflows so the runner can drop that image.
  • Document runner-host cleanup: pin image digests in act_runner labels, prune dangling/full images when labels change, and prefer fixed tags over floating :latest for any remaining large images.

Acceptance criteria

  • test job no longer uses ubuntu-full
  • Linux AppImage job no longer uses ubuntu-full (or documents a residual need)
  • CI still passes lint + pytest + (when inputs change) AppImage publish
  • DEVELOPMENT.md (or equivalent) notes runner labels, image size expectations, and host prune steps
  • No application VERSION bump (workflows/docs only)

Notes

Image size reference (Docker Hub, 2026-08):

Image ~compressed
full / ubuntu-*-full ~18 GB
catthehacker act-22.04 / gitea runner-images default ~0.5–0.6 GB
python:3.12-bookworm ~0.38 GB
## Summary CI `test` and Linux AppImage jobs currently use `runs-on: ubuntu-full`, which maps to a full GitHub-runner-compatible image (`catthehacker` / `gitea/runner-images` **full** tags). Those images are ~**18 GB compressed** / ~**60 GB extracted** on the runner host. Two problems: 1. **Image size** — neither job needs a full runner image. Tests need Python 3.12, a few Qt offscreen system libs, and pytest. AppImage builds need a C compiler, patchelf, fuse, clamav, and Python/Nuitka — all installable via apt on a modest base. 2. **Orphaned images** — when a new full image is pulled (tag move, manual pull, or label change), older digests often remain on the runner disk. Forgejo Runner does not auto-update images and does not prune superseded digests, so disk fills with multiple ~18 GB copies. ## Goals - Run **test** (and ideally **AppImage**) on the existing modest `python-3.12` runner label already used by `lint` / prune workflows (~0.4 GB base), installing only required packages with apt. - Avoid composite Actions that require Node.js when the modest image may not ship Node (match the existing `git clone` + system Python pattern). - Stop referencing `ubuntu-full` from this repo’s Linux workflows so the runner can drop that image. - Document **runner-host** cleanup: pin image digests in act_runner labels, prune dangling/`full` images when labels change, and prefer fixed tags over floating `:latest` for any remaining large images. ## Acceptance criteria - [ ] `test` job no longer uses `ubuntu-full` - [ ] Linux AppImage job no longer uses `ubuntu-full` (or documents a residual need) - [ ] CI still passes lint + pytest + (when inputs change) AppImage publish - [ ] DEVELOPMENT.md (or equivalent) notes runner labels, image size expectations, and host prune steps - [ ] No application `VERSION` bump (workflows/docs only) ## Notes Image size reference (Docker Hub, 2026-08): | Image | ~compressed | |-------|-------------| | full / ubuntu-*-full | ~18 GB | | catthehacker act-22.04 / gitea runner-images default | ~0.5–0.6 GB | | python:3.12-bookworm | ~0.38 GB |
Author
Member

Implementation in progress on 0.4.2/issue-156-ci-image-optimize

Workflow changes

  • test and Linux AppImage now use runs-on: python-3.12 (modest ~0.4 GB image already used by lint/prune), not ubuntu-full (~18 GB full runner images).
  • Checkout via git clone + system Python (no Node composite Actions).
  • Test installs only Qt offscreen libs via apt; AppImage installs build/security packages only when a build is needed.

Host cleanup (orphan images)

  • Added scripts/prune-runner-docker-images.sh (dry-run by default) for act_runner hosts.
  • Documented labels, sizes, pin-digest guidance, and prune steps in DEVELOPMENT.md.
  • Recorded as DR-035.

Next

  • Watch CI on this branch for green lint/test.
  • After merge, on each Linux act_runner host run:
    ./scripts/prune-runner-docker-images.sh --apply --all-dangling
    
    (and optionally remove the unused ubuntu-full label from runner config so it is never pulled again).

No application VERSION bump (workflows/docs/scripts only).

## Implementation in progress on `0.4.2/issue-156-ci-image-optimize` ### Workflow changes - **`test`** and **Linux AppImage** now use `runs-on: python-3.12` (modest ~0.4 GB image already used by lint/prune), not `ubuntu-full` (~18 GB full runner images). - Checkout via `git clone` + system Python (no Node composite Actions). - Test installs only Qt offscreen libs via apt; AppImage installs build/security packages only when a build is needed. ### Host cleanup (orphan images) - Added `scripts/prune-runner-docker-images.sh` (dry-run by default) for act_runner hosts. - Documented labels, sizes, pin-digest guidance, and prune steps in `DEVELOPMENT.md`. - Recorded as **DR-035**. ### Next - Watch CI on this branch for green lint/test. - After merge, on each Linux act_runner host run: ```bash ./scripts/prune-runner-docker-images.sh --apply --all-dangling ``` (and optionally remove the unused `ubuntu-full` label from runner config so it is never pulled again). No application `VERSION` bump (workflows/docs/scripts only).
Author
Member

CI validation (run 743)

Job Result
lint success on python:3.12-bookworm
test success — 671 passed, 1 skipped (Qt libs installed via apt)
appimage success — full Nuitka AppImage build on the same modest image

Confirmed job log line: Start image=python:3.12-bookworm (not ubuntu-full / full-*).

First attempt failed on missing libdbus-1.so.3; fixed by expanding the Qt runtime apt list in the test job.

Operator follow-up (runner host)

  1. Remove or stop advertising the unused ubuntu-full label in act_runner config so it is never pulled again.
  2. Reclaim disk:
    ./scripts/prune-runner-docker-images.sh --apply --all-dangling
    
  3. Prefer pinned digests and avoid force-pull of floating tags when possible (logs currently show forcePull=true for python:3.12-bookworm).

Branch: 0.4.2/issue-156-ci-image-optimize — ready for PR when you want it.

## CI validation (run [743](https://repos.valleygeek.net/ai-collab/bulk-image-organizer/actions/runs/743)) | Job | Result | |-----|--------| | lint | success on `python:3.12-bookworm` | | test | success — **671 passed**, 1 skipped (Qt libs installed via apt) | | appimage | success — full Nuitka AppImage build on the same modest image | Confirmed job log line: `Start image=python:3.12-bookworm` (not ubuntu-full / full-*). First attempt failed on missing `libdbus-1.so.3`; fixed by expanding the Qt runtime apt list in the test job. ### Operator follow-up (runner host) 1. Remove or stop advertising the unused `ubuntu-full` label in act_runner config so it is never pulled again. 2. Reclaim disk: ```bash ./scripts/prune-runner-docker-images.sh --apply --all-dangling ``` 3. Prefer pinned digests and avoid force-pull of floating tags when possible (logs currently show `forcePull=true` for `python:3.12-bookworm`). Branch: `0.4.2/issue-156-ci-image-optimize` — ready for PR when you want it.
Author
Member

PR opened: #157

PR opened: https://repos.valleygeek.net/ai-collab/bulk-image-organizer/pulls/157
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
ai-collab/bulk-image-organizer#156
No description provided.