amd64-lean-legacyboot-image-build workflow (raspiblitz/raspiblitz)
The amd64-lean-legacyboot-image-build workflow from raspiblitz/raspiblitz, explained and optimized by Latchkey.
CI health: A - excellent
Point runs-on at Latchkey and get job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the amd64-lean-legacyboot-image-build workflow from the raspiblitz/raspiblitz repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: amd64-lean-legacyboot-image-build
concurrency:
group: amd64-lean-legacyboot-image-build-${{ github.head_ref }}
cancel-in-progress: true
on:
workflow_dispatch:
push:
branches: ['dev', 'v1.10']
paths:
- 'build_sdcard.sh'
- 'home.admin/bitcoin.install.sh'
- 'home.admin/tor.install.sh'
- 'home.admin/blitz.i2pd.sh'
- 'home.admin/blitz.web.sh'
- 'home.admin/blitz.display.sh'
- 'ci/amd64/**'
pull_request:
branches: ['dev', 'v1.10']
paths:
- 'build_sdcard.sh'
- 'home.admin/bitcoin.install.sh'
- 'home.admin/tor.install.sh'
- 'home.admin/blitz.i2pd.sh'
- 'home.admin/blitz.web.sh'
- 'home.admin/blitz.display.sh'
- 'ci/amd64/**'
jobs:
amd64-image-build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Set values
id: set_values
run: |
echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV
echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV
if [ -z "$GITHUB_HEAD_REF" ]; then
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
else
echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
fi
if [[ "${{github.event_name}}" == "pull_request" ]]; then
echo "GITHUB_USER=${{github.event.pull_request.head.repo.owner.login}}" >> $GITHUB_OUTPUT
else
echo "GITHUB_USER=$(echo ${{github.repository}} | cut -d'/' -f1)" >> $GITHUB_OUTPUT
fi
- name: Display the build name
run: echo "Building the raspiblitz-amd64-debian-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}"
- name: Run the build script
run: |
echo "Using the variables: --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot bios --desktop none"
cd ci/amd64
bash packer.build.amd64-debian.sh --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot bios --desktop none
- name: Compute checksum of the raw image
run: |
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256
- name: Compress image
run: |
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
gzip -v9 raspiblitz-amd64-debian-lean.qcow2
- name: Compute checksum of the compressed image
run: |
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256
- name: Upload the image and checksums
uses: actions/upload-artifact@v4
with:
name: raspiblitz-amd64-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}
path: |
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.sha256
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz.sha256
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: amd64-lean-legacyboot-image-build concurrency: group: amd64-lean-legacyboot-image-build-${{ github.head_ref }} cancel-in-progress: true on: workflow_dispatch: push: branches: ['dev', 'v1.10'] paths: - 'build_sdcard.sh' - 'home.admin/bitcoin.install.sh' - 'home.admin/tor.install.sh' - 'home.admin/blitz.i2pd.sh' - 'home.admin/blitz.web.sh' - 'home.admin/blitz.display.sh' - 'ci/amd64/**' pull_request: branches: ['dev', 'v1.10'] paths: - 'build_sdcard.sh' - 'home.admin/bitcoin.install.sh' - 'home.admin/tor.install.sh' - 'home.admin/blitz.i2pd.sh' - 'home.admin/blitz.web.sh' - 'home.admin/blitz.display.sh' - 'ci/amd64/**' jobs: amd64-image-build: timeout-minutes: 30 runs-on: latchkey-small steps: - uses: actions/checkout@v4 - name: Set values id: set_values run: | echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV if [ -z "$GITHUB_HEAD_REF" ]; then echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV else echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV fi if [[ "${{github.event_name}}" == "pull_request" ]]; then echo "GITHUB_USER=${{github.event.pull_request.head.repo.owner.login}}" >> $GITHUB_OUTPUT else echo "GITHUB_USER=$(echo ${{github.repository}} | cut -d'/' -f1)" >> $GITHUB_OUTPUT fi - name: Display the build name run: echo "Building the raspiblitz-amd64-debian-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}" - name: Run the build script run: | echo "Using the variables: --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot bios --desktop none" cd ci/amd64 bash packer.build.amd64-debian.sh --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot bios --desktop none - name: Compute checksum of the raw image run: | cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256 - name: Compress image run: | cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu gzip -v9 raspiblitz-amd64-debian-lean.qcow2 - name: Compute checksum of the compressed image run: | cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256 - name: Upload the image and checksums uses: actions/upload-artifact@v4 with: name: raspiblitz-amd64-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}} path: | ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.sha256 ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz.sha256
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Add a job timeout so a hung step cannot burn hours of runner time.
This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.