# Build and release custom Talos CM5 image # # Triggered by pushing a version tag (e.g. v1.11.5-1) # Runs on ARM64 self-hosted runner (ASUS GX10) # # Produces: # - Installer container image → Docker Hub (svrnty/talos-rpi5:) # - Raw disk image → Gitea release (metal-arm64.raw.zst) # # Runner: Apple Silicon Mac Mini (self-hosted, macOS, arm64) name: Build Talos CM5 Image on: push: tags: - 'v*.*.*' jobs: build: runs-on: [self-hosted, macOS, arm64] timeout-minutes: 180 steps: - name: Checkout uses: actions/checkout@v4 - name: Verify Docker is running run: docker info - name: Set up Docker Buildx run: docker buildx create --use --name talos-builder --driver docker-container || docker buildx use talos-builder - name: Login to Docker Hub run: echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin - name: Extract version tag id: version run: echo "tag=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT" - name: Clone upstream sources run: make checkouts - name: Apply patches run: make patches - name: Build kernel run: make kernel - name: Build SBC overlay run: make overlay - name: Build installer and disk image run: make installer - name: Tag release images run: make release TAG=${{ steps.version.outputs.tag }} - name: Compress disk image run: | # The imager outputs to checkouts/talos/_out/ DISK_IMAGE=$(find checkouts/talos/_out -name 'metal-arm64*.raw*' | head -1) if [ -z "$DISK_IMAGE" ]; then echo "Error: disk image not found in checkouts/talos/_out/" find checkouts/talos/_out -type f exit 1 fi # Copy to workspace root for release upload cp "$DISK_IMAGE" metal-arm64.raw.zst ls -lh metal-arm64.raw.zst - name: Create Gitea release uses: actions/forgejo-release@v2 with: direction: upload tag: ${{ steps.version.outputs.tag }} title: "Talos CM5 ${{ steps.version.outputs.tag }}" release-notes: | Custom Talos Linux image for Raspberry Pi CM5 (Compute Blade) **Talos version**: check Makefile **Kernel**: RPi downstream (CM5/RP1 support) **Extensions**: iscsi-tools, util-linux-tools **Overclock**: 2.6GHz (arm_freq=2600) ## Artifacts - `metal-arm64.raw.zst` — Raw disk image for eMMC flashing - `docker.io/svrnty/talos-rpi5:${{ steps.version.outputs.tag }}` — Installer image for `talosctl upgrade` ## Usage ```bash # Flash to eMMC ./scripts/flash-emmc.sh metal-arm64.raw.zst # Upgrade existing node talosctl upgrade --image docker.io/svrnty/talos-rpi5:${{ steps.version.outputs.tag }} ``` release-dir: . release-notes-assistant: none env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Clean up if: always() run: make clean