Flat images for RB1 #101
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build debos recipe | |
| on: | |
| # run on pull requests to the main branch | |
| pull_request: | |
| branches: [main] | |
| # run on pushes to the main branch | |
| push: | |
| branches: [main] | |
| # run daily at 8:30am | |
| schedule: | |
| - cron: '30 8 * * *' | |
| # allow manual runs | |
| workflow_dispatch: | |
| # only need permission to read repository; implicitely set all other | |
| # permissions to none | |
| permissions: | |
| contents: read | |
| defaults: | |
| # run all commands from the debos-recipes directory | |
| run: | |
| working-directory: debos-recipes | |
| env: | |
| FILESERVER_URL: https://quic-yocto-fileserver-1029608027416.us-central1.run.app | |
| # cancel in progress builds for this workflow triggered by the same ref | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build-debos: | |
| runs-on: [self-hosted, arm64, debbuilder] | |
| container: | |
| image: debian:trixie | |
| volumes: | |
| - /srv/gh-runners/quic-yocto/builds:/fileserver-builds | |
| options: --privileged | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Download links to Linux deb and U-Boot for RB1 | |
| uses: actions/github-script@v6 | |
| with: | |
| script: | | |
| // search for the latest artifact with this name in this repository | |
| // (not particularly for this workflow run; artifacts we're looking | |
| // for will only be built from a scheduled (cron) run, and not from | |
| // pull requests) | |
| let response = | |
| await github.rest.actions.listArtifactsForRepo({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| name: "u-boot-rb1-links", | |
| page: 1, | |
| per_page: 1, | |
| }); | |
| console.log("Response2:", JSON.stringify(response, null, 2)); | |
| let u_boot_rb1 = response.data.artifacts[0]; | |
| let linux_deb = | |
| await github.rest.actions.listArtifactsForRepo({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| name: "linux-deb-links", | |
| page: 1, | |
| per_page: 1, | |
| }).data.artifacts[0]; | |
| // download both in memory | |
| let linux_deb_dl = | |
| await github.rest.actions.downloadArtifact({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| artifact_id: linux_deb.id, | |
| archive_format: 'zip', | |
| }); | |
| let u_boot_rb1_dl = | |
| await github.rest.actions.downloadArtifact({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| artifact_id: u_boot_rb1.id, | |
| archive_format: 'zip', | |
| }); | |
| // write files under temp dir | |
| const fs = require('fs'); | |
| const path = require('path'); | |
| const temp = '${{ runner.temp }}/artifacts'; | |
| if (!fs.existsSync(temp)){ | |
| fs.mkdirSync(temp); | |
| } | |
| fs.writeFileSync(path.join(temp, 'linux_deb_links.zip'), | |
| Buffer.from(linux_deb_dl.data)); | |
| fs.writeFileSync(path.join(temp, 'u_boot_rb1_links.zip'), | |
| Buffer.from(u_boot_rb1_dl.data)); | |
| # make sure we have latest packages first, to get latest fixes and to | |
| # avoid an automated update while we're building | |
| - name: Update OS packages | |
| run: | | |
| set -x | |
| apt update | |
| apt -y upgrade | |
| apt -y full-upgrade | |
| # debos is needed to build recipes, mtools is needed for the flash | |
| # recipe | |
| apt -y install debos mtools | |
| - name: Build debos recipe | |
| run: | | |
| set -x | |
| # start by building the root filesystem | |
| debos qualcomm-linux-debian-rootfs.yaml | |
| # debos tries KVM and UML as backends, and falls back to | |
| # building directly on the host, but that requires loop | |
| # devices; use qemu backend explicitly even if it's slower | |
| # qemu backend also requires to set scratchsize, otherwise the | |
| # whole build is done from memory and the out of memory killer | |
| # gets triggered | |
| debos -b qemu --scratchsize 4GiB -t imagetype:ufs \ | |
| qualcomm-linux-debian-image.yaml | |
| debos -b qemu --scratchsize 4GiB -t imagetype:sdcard \ | |
| qualcomm-linux-debian-image.yaml | |
| # build flashable files | |
| debos qualcomm-linux-debian-flash.yaml | |
| - name: Upload artifacts to fileserver | |
| run: | | |
| set -x | |
| # curl will be used to talk to fileserver; should be installed by | |
| # default | |
| apt -y install curl | |
| # github runs are only unique per repository and may also be re-run; | |
| # create an unique id with repository, run id, and run attempt | |
| id="${GITHUB_REPOSITORY}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" | |
| # create a directory for the current run | |
| dir="/fileserver-builds/${id}" | |
| mkdir -vp "${dir}" | |
| # copy output files | |
| cp -av rootfs.tar.gz "${dir}" | |
| cp -av dtbs.tar.gz "${dir}" | |
| cp -av disk-ufs.img.gz "${dir}" | |
| cp -av disk-sdcard.img.gz "${dir}" | |
| tar -cvf "${dir}"/flash.tar.gz disk-ufs.img1 disk-ufs.img2 flash_* | |
| # instruct fileserver to publish this directory | |
| url="${FILESERVER_URL}/${id}/" | |
| curl -X POST -H 'Accept: text/event-stream' "${url}" | |