mirror of
				https://github.com/meshtastic/firmware.git
				synced 2025-10-28 15:22:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			177 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| 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 }}
 | 
