Native Dagger container builds + Navidrome v0.61.1 #330

Merged
eblume merged 5 commits from native-dagger-containers into main 2026-04-11 17:11:57 -07:00
Owner

Summary

  • Move Dagger module from .dagger/ to repo root (src/blumeops/), rename blumeops-ciblumeops
  • Replace opaque docker_build() with native Dagger pipelines that surface full build errors per step
  • Migrate navidrome as the first container (containers/navidrome/container.py)
  • Upgrade navidrome from v0.60.3 to v0.61.1 (major artwork overhaul, SQLite FTS5 search, server-managed transcoding)
  • Add dagger call container-version for CI version extraction without Dockerfile parsing
  • All mise tasks (container-list, container-version-check, container-build-and-release) updated for hybrid mode
  • Legacy docker_build() fallback preserved for all other containers

Motivation

When navidrome v0.61.0 added a new Go build tag (sqlite_fts5), docker_build() showed only "exit code: 1". We had to run docker build --progress=plain manually to find undefined: buildtags.SQLITE_FTS5. Native Dagger pipelines show the full error inline.

Container build dispatch needed

After merge, dispatch container build for navidrome:

mise run container-build-and-release navidrome --ref 470b4bd

Deploy steps

  1. Wait for container build to complete
  2. Back up navidrome-data PVC (non-reversible DB migrations)
  3. argocd app set navidrome --revision main && argocd app sync navidrome
  4. Verify at https://dj.ops.eblu.me

Future

Remaining containers migrate incrementally in follow-up PRs using the same pattern.

## Summary - Move Dagger module from `.dagger/` to repo root (`src/blumeops/`), rename `blumeops-ci` → `blumeops` - Replace opaque `docker_build()` with native Dagger pipelines that surface full build errors per step - Migrate navidrome as the first container (`containers/navidrome/container.py`) - Upgrade navidrome from v0.60.3 to v0.61.1 (major artwork overhaul, SQLite FTS5 search, server-managed transcoding) - Add `dagger call container-version` for CI version extraction without Dockerfile parsing - All mise tasks (`container-list`, `container-version-check`, `container-build-and-release`) updated for hybrid mode - Legacy `docker_build()` fallback preserved for all other containers ## Motivation When navidrome v0.61.0 added a new Go build tag (`sqlite_fts5`), `docker_build()` showed only "exit code: 1". We had to run `docker build --progress=plain` manually to find `undefined: buildtags.SQLITE_FTS5`. Native Dagger pipelines show the full error inline. ## Container build dispatch needed After merge, dispatch container build for navidrome: ``` mise run container-build-and-release navidrome --ref 470b4bd ``` ## Deploy steps 1. Wait for container build to complete 2. Back up navidrome-data PVC (non-reversible DB migrations) 3. `argocd app set navidrome --revision main && argocd app sync navidrome` 4. Verify at https://dj.ops.eblu.me ## Future Remaining containers migrate incrementally in follow-up PRs using the same pattern.
Major artwork overhaul: per-disc cover art, rebuilt search engine (SQLite
FTS5), server-managed transcoding, WebP encoding with performance fix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move the Dagger module from .dagger/ to the repo root (src/blumeops/),
rename from blumeops-ci to blumeops, and introduce native Dagger pipelines
that replace docker_build() for container builds.

docker_build() swallowed build errors — native pipelines surface full
output per step. Navidrome is the first container migrated as a proof of
concept (containers/navidrome/container.py).

- Containers with container.py use native Dagger builds
- Containers with only Dockerfile fall back to docker_build()
- dagger call container-version extracts VERSION from container.py
- CI workflow, container-list, container-version-check, and
  container-build-and-release all updated for hybrid mode

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The service-review checklist now shows a "Dagger Migration" hint when a
container still uses a Dockerfile without a container.py. The review-services
doc also mentions migration as a review step.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Update dagger.md reference card: new module name, source path,
  container build types table, container-version function
- Update build-container-image.md: container.py as preferred for indri,
  default.nix for ringtail, navidrome as reference pattern
- Update upgrade-dagger.md: uv.lock path (no longer under .dagger/)
- Update .dagger/src/blumeops_ci path references across 5 how-to docs
- Update container-version-check and pin-container-versions docs
- Update mise-tasks reference
- Set modified: 2026-04-11 on all changed docs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
eblume merged commit c86b5d7772 into main 2026-04-11 17:11:57 -07:00
Sign in to join this conversation.
No reviewers
No labels
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
eblume/blumeops!330
No description provided.