name: Build Non-Tree Keyboard Binaries on: workflow_call: inputs: qmk_repo: description: "qmk_firmware repo to build against" default: "qmk/qmk_firmware" required: false type: string qmk_ref: description: "qmk_firmware branch to build against" default: "master" required: false type: string permissions: contents: write jobs: build: name: Build Userspace Firmware runs-on: ubuntu-latest container: qmkfm/base_container steps: - name: Checkout Userspace uses: actions/checkout@v3 with: token: ${{ github.token }} submodules: recursive - name: Check if qmk_firmware exists id: check_files uses: andstor/file-existence-action@v2 with: files: qmk_firmware - name: Checkout QMK Firmware uses: actions/checkout@v3 if: steps.check_files.outputs.files_exists == 'false' with: token: ${{ github.token }} path: qmk_firmware repository: ${{ inputs.qmk_repo || 'qmk/qmk_firmware' }} ref: ${{ inputs.qmk_ref || 'master' }} submodules: recursive - name: Install QMK CLI run: | python3 -m pip install --upgrade qmk python3 -m pip install -r qmk_firmware/requirements.txt - name: Configure QMK CLI run: | qmk config userspace_compile.parallel=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) qmk config user.qmk_home=$GITHUB_WORKSPACE/qmk_firmware qmk config user.overlay_dir=$GITHUB_WORKSPACE - name: Validate userspace run: | qmk userspace-doctor - name: Install jq run: | apt-get update apt-get install jq -y - name: Read Non Tree Targets from JSON file run: | { echo 'JSON_FILE<> "$GITHUB_ENV" - name: Parse Non Tree Targets JSON file run: | echo ${{ fromJson(env.JSON_FILE).nontree_targets[0] }} - name: Copy Non-Tree Keyboards to QMK Firmware run: | for target in ${{ fromJson(env.JSON_FILE).nontree_targets }}; do echo "Copying keyboard: $target" cp $GITHUB_WORKSPACE/keyboards/$target $GITHUB_WORKSPACE/qmk_firmware/keyboards -R done - name: Build run: | qmk userspace-compile -e DUMP_CI_METADATA=yes || touch .failed # Generate the step summary markdown ./qmk_firmware/util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true # Truncate to a maximum of 1MB to deal with GitHub workflow limit truncate --size='<960K' $GITHUB_STEP_SUMMARY || true # Exit with failure if the compilation stage failed [ ! -f .failed ] || exit 1 - name: Upload binaries uses: actions/upload-artifact@v3 if: always() && !cancelled() continue-on-error: true with: name: Firmware path: | *.bin *.hex *.uf2