From 36769584111e310f6c000063b5378545619920d3 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Mon, 24 Aug 2026 11:07:05 -0500 Subject: [PATCH] Fix beta asset publish and repoint the beta-fw tag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The publish job never found the firmware it had just downloaded: find: 'fw/firmware-standard': No such file or directory Error: manifest.json not found for firmware-standard actions/download-artifact only creates a per-artifact subdirectory when two or more artifacts match the pattern. With exactly one match it extracts flat into `path`: Total of 1 artifact(s) downloaded Starting download of artifact to: /home/runner/work/H-3/H-3/fw H-3 builds a single beta image, since H-3D has no wifi or OTA and is USB-flash only, so the files landed in fw/ while the publish step looked in fw/firmware-standard/. The rest of the fleet builds two beta images and always gets the subdirectory, which is why the same script works there. Downloading by name instead of pattern pins the layout regardless of artifact count. Also adds the beta-fw tag repoint step that MSR-1 and CAST-1 already have. Without it the release tag tracks main HEAD rather than the beta commit that produced the assets; the tag currently points at main. The beta-fw release has no assets at all right now, so a device switched to the Beta channel gets a 404 on the manifest until this lands. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .github/workflows/build-beta.yml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-beta.yml b/.github/workflows/build-beta.yml index b948f82..4498b12 100644 --- a/.github/workflows/build-beta.yml +++ b/.github/workflows/build-beta.yml @@ -59,8 +59,13 @@ jobs: - name: Download firmware artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: - path: fw - pattern: firmware* + # Downloaded by name, not pattern: with a single matching artifact + # the action extracts flat into `path` instead of creating a + # per-artifact subdirectory. H-3 builds one beta image (H-3D has no + # OTA), so `pattern:` would land the files in fw/ and break the + # publish step below. `name:` pins the layout regardless of count. + name: firmware-standard + path: fw/firmware-standard - name: Ensure rolling 'beta-fw' pre-release exists env: @@ -102,3 +107,14 @@ jobs: gh release upload beta-fw {} -R "${{ github.repository }}" --clobber \; done echo "Beta assets published." + + - name: Point beta-fw tag at the built commit + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # gh release create tags default-branch HEAD, and uploads never move + # the tag, so without this the release's source commit drifts away + # from the assets actually published. + gh api -X PATCH "repos/${{ github.repository }}/git/refs/tags/beta-fw" \ + -f sha="${{ github.sha }}" -F force=true + echo "beta-fw -> ${{ github.sha }}"