name: Reusable user config build on: workflow_call: inputs: build_matrix_path: description: "Path to the build matrix file" default: "build.yaml" required: false type: string config_path: description: "Path to the config directory" default: "config" required: false type: string fallback_binary: description: "Fallback binary format, if no *.uf2 file was built" default: "bin" required: false type: string archive_name: description: 'Archive output file name' default: 'firmware' required: false type: string jobs: matrix: runs-on: ubuntu-latest name: Fetch Build Keyboards outputs: build_matrix: ${{ env.build_matrix }} steps: - name: Checkout uses: actions/checkout@v3 - name: Install yaml2json run: python3 -m pip install remarshal - name: Fetch Build Matrix run: | echo "build_matrix=$(yaml2json ${{ inputs.build_matrix_path }} | jq -c .)" >> $GITHUB_ENV yaml2json ${{ inputs.build_matrix_path }} | jq build: runs-on: ubuntu-latest container: image: zmkfirmware/zmk-build-arm:stable needs: matrix name: Build strategy: fail-fast: false matrix: ${{ fromJson(needs.matrix.outputs.build_matrix) }} steps: - name: Prepare variables shell: sh -x {0} run: | if [ -n "${{ matrix.shield }}" ] then echo "extra_cmake_args=-DSHIELD=\"${{ matrix.shield }}\"" >> $GITHUB_ENV echo "artifact_name=${{ matrix.shield }}-${{ matrix.board }}-zmk" >> $GITHUB_ENV echo "display_name=${{ matrix.shield }} - ${{ matrix.board }}" >> $GITHUB_ENV else echo "extra_cmake_args=" >> $GITHUB_ENV echo "artifact_name=${{ matrix.board }}-zmk" >> $GITHUB_ENV echo "display_name=${{ matrix.board }}" >> $GITHUB_ENV fi echo "zephyr_version=${ZEPHYR_VERSION}" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 - name: Cache west modules uses: actions/cache@v3.0.11 continue-on-error: true env: cache_name: cache-zephyr-${{ env.zephyr_version }}-modules with: path: | modules/ tools/ zephyr/ bootloader/ zmk/ key: ${{ runner.os }}-build-${{ env.cache_name }}-${{ hashFiles('**/west.yml', '**/build.yaml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache_name }}- ${{ runner.os }}-build- ${{ runner.os }}- - name: West Init run: west init -l ${{ inputs.config_path }} - name: West Update run: west update - name: West Zephyr export run: west zephyr-export - name: West Build (${{ env.display_name }}) shell: sh -x {0} run: west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/${{ inputs.config_path }} ${{ env.extra_cmake_args }} ${{ matrix.cmake-args }} - name: ${{ env.display_name }} Kconfig file run: grep -v -e "^#" -e "^$" build/zephyr/.config | sort - name: Rename artifacts shell: sh -x {0} run: | mkdir build/artifacts if [ -f build/zephyr/zmk.uf2 ] then cp build/zephyr/zmk.uf2 "build/artifacts/${{ env.artifact_name }}.uf2" elif [ -f build/zephyr/zmk.${{ inputs.fallback_binary }} ] then cp build/zephyr/zmk.${{ inputs.fallback_binary }} "build/artifacts/${{ env.artifact_name }}.${{ inputs.fallback_binary }}" fi - name: Archive (${{ env.display_name }}) uses: actions/upload-artifact@v3 with: name: ${{ inputs.archive_name }} path: build/artifacts