From 192e2a115caecf44cc578407994477e8f83a8c05 Mon Sep 17 00:00:00 2001 From: Craig Schardt Date: Sun, 7 Dec 2025 16:46:23 -0600 Subject: [PATCH] Use photon-image-runner to build images (#2210) ## Description This PR switches image building from `pguyot/arm-runner-action` to `PhotonVision/photon-image-runner`. The new runner uses native arm runners on GitHub and is much faster than the emulation used by the pguyot version. Images from https://github.com/PhotonVision/photonvision/pull/2210/commits/a95914ca3612192f030b4b569840f17d87eb4380 tested and working on: - [x] RaspberryPi4b - [x] OrangePi5 - [x] OrangePi5pro - [x] RubikPi3 Closes #2191 ## Meta Merge checklist: - [x] Pull Request title is [short, imperative summary](https://cbea.ms/git-commit/) of proposed changes - [x] The description documents the _what_ and _why_ - [ ] If this PR changes behavior or adds a feature, user documentation is updated - [ ] If this PR touches photon-serde, all messages have been regenerated and hashes have not changed unexpectedly - [ ] If this PR touches configuration, this is backwards compatible with settings back to v2024.3.1 - [ ] If this PR touches pipeline settings or anything related to data exchange, the frontend typing is updated - [ ] If this PR addresses a bug, a regression test for it is added --- .github/workflows/build.yml | 133 +++++++++++++++--------------------- 1 file changed, 56 insertions(+), 77 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a24b48bd4..c049c8a31 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ concurrency: cancel-in-progress: true env: - IMAGE_VERSION: v2026.0.4 + IMAGE_VERSION: v2026.0.5 jobs: @@ -455,78 +455,73 @@ jobs: fail-fast: false matrix: include: - - os: ubuntu-24.04 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: RaspberryPi image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_raspi.img.xz - cpu: cortex-a7 - image_additional_mb: 0 - - os: ubuntu-24.04 + minimum_free_mb: 100 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: limelight2 image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_limelight.img.xz - cpu: cortex-a7 - image_additional_mb: 0 - - os: ubuntu-24.04 + minimum_free_mb: 100 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: limelight3 image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_limelight3.img.xz - cpu: cortex-a7 - image_additional_mb: 0 - - os: ubuntu-24.04 + minimum_free_mb: 100 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: limelight3G image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_limelight3g.img.xz - cpu: cortex-a7 - image_additional_mb: 0 - - os: ubuntu-24.04 + minimum_free_mb: 100 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: limelight4 image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_limelight4.img.xz - cpu: cortex-a76 - image_additional_mb: 0 - - os: ubuntu-24.04 + minimum_free_mb: 100 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: luma_p1 image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_luma_p1.img.xz - cpu: cortex-a76 - image_additional_mb: 0 - - os: ubuntu-24.04 + minimum_free_mb: 100 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: orangepi5 image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_opi5.img.xz - cpu: cortex-a8 - image_additional_mb: 1024 - - os: ubuntu-24.04 + minimum_free_mb: 1024 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: orangepi5b image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_opi5b.img.xz - cpu: cortex-a8 - image_additional_mb: 1024 - - os: ubuntu-24.04 + minimum_free_mb: 1024 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: orangepi5plus image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_opi5plus.img.xz - cpu: cortex-a8 - image_additional_mb: 1024 - - os: ubuntu-24.04 + minimum_free_mb: 1024 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: orangepi5pro image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_opi5pro.img.xz - cpu: cortex-a8 - image_additional_mb: 1024 - - os: ubuntu-24.04 + minimum_free_mb: 1024 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: orangepi5max image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_opi5max.img.xz - cpu: cortex-a8 - image_additional_mb: 1024 - - os: ubuntu-24.04 + minimum_free_mb: 1024 + - os: ubuntu-24.04-arm artifact-name: LinuxArm64 image_suffix: rock5c image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_rock5c.img.xz - cpu: cortex-a8 - image_additional_mb: 1024 + minimum_free_mb: 1024 + - os: ubuntu-24.04-arm + artifact-name: LinuxArm64 + image_suffix: rubikpi3 + image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_rubikpi3.tar.xz + minimum_free_mb: 1024 + root_location: 'offset=569376768' + shrink_image: 'no' runs-on: ${{ matrix.os }} name: "Build image - ${{ matrix.image_suffix }}" @@ -539,64 +534,48 @@ jobs: - uses: actions/download-artifact@v4 with: name: jar-${{ matrix.artifact-name }} - - uses: pguyot/arm-runner-action@HEAD + - uses: photonvision/photon-image-runner@HEAD name: Generate image id: generate_image with: - base_image: ${{ matrix.image_url }} - image_additional_mb: ${{ matrix.image_additional_mb }} - optimize_image: yes - cpu: ${{ matrix.cpu }} - # We do _not_ wanna copy photon into the image. Bind mount instead - bind_mount_repository: true + image_url: ${{ matrix.image_url }} + minimum_free_mb: ${{ matrix.minimum_free_mb }} + root_location: ${{ matrix.root_location || 'partition=2' }} + shrink_image: ${{ matrix.shrink_image || 'yes' }} commands: | chmod +x scripts/armrunner.sh ./scripts/armrunner.sh + - name: Compress image + # Compress the standard images + if: ${{ ! startsWith(matrix.image_suffix, 'rubik') }} run: | new_jar=$(realpath $(find . -name photonvision\*-linuxarm64.jar)) new_image_name=$(basename "${new_jar/.jar/_${{ matrix.image_suffix }}.img}") - mv ${{ steps.generate_image.outputs.image }} $new_image_name + sudo mv ${{ steps.generate_image.outputs.image }} $new_image_name sudo xz -T 0 -v $new_image_name + + - name: Tar built image + # Build the RubikPi3-specific tar file + if: ${{ startsWith(matrix.image_suffix, 'rubik') }} + run: | + new_jar=$(realpath $(find . -name photonvision\*-linuxarm64.jar)) + new_image_name=$(basename "${new_jar/.jar/_${{ matrix.image_suffix }}.img}") + + imagedir=$(dirname ${{ steps.generate_image.outputs.image }}) + tardir=${new_image_name} + sudo mkdir --parents ${tardir} + sudo mv ${imagedir}/* ${tardir}/ + sudo tar -I 'xz -T0' -cf ${new_image_name}.tar.xz ${tardir} --checkpoint=10000 --checkpoint-action=echo='%T' + - uses: actions/upload-artifact@v4 name: Upload image with: name: image-${{ matrix.image_suffix }} path: photonvision*.xz - build-rubik-image: - needs: [build-package] - if: ${{ github.event_name != 'pull_request' }} - - runs-on: ubuntu-24.04 - name: "Build image - Rubik Pi 3" - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: actions/download-artifact@v4 - with: - name: jar-LinuxArm64 - - name: Generate image - run: | - wget https://raw.githubusercontent.com/PhotonVision/photon-image-modifier/refs/tags/$IMAGE_VERSION/mount_rubikpi3.sh - chmod +x mount_rubikpi3.sh - ./mount_rubikpi3.sh https://github.com/PhotonVision/photon-image-modifier/releases/download/$IMAGE_VERSION/photonvision_rubikpi3.tar.xz /tmp/build/scripts/armrunner.sh - - name: Compress image - run: | - new_jar=$(realpath $(find . -name photonvision\*-linuxarm64.jar)) - new_image_name=$(basename "${new_jar/.jar/_rubikpi3.img}") - mv photonvision_rubikpi3 $new_image_name - tar -I 'xz -T0' -cf ${new_image_name}.tar.xz $new_image_name --checkpoint=10000 --checkpoint-action=echo='%T' - - uses: actions/upload-artifact@v4 - name: Upload image - with: - name: image-rubikpi3 - path: photonvision*.xz release: - needs: [build-photonlib-vendorjson, build-package, build-image, build-rubik-image, combine] + needs: [build-photonlib-vendorjson, build-package, build-image, combine] runs-on: ubuntu-22.04 steps: # Download all fat JARs