Bump all CI action versions to remove deprecation warnings (#53) #9
This file contains 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 firmwares | |
on: | |
push: | |
paths: | |
- Dockerfile | |
- .github/workflows/build.yaml | |
- manifests/**/*.yaml | |
branches: | |
- main | |
tags: | |
- '*' | |
env: | |
REGISTRY: ghcr.io | |
jobs: | |
build-container: | |
name: Create build container image | |
runs-on: ubuntu-latest | |
permissions: | |
packages: write | |
steps: | |
- uses: actions/checkout@v4.1.4 | |
- name: Create container name | |
id: create-container-name | |
run: | | |
repository_owner=$(echo $GITHUB_REPOSITORY_OWNER | tr [:upper:] [:lower:]) | |
image_name="${{ env.REGISTRY }}/$repository_owner/silabs-firmware-builder" | |
tag_name="${{ hashFiles('Dockerfile') }}" | |
echo "image_name=$image_name" >> $GITHUB_OUTPUT | |
echo "tag_name=$tag_name" >> $GITHUB_OUTPUT | |
echo "container_name=$image_name:$tag_name" >> $GITHUB_OUTPUT | |
- name: Log in to the GitHub container registry | |
uses: docker/login-action@v3.1.0 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3.3.0 | |
- name: Build and Push | |
uses: docker/build-push-action@v5.3.0 | |
with: | |
context: . | |
file: Dockerfile | |
tags: ${{ steps.create-container-name.outputs.container_name }} | |
cache-from: ${{ steps.create-container-name.outputs.image_name }}:cache-${{ steps.create-container-name.outputs.tag_name }} | |
cache-to: ${{ steps.create-container-name.outputs.image_name }}:cache-${{ steps.create-container-name.outputs.tag_name }} | |
push: true | |
outputs: | |
container_name: ${{ steps.create-container-name.outputs.container_name }} | |
list-manifests: | |
name: List firmware manifests | |
needs: build-container | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- uses: actions/checkout@v4.1.4 | |
- id: set-matrix | |
run: | | |
echo "matrix=$(find manifests -type f \( -name "*.yaml" -o -name "*.yml" \) -print | sort | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT | |
build-firmwares: | |
name: Firmware builder | |
needs: [list-manifests, build-container] | |
runs-on: ubuntu-latest | |
container: | |
image: ${{ needs.build-container.outputs.container_name }} | |
options: --user root | |
strategy: | |
matrix: | |
manifest: ${{ fromJson(needs.list-manifests.outputs.matrix) }} | |
steps: | |
- uses: actions/checkout@v4.1.4 | |
- name: Parse firmware manifest | |
id: read_manifest_yaml | |
run: | | |
yq -r ' | |
to_entries | |
| .[] | |
| select(.value | type == "string") | |
| .key + "=" + .value | |
' "${{ matrix.manifest }}" >> $GITHUB_OUTPUT | |
manifest_filename=$(basename "${{ matrix.manifest }}") | |
manifest_base="${manifest_filename%%.*}" | |
echo "manifest_base=$manifest_base" >> $GITHUB_OUTPUT | |
- name: Install SDK extensions | |
run: | | |
# XXX: slc-cli does not actually work when the extensions aren't in the SDK! | |
for sdk in /gecko_sdk_*; do | |
slc signature trust --sdk "$sdk" | |
ln -s $PWD/gecko_sdk_extensions "$sdk"/extension | |
for ext in "$sdk"/extension/*/; do | |
slc signature trust --sdk "$sdk" --extension-path "$ext" | |
done | |
done | |
- name: Build firmware | |
run: | | |
# Fix `fatal: detected dubious ownership in repository at` | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
# Pass all SDKs as consecutive `--sdk ...` arguments | |
sdk_args="" | |
for sdk_dir in /gecko_sdk*; do | |
sdk_args="$sdk_args --sdk $sdk_dir" | |
done | |
# Pass all toolchains as consecutive `--toolchain ...` arguments | |
toolchain_args="" | |
for toolchain_dir in /opt/*arm-none-eabi*; do | |
toolchain_args="$toolchain_args --toolchain $toolchain_dir" | |
done | |
# Build it | |
mkdir outputs | |
filename="${{ steps.read_manifest_yaml.outputs['manifest_base'] }}" | |
python3 tools/build_project.py \ | |
$sdk_args \ | |
$toolchain_args \ | |
--manifest "${{ matrix.manifest }}" \ | |
--build-dir build \ | |
--build-system makefile \ | |
--output "gbl:outputs/$filename.gbl" \ | |
--output "hex:outputs/$filename.hex" \ | |
--output "out:outputs/$filename.out" | |
- name: Install node within container (act) | |
if: ${{ env.ACT }} | |
run: | | |
curl -fsSL https://deb.nodesource.com/nsolid_setup_deb.sh | bash -s 20 | |
apt-get install -y nodejs | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4.3.3 | |
with: | |
name: ${{ steps.read_manifest_yaml.outputs['manifest_base'] }} | |
path: outputs/* | |
compression-level: 9 | |
if-no-files-found: error |