Files
forgerunner/CHANGELOG.md
T
Jason Stedwell 059e88d432
CI Smoke / toolchain (push) Successful in 1s
Release v0.1.0
First release: builds reproducibly (multi-arch), registers, runs
checkout + node + docker login/build/push, and is live on Unraid (amd64).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 22:50:17 -05:00

3.9 KiB

Changelog

All notable changes to this project will be documented in this file.

The format follows Keep a Changelog.


[Unreleased]


[0.1.0] - 2026-06-29

First release. Built, registered, validated end-to-end, and running live on Unraid (amd64) against git.alwisp.com.

Added

  • Initial repository scaffold: directory structure, Dockerfile, entrypoint, healthcheck, smoke-test, config examples, compose example, and docs.
  • Phase 0 planning documents: AGENT.md, README.md, ROADMAP.md.
  • First successful local image build: custom-gitea-runner:v0.1.0 (act_runner v0.2.11, Node 20, Docker CLI). Runtime smoke test passes 17/17.
  • First live registration validated against git.alwisp.com (Gitea 1.26.4): instance-level runner registers, comes online, runs healthy, and restart reuses the existing config without creating a duplicate.
  • .gitea/workflows/ci-smoke.yml: Phase 3 CI smoke workflow. Runs on the host label to validate the bundled toolchain (actions/checkout@v4, node/npm/git/docker, mounted Docker socket) directly in the runner container. First run passed.
  • Published registry.alwisp.com/jason/custom-gitea-runner:v0.1.0 (and :latest) — first image release to the Gitea Container Registry.
  • .gitea/workflows/docker-push.yml: Phase 3 docker login/build/push validation workflow (host label). Run 114 logged in, built, and pushed a test image to the registry — completing Phase 3.
  • Live Unraid deployment validated: unraid-runner-01 registered as amd64, came online, and ran a host-label smoke job (run 116) successfully on the real target host.

Changed

  • test/sample-workflows/docker-login.yml and docker-build-push.yml: now run on the host label instead of ubuntu-latest. Docker build/push need the runner's bundled Docker CLI and mounted socket, which the ubuntu-latest node job container does not provide. Also fixed a doubled image path in the build/push sample (gitea.repository already includes the owner).
  • Published v0.1.0/latest as a multi-arch manifest (linux/amd64 + linux/arm64) so it runs on Unraid (amd64) as well as Apple Silicon. The amd64 variant passes the 17/17 smoke test.
  • Unraid docs and compose example: corrected the image path to include the jason/ owner namespace (registry.alwisp.com/jason/custom-gitea-runner), added a required registry-login step (the package is private), and recommended the host label for Docker build/push jobs (GITEA_RUNNER_LABELS=…,host:host).

Fixed

  • docker/runner/Dockerfile: COPY paths for the entrypoint, healthcheck, and smoke-test scripts now resolve from the repo-root build context used by scripts/build-image.sh (previously assumed the build context was docker/runner/, so the build failed at the COPY steps).
  • scripts/verify-runtime.sh: now runs the smoke test via --entrypoint so it bypasses the tini/bootstrap ENTRYPOINT instead of triggering the registration flow and failing on a missing GITEA_INSTANCE_URL.
  • docker/runner/docker-entrypoint.sh: GITEA_RUNNER_LABELS is now honored. act_runner register ignores its --labels flag when a config already exists, so the bootstrap generated a config with default labels and the env var was silently a no-op. The entrypoint now injects the labels into the generated config before registering.
  • scripts/deregister-runner.sh: rewritten to deregister via the Gitea REST API. The previous version called act_runner daemon --unregister, a flag/command that does not exist in act_runner — deregistration must go through DELETE /api/v1/admin/actions/runners/{id}. Now takes a runner name or id and an admin API token.
  • scripts/publish-image.sh: now supports a REGISTRY_NAMESPACE (default jason) so images push to registry.alwisp.com/<owner>/<image>. The Gitea Container Registry requires an owner namespace; without it the push 404s on blob upload.