From b310206f1f5c7901e1bedf699ad52a82561a334d Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Sat, 25 Oct 2025 16:36:07 +0200 Subject: [PATCH] Document automated binary release system - Replace source build instructions with release workflow - Document tag-based release process with Gitea Actions - Include NixOS config update process for releases - Highlight benefits of static binary approach --- CLAUDE.md | 65 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1081ac4..ce2b8a5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -295,60 +295,61 @@ Development: ~/projects/nixosbox → git commit → git push Deployment: git pull → /var/lib/cm-dashboard/nixos-config → rebuild ``` -## NixOS Configuration Updates +## Automated Binary Release System -When code changes are made to cm-dashboard, the NixOS configuration at `~/projects/nixosbox` must be updated to deploy the changes. +**IMPLEMENTED:** cm-dashboard now uses automated binary releases instead of source builds. -### Update Process +### Release Workflow -1. **Get Latest Commit Hash** +1. **Automated Release Creation** + - Gitea Actions workflow builds static binaries on tag push + - Creates release with `cm-dashboard-linux-x86_64.tar.gz` tarball + - No manual intervention required for binary generation +2. **Creating New Releases** ```bash - git log -1 --format="%H" + cd ~/projects/cm-dashboard + git tag v0.1.X + git push origin v0.1.X ``` + + This automatically: + - Builds static binaries with `RUSTFLAGS="-C target-feature=+crt-static"` + - Creates GitHub-style release with tarball + - Uploads binaries via Gitea API -2. **Update NixOS Configuration** +3. **NixOS Configuration Updates** Edit `~/projects/nixosbox/hosts/common/cm-dashboard.nix`: ```nix - src = pkgs.fetchgit { - url = "https://gitea.cmtec.se/cm/cm-dashboard.git"; - rev = "NEW_COMMIT_HASH_HERE"; - sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Placeholder + version = "v0.1.X"; + src = pkgs.fetchurl { + url = "https://gitea.cmtec.se/cm/cm-dashboard/releases/download/${version}/cm-dashboard-linux-x86_64.tar.gz"; + sha256 = "sha256-NEW_HASH_HERE"; }; ``` -3. **Get Correct Source Hash** - Build with placeholder hash to get the actual hash: - +4. **Get Release Hash** ```bash cd ~/projects/nixosbox - nix-build --no-out-link -E 'with import {}; fetchgit { - url = "https://gitea.cmtec.se/cm/cm-dashboard.git"; - rev = "NEW_COMMIT_HASH"; + nix-build --no-out-link -E 'with import {}; fetchurl { + url = "https://gitea.cmtec.se/cm/cm-dashboard/releases/download/v0.1.X/cm-dashboard-linux-x86_64.tar.gz"; sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; }' 2>&1 | grep "got:" ``` - Example output: - - ``` - error: hash mismatch in fixed-output derivation '/nix/store/...': - specified: sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - got: sha256-x8crxNusOUYRrkP9mYEOG+Ga3JCPIdJLkEAc5P1ZxdQ= - ``` - -4. **Update Configuration with Correct Hash** - Replace the placeholder with the hash from the error message (the "got:" line). - -5. **Commit NixOS Configuration** - +5. **Commit and Deploy** ```bash cd ~/projects/nixosbox git add hosts/common/cm-dashboard.nix - git commit -m "Update cm-dashboard to latest version (SHORT_HASH)" + git commit -m "Update cm-dashboard to v0.1.X with static binaries" git push ``` -6. **Rebuild System** - The user handles the system rebuild step - this cannot be automated. +### Benefits + +- **No compilation overhead** on each host +- **Consistent static binaries** across all hosts +- **Faster deployments** - download vs compile +- **No library dependency issues** - static linking +- **Automated pipeline** - tag push triggers everything