amd64-fatpack-image-build workflow (raspiblitz/raspiblitz)
The amd64-fatpack-image-build workflow from raspiblitz/raspiblitz, explained and optimized by Latchkey.
A
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-fatpack-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
workflow (.yml)
name: amd64-fatpack-image-build
concurrency:
group: amd64-fatpack-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/lnd.install.sh'
# - 'home.admin/cl.install.sh'
# - 'home.admin/tor.install.sh'
# - 'home.admin/blitz.i2pd.sh'
# - 'home.admin/blitz.web.sh'
# - 'home.admin/bonus.nodejs.sh'
# - 'home.admin/bonus.rtl.sh'
# - 'home.admin/bonus.btcpayserver.sh'
# - 'home.admin/bonus.thunderhub.sh'
# - 'home.admin/bonus.jam.sh install'
# - 'home.admin/bonus.mempool.sh'
# - 'home.admin/blitz.web.api.sh'
# - 'home.admin/blitz.web.ui.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/lnd.install.sh'
# - 'home.admin/cl.install.sh'
# - 'home.admin/tor.install.sh'
# - 'home.admin/blitz.i2pd.sh'
# - 'home.admin/blitz.web.sh'
# - 'home.admin/bonus.nodejs.sh'
# - 'home.admin/bonus.rtl.sh'
# - 'home.admin/bonus.btcpayserver.sh'
# - 'home.admin/bonus.thunderhub.sh'
# - 'home.admin/bonus.jam.sh install'
# - 'home.admin/bonus.mempool.sh'
# - 'home.admin/blitz.web.api.sh'
# - 'home.admin/blitz.web.ui.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 fatpack --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop none"
cd ci/amd64
bash packer.build.amd64-debian.sh --pack fatpack --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop none
- name: Compute checksum of the raw image
run: |
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/
sha256sum raspiblitz-amd64-debian-fatpack.qcow2 > raspiblitz-amd64-debian-fatpack.qcow2.sha256
- name: Compress image
run: |
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/
gzip -v9 raspiblitz-amd64-debian-fatpack.qcow2
- name: Compute checksum of the compressed image
run: |
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/
sha256sum raspiblitz-amd64-debian-fatpack.qcow2.gz > raspiblitz-amd64-debian-fatpack.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-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.sha256
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.gz
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.gz.sha256
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: amd64-fatpack-image-build concurrency: group: amd64-fatpack-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/lnd.install.sh' # - 'home.admin/cl.install.sh' # - 'home.admin/tor.install.sh' # - 'home.admin/blitz.i2pd.sh' # - 'home.admin/blitz.web.sh' # - 'home.admin/bonus.nodejs.sh' # - 'home.admin/bonus.rtl.sh' # - 'home.admin/bonus.btcpayserver.sh' # - 'home.admin/bonus.thunderhub.sh' # - 'home.admin/bonus.jam.sh install' # - 'home.admin/bonus.mempool.sh' # - 'home.admin/blitz.web.api.sh' # - 'home.admin/blitz.web.ui.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/lnd.install.sh' # - 'home.admin/cl.install.sh' # - 'home.admin/tor.install.sh' # - 'home.admin/blitz.i2pd.sh' # - 'home.admin/blitz.web.sh' # - 'home.admin/bonus.nodejs.sh' # - 'home.admin/bonus.rtl.sh' # - 'home.admin/bonus.btcpayserver.sh' # - 'home.admin/bonus.thunderhub.sh' # - 'home.admin/bonus.jam.sh install' # - 'home.admin/bonus.mempool.sh' # - 'home.admin/blitz.web.api.sh' # - 'home.admin/blitz.web.ui.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 fatpack --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop none" cd ci/amd64 bash packer.build.amd64-debian.sh --pack fatpack --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop none - name: Compute checksum of the raw image run: | cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/ sha256sum raspiblitz-amd64-debian-fatpack.qcow2 > raspiblitz-amd64-debian-fatpack.qcow2.sha256 - name: Compress image run: | cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/ gzip -v9 raspiblitz-amd64-debian-fatpack.qcow2 - name: Compute checksum of the compressed image run: | cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/ sha256sum raspiblitz-amd64-debian-fatpack.qcow2.gz > raspiblitz-amd64-debian-fatpack.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-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.sha256 ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.gz ${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.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.