Skip to content

ryanlane/mimir-release

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mimir-release

Central release & workspace repo for the Mimir platform. This repo holds what the individual component repos shouldn't: the production deployment definition, the pinned release manifest, shared CI workflows, and the developer workspace.

Contents

  • mimir.code-workspace — multi-root VS Code workspace for all Mimir repos
  • bootstrap.sh — clones all component repos as siblings (one-command setup)
  • versions.yml — pinned versions per release channel (the release manifest)
  • PLAN.md — project review, deployment architecture, and roadmap
  • deploy/ — production deployment bundle:
    • docker-compose.yml — pinned GHCR images, no source checkout needed
    • install_server.sh — one-shot idempotent server setup
    • mimir-update.sh + .service/.timer — 15-minute self-update loop
    • mosquitto/mosquitto.conf — authenticated LAN listener + anon localhost

Production server setup

sudo mkdir -p /opt/mimir && sudo chown $USER /opt/mimir
git clone https://github.com/ryanlane/mimir-release.git /opt/mimir/mimir-release
bash /opt/mimir/mimir-release/deploy/install_server.sh   # creates .env, exits
bash /opt/mimir/mimir-release/deploy/install_server.sh   # installs + starts

The server is then accessible at http://mimir.local:8080 on your LAN — no IP address configuration required. Mimir advertises itself via mDNS automatically.

If your network uses VLANs or mDNS doesn't reach your displays, set PUBLIC_HOST in deploy/.env to the server's LAN IP and re-run the installer.

From then on the server converges to versions.yml every 15 minutes.

New machine setup

mkdir -p ~/projects/mimir && cd ~/projects/mimir
git clone https://github.com/ryanlane/mimir-release.git
./mimir-release/bootstrap.sh
code mimir-release/mimir.code-workspace

Component repos

Folder Repo What
mimir-server ryanlane/Mimir-Platform FastAPI API + React UI + discovery + compose
mimir-display ryanlane/mimir-display Raspberry Pi display client (Inky / HyperPixel / HDMI / RGB matrix)
mimir-display-electron ryanlane/mimir-display-electron Electron display client
mimir-display-magtag ryanlane/magtag-circuitpython-display-mimir MagTag CircuitPython client
mimir-channel-photoframe ryanlane/image-frame-channel-mimir Photo frame channel plugin
mimir-channel-spotify ryanlane/spotify-status Spotify status channel plugin
mimir-docs ryanlane/mimir-documentation Platform documentation

Releasing (target state, Phase 1+)

  1. Tag a component repo (vX.Y.Z) → its CI builds images/artifacts.
  2. Open a PR here bumping versions.yml.
  3. Merge → the production server's update timer converges within ~15 min, then rolls the matching display-client release out to the fleet over MQTT.

Rollback = revert the pin-bump PR.

Release automation helper

This repo includes a guarded helper that can read the latest tags, compute the next versions, update versions.yml, and (optionally) push tags + manifest changes.

cd ~/projects/mimir/mimir-release
task release:bump          # dry-run preview
task release:bump:apply    # interactive apply
task release:bump -- --apply
task release:bump:force    # apply even if repos are dirty
task release:dirty         # list dirty files causing apply blocks

Direct script examples:

bash scripts/release_bump.sh --server-bump minor --display-bump patch
bash scripts/release_bump.sh --apply
bash scripts/release_bump.sh --apply --allow-dirty
bash scripts/release_bump.sh --apply --force-unchanged

Behavior note:

  • Dry-run can execute with dirty working trees (it prints warnings).
  • Apply mode requires clean working trees in all participating repos.
  • Use --allow-dirty (or task release:bump:force) only when you intentionally want to tag current uncommitted state.
  • Before computing a bump, the helper checks whether each repo (mimir-server, mimir-display) actually has commits since the tag currently pinned in versions.yml. A component with nothing new is automatically skipped (its tag stays unchanged) rather than publishing a redundant, byte-identical release — so running task release:bump:apply when only the server changed will bump and tag only the server. Pass --force-unchanged to bump/tag a component anyway (e.g. rebuilding after a base-image security patch unrelated to app code). An explicit --server-tag/--display-tag always wins regardless of git history. task release:bump:apply -- --force-unchanged (or release:bump:force) forwards extra flags through.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages