Close Dagger CI plan (Phases 1-3 complete) (#165)

## Summary

- Move `adopt-dagger-ci.md` to new `docs/how-to/plans/completed/` archive
- Update plan status to "Phases 1–3 complete" with all verification checklists checked
- Update runner description to reflect what actually stayed (Docker CLI, Node.js needed)
- Document known issue: changelog dates still show UTC
- Create completed plans index, update plans and how-to indexes
- Changelog fragment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/165
This commit is contained in:
Erich Blume 2026-02-11 18:04:39 -08:00
commit 1fd54dbab7
5 changed files with 35 additions and 13 deletions

View file

@ -10,7 +10,7 @@ tags:
# Plan: Adopt Dagger as CI/CD Build Engine
> **Status:** Phase 3 implemented
> **Status:** Phases 13 complete
## Background
@ -429,13 +429,15 @@ The `forgejo-runner` container (at `containers/forgejo-runner/`) bundles:
### Simplified Runner
With Dagger, the runner only needs:
- Docker (for the Dagger engine — already available via DinD sidecar)
With Dagger, the runner needs:
- Docker CLI (Dagger shells out to `docker` to provision its BuildKit engine)
- The `dagger` CLI binary
- Node.js (required by `actions/checkout@v4` and other JavaScript Actions)
- Git (for checkout)
- Basic shell utilities
- ArgoCD CLI, uv, flyctl (used directly in workflow steps)
- Basic shell utilities and tzdata
All other tools (Node.js, skopeo, argocd, Python, npm) live inside the Dagger containers defined by the module. Adding a new tool to a build never requires rebuilding the runner image.
Removed from the pre-Dagger image: Docker buildx plugin, skopeo, lsb-release, xz-utils. These tools now live inside Dagger containers.
### Implementation
@ -502,14 +504,18 @@ BuildKit caches aggressively, making repeated builds fast. Since the Forgejo run
- [ ] ~~`dagger call release-docs` uploads to Forgejo packages successfully~~ (deferred — artifact hosting stays on Forgejo Releases)
- [ ] ~~Quartz container starts and serves docs from Forgejo packages URL~~ (deferred)
- [ ] ~~ArgoCD sync works from within Dagger~~ (deferred)
- [ ] Forgejo Actions workflow_dispatch completes full release cycle
- [ ] CHANGELOG.md and fragment cleanup committed correctly
- [x] Forgejo Actions workflow_dispatch completes full release cycle
- [x] CHANGELOG.md and fragment cleanup committed correctly
### Phase 3 (Runner)
- [ ] Simplified runner image builds and runs
- [ ] Dagger engine starts inside the runner's DinD environment
- [ ] All existing workflows pass with the simplified runner
- [ ] TZ=America/Los_Angeles works in job containers (tzdata installed)
- [x] Simplified runner image builds and runs (forgejo-runner v3.0.2)
- [x] Dagger engine starts inside the runner's DinD environment
- [x] All existing workflows pass with the simplified runner
- [x] TZ=America/Los_Angeles works in job containers (tzdata installed)
### Known Issues
- **Changelog dates show UTC date:** Towncrier uses `datetime.date.today()` which respects `TZ`, and `tzdata` is installed in the runner image, but the changelog still renders tomorrow's date (UTC). The runner pod and job containers both have `TZ=America/Los_Angeles` set. Root cause is unresolved — may require passing an explicit `--date` flag to towncrier or patching the Dagger `build_changelog` container.
## How-To Articles to Write

View file

@ -0,0 +1,15 @@
---
title: Completed Plans
modified: 2026-02-11
tags:
- how-to
- plans
---
# Completed Plans
Plans that have been fully implemented and verified. Kept for historical reference and as templates for future plans.
| Plan | Completed | Description |
|------|-----------|-------------|
| [[adopt-dagger-ci]] | 2026-02-11 | Adopt Dagger as CI/CD build engine (Phases 13) |

View file

@ -10,13 +10,12 @@ tags:
Migration and transition plans for upcoming infrastructure changes. Each plan is a how-to document that captures the full context, steps, and verification criteria for a future execution session.
Plans differ from regular how-to guides in that they describe work that has been designed but not yet executed. Once a plan is completed, it may be archived or converted into a standard how-to guide.
Plans differ from regular how-to guides in that they describe work that has been designed but not yet executed. Once a plan is completed, it moves to [[completed]].
| Plan | Status | Description |
|------|--------|-------------|
| [[migrate-forgejo-from-brew]] | Planned | Transition Forgejo from Homebrew to source-built binary with LaunchAgent |
| [[add-unifi-pulumi-stack]] | Planned | Add Pulumi IaC for UniFi Express 7 home network |
| [[adopt-dagger-ci]] | Planned | Adopt Dagger as CI/CD build engine, migrate docs artifacts to Forgejo packages |
| [[upstream-fork-strategy]] | Planned | Stacked-branch forking strategy for tracking upstream projects |
| [[adopt-oidc-provider]] | Planning | Deploy OIDC identity provider for SSO across services |
| [[harden-zot-registry]] | Planned | Add authentication and tag immutability to zot registry |