name: Build on: workflow_call: inputs: version: required: true type: string platform: required: true type: string pio_env: required: true type: string permissions: read-all jobs: pio-build: name: build-${{ inputs.platform }} # Use 'arctastic' self-hosted runner pool when building in the main repo runs-on: ${{ github.repository_owner == 'meshtastic' && 'arctastic' || 'ubuntu-latest' }} outputs: artifact-id: ${{ steps.upload-firmware.outputs.artifact-id }} steps: - uses: actions/checkout@v6 with: submodules: recursive ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} - name: Build ${{ inputs.platform }} id: build uses: meshtastic/gh-action-firmware@main with: pio_platform: ${{ inputs.platform }} pio_env: ${{ inputs.pio_env }} pio_target: build - name: ESP32 - Download Unified OTA firmware # Currently only esp32 and esp32s3 use the unified ota if: inputs.platform == 'esp32' || inputs.platform == 'esp32s3' id: dl-ota-unified env: PIO_PLATFORM: ${{ inputs.platform }} PIO_ENV: ${{ inputs.pio_env }} OTA_URL: https://github.com/meshtastic/esp32-unified-ota/releases/latest/download/mt-${{ inputs.platform }}-ota.bin working-directory: release run: | curl -L -o "mt-$PIO_PLATFORM-ota.bin" $OTA_URL - name: ESP32-C* - Download BLE-Only OTA firmware if: inputs.platform == 'esp32c3' || inputs.platform == 'esp32c6' id: dl-ota-ble env: PIO_ENV: ${{ inputs.pio_env }} OTA_URL: https://github.com/meshtastic/firmware-ota/releases/latest/download/firmware-c3.bin working-directory: release run: | curl -L -o bleota-c3.bin $OTA_URL - name: Job summary env: PIO_ENV: ${{ inputs.pio_env }} run: | echo "## $PIO_ENV" >> $GITHUB_STEP_SUMMARY echo "
Manifest" >> $GITHUB_STEP_SUMMARY echo '' >> $GITHUB_STEP_SUMMARY echo '```json' >> $GITHUB_STEP_SUMMARY cat release/firmware-*.mt.json >> $GITHUB_STEP_SUMMARY echo '' >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY echo "
" >> $GITHUB_STEP_SUMMARY - name: Store binaries as an artifact uses: actions/upload-artifact@v6 id: upload-firmware with: name: firmware-${{ inputs.platform }}-${{ inputs.pio_env }}-${{ inputs.version }} overwrite: true path: | release/*.mt.json release/*.bin release/*.elf release/*.uf2 release/*.hex release/*.zip release/device-*.sh release/device-*.bat - name: Store manifests as an artifact uses: actions/upload-artifact@v6 id: upload-manifest with: name: manifest-${{ inputs.platform }}-${{ inputs.pio_env }}-${{ inputs.version }} overwrite: true path: | release/*.mt.json