name: Build One Arch on: workflow_dispatch: inputs: # trunk-ignore(checkov/CKV_GHA_7) arch: type: choice options: - esp32 - esp32s3 - esp32c3 - esp32c6 - nrf52840 - rp2040 - rp2350 - stm32 - native permissions: read-all env: INPUT_ARCH: ${{ github.event.inputs.arch }} jobs: setup: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v5 - uses: actions/setup-python@v6 with: python-version: 3.x cache: pip - run: pip install -U platformio - name: Generate matrix id: jsonStep run: | TARGETS=$(./bin/generate_ci_matrix.py $INPUT_ARCH --level extra) echo "Name: $GITHUB_REF_NAME Base: $GITHUB_BASE_REF Ref: $GITHUB_REF" echo "selected_arch=$TARGETS" >> $GITHUB_OUTPUT outputs: selected_arch: ${{ steps.jsonStep.outputs.selected_arch }} version: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Get release version string run: | echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT id: version env: BUILD_LOCATION: local outputs: long: ${{ steps.version.outputs.long }} deb: ${{ steps.version.outputs.deb }} build: if: ${{ github.event_name != 'workflow_dispatch' }} needs: [setup, version] strategy: fail-fast: false matrix: build: ${{ fromJson(needs.setup.outputs.selected_arch) }} uses: ./.github/workflows/build_firmware.yml with: version: ${{ needs.version.outputs.long }} pio_env: ${{ matrix.build.board }} platform: ${{ matrix.build.arch }} build-debian-src: if: ${{ github.repository == 'meshtastic/firmware' && github.event_name != 'workflow_dispatch' || inputs.arch == 'native' }} uses: ./.github/workflows/build_debian_src.yml with: series: UNRELEASED build_location: local secrets: inherit package-pio-deps-native-tft: if: ${{ inputs.arch == 'native' }} uses: ./.github/workflows/package_pio_deps.yml with: pio_env: native-tft secrets: inherit test-native: if: ${{ !contains(github.ref_name, 'event/') && github.event_name != 'workflow_dispatch' || !contains(github.ref_name, 'event/') && inputs.arch == 'native' }} uses: ./.github/workflows/test_native.yml gather-artifacts: permissions: contents: write pull-requests: write strategy: fail-fast: false matrix: arch: - esp32 - esp32s3 - esp32c3 - esp32c6 - nrf52840 - rp2040 - rp2350 - stm32 runs-on: ubuntu-latest needs: [version, build] steps: - name: Checkout code uses: actions/checkout@v5 with: ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} - uses: actions/download-artifact@v5 with: path: ./ pattern: firmware-${{inputs.arch}}-* merge-multiple: true - name: Display structure of downloaded files run: ls -R - name: Move files up run: mv -b -t ./ ./bin/device-*.sh ./bin/device-*.bat - name: Repackage in single firmware zip uses: actions/upload-artifact@v4 with: name: firmware-${{inputs.arch}}-${{ needs.version.outputs.long }} overwrite: true path: | ./firmware-*.bin ./firmware-*.uf2 ./firmware-*.hex ./firmware-*-ota.zip ./device-*.sh ./device-*.bat ./littlefs-*.bin ./bleota*bin ./Meshtastic_nRF52_factory_erase*.uf2 retention-days: 30 - uses: actions/download-artifact@v5 with: name: firmware-${{inputs.arch}}-${{ needs.version.outputs.long }} merge-multiple: true path: ./output # For diagnostics - name: Show artifacts run: ls -lR - name: Device scripts permissions run: | chmod +x ./output/device-install.sh chmod +x ./output/device-update.sh - name: Zip firmware run: zip -j -9 -r ./firmware-${{inputs.arch}}-${{ needs.version.outputs.long }}.zip ./output - name: Repackage in single elfs zip uses: actions/upload-artifact@v4 with: name: debug-elfs-${{inputs.arch}}-${{ needs.version.outputs.long }}.zip overwrite: true path: ./*.elf retention-days: 30 - uses: scruplelesswizard/comment-artifact@main if: ${{ github.event_name == 'pull_request' }} with: name: firmware-${{inputs.arch}}-${{ needs.version.outputs.long }} description: "Download firmware-${{inputs.arch}}-${{ needs.version.outputs.long }}.zip. This artifact will be available for 90 days from creation" github-token: ${{ secrets.GITHUB_TOKEN }}