Compare commits

...

2 commits

Author SHA1 Message Date
2cc3fab027 Merge pull request 'feat(ci): workflow_dispatch smoke-latest + cache ISO for fast retests' (#3) from feat-smoke-latest into main
Some checks failed
Build ISO / build-iso (push) Has been cancelled
CI / test (push) Has been cancelled
CI / validate-json (push) Has been cancelled
CI / markdown-links (push) Has been cancelled
CI / lint (push) Has been cancelled
Reviewed-on: #3
2026-04-18 13:11:41 +02:00
41d0e7a398 feat(ci): workflow_dispatch smoke-latest + cache ISO for fast retests
Some checks failed
CI / lint (pull_request) Successful in 2m6s
CI / test (pull_request) Successful in 3m23s
CI / validate-json (pull_request) Has been cancelled
CI / markdown-links (pull_request) Has been cancelled
When smoke-vm.sh / PVE setup / secrets change, we want to verify the
fix without waiting for a full 25-min build-iso rebuild (most of which
is the upload-artifact step for a 1.5 GB file).

Adds two things:

1. build-iso.yml grows a "Cache ISO for smoke-latest" step that copies
   the freshly built ISO to /data/smoke-cache/latest.iso. /data is
   already bind-mounted into the runner container at a matching host
   path, so no compose.yml change or runner restart needed.

2. smoke-latest.yml is a workflow_dispatch-only workflow that reads
   /data/smoke-cache/latest.iso and runs scripts/smoke-vm.sh against
   it. ~2 min end-to-end. Errors cleanly if the cache is empty (build-
   iso.yml hasn't populated it yet).

First build-iso run after this merges will populate the cache; from
then on smoke-latest is available for on-demand re-tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 13:04:22 +02:00
2 changed files with 52 additions and 0 deletions

View file

@ -51,6 +51,17 @@ jobs:
retention-days: 14 retention-days: 14
if-no-files-found: error if-no-files-found: error
- name: Cache ISO for smoke-latest
# Persist the ISO to /data/smoke-cache/latest.iso so the
# smoke-latest.yml workflow_dispatch job can re-test without
# rebuilding. /data is already mounted into the runner container
# at a matching host path.
run: |
mkdir -p /data/smoke-cache
iso=$(ls iso/out/*.iso | head -1)
cp -f "$iso" /data/smoke-cache/latest.iso
ls -lh /data/smoke-cache/latest.iso
- name: Smoke-test ISO on Proxmox test host - name: Smoke-test ISO on Proxmox test host
# Inlined as a step (rather than a separate job with `needs:`) so # Inlined as a step (rather than a separate job with `needs:`) so
# we can reuse the ISO that's already in the workspace — Forgejo's # we can reuse the ISO that's already in the workspace — Forgejo's

View file

@ -0,0 +1,41 @@
name: Smoke latest ISO
# Manual-trigger smoke test against the last ISO `build-iso.yml` produced.
# Use this when you've changed something that only affects smoke-vm.sh,
# the PVE setup, or the secrets — skips the 25-min ISO rebuild and only
# runs the ~2-min VM boot + /:5000 check.
#
# The ISO lives at /data/smoke-cache/latest.iso on the runner, populated
# by build-iso.yml's "Cache ISO for smoke-latest" step. That path is
# inside the runner's already-mounted /data volume, so no extra bind
# mounts needed.
on:
workflow_dispatch:
concurrency:
group: smoke-latest
cancel-in-progress: false
jobs:
smoke:
runs-on: self-hosted
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Check cached ISO exists
run: |
iso=/data/smoke-cache/latest.iso
if [ ! -f "$iso" ]; then
echo "::error::$iso not found — trigger build-iso.yml first to populate the cache."
exit 1
fi
echo "Will smoke: $iso"
ls -lh "$iso"
- name: Smoke-test ISO on Proxmox test host
env:
PVE_TEST_HOST: ${{ secrets.PVE_TEST_HOST }}
PVE_TEST_TOKEN: ${{ secrets.PVE_TEST_TOKEN }}
SMOKE_SHA: ${{ github.sha }}
run: ./scripts/smoke-vm.sh /data/smoke-cache/latest.iso