mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-01 10:19:59 +00:00
827553f4c7
Some checks failed
CI / setup (check) (push) Waiting to run
CI / setup (esp32) (push) Waiting to run
CI / setup (esp32c3) (push) Waiting to run
CI / setup (esp32c6) (push) Waiting to run
CI / setup (esp32s3) (push) Waiting to run
CI / setup (nrf52840) (push) Waiting to run
CI / setup (rp2040) (push) Waiting to run
CI / setup (stm32) (push) Waiting to run
CI / check (push) Blocked by required conditions
CI / build-esp32 (push) Blocked by required conditions
CI / build-esp32-s3 (push) Blocked by required conditions
CI / build-esp32-c3 (push) Blocked by required conditions
CI / build-esp32-c6 (push) Blocked by required conditions
CI / build-nrf52 (push) Blocked by required conditions
CI / build-rpi2040 (push) Blocked by required conditions
CI / build-stm32 (push) Blocked by required conditions
CI / package-raspbian (push) Waiting to run
CI / package-raspbian-armv7l (push) Waiting to run
CI / package-native (push) Waiting to run
CI / build-docker (push) Waiting to run
CI / after-checks (push) Blocked by required conditions
CI / gather-artifacts (esp32) (push) Blocked by required conditions
CI / gather-artifacts (esp32c3) (push) Blocked by required conditions
CI / gather-artifacts (esp32c6) (push) Blocked by required conditions
CI / gather-artifacts (esp32s3) (push) Blocked by required conditions
CI / gather-artifacts (nrf52840) (push) Blocked by required conditions
CI / gather-artifacts (rp2040) (push) Blocked by required conditions
CI / gather-artifacts (stm32) (push) Blocked by required conditions
CI / release-artifacts (push) Blocked by required conditions
CI / release-firmware (esp32) (push) Blocked by required conditions
CI / release-firmware (esp32c3) (push) Blocked by required conditions
CI / release-firmware (esp32c6) (push) Blocked by required conditions
CI / release-firmware (esp32s3) (push) Blocked by required conditions
CI / release-firmware (nrf52840) (push) Blocked by required conditions
CI / release-firmware (rp2040) (push) Blocked by required conditions
CI / release-firmware (stm32) (push) Blocked by required conditions
Flawfinder Scan / Flawfinder (push) Waiting to run
Nightly / Trunk Check Upload (push) Has been cancelled
409 lines
12 KiB
YAML
409 lines
12 KiB
YAML
name: CI
|
|
concurrency:
|
|
group: ci-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
on:
|
|
# # Triggers the workflow on push but only for the master branch
|
|
push:
|
|
branches: [master, develop]
|
|
paths-ignore:
|
|
- "**.md"
|
|
- version.properties
|
|
|
|
# Note: This is different from "pull_request". Need to specify ref when doing checkouts.
|
|
pull_request_target:
|
|
branches: [master, develop]
|
|
paths-ignore:
|
|
- "**.md"
|
|
#- "**.yml"
|
|
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
setup:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch: [esp32, esp32s3, esp32c3, esp32c6, nrf52840, rp2040, stm32, check]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- id: checkout
|
|
uses: actions/checkout@v4
|
|
name: Checkout base
|
|
- id: jsonStep
|
|
run: |
|
|
if [[ "${{ github.head_ref }}" == "" ]]; then
|
|
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}})
|
|
else
|
|
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}} quick)
|
|
fi
|
|
echo "Name: ${{ github.ref_name }} Base: ${{ github.base_ref }} } Ref: ${{ github.ref }} Targets: $TARGETS"
|
|
echo "${{matrix.arch}}=$(jq -cn --argjson environments "$TARGETS" '{board: $environments}')" >> $GITHUB_OUTPUT
|
|
outputs:
|
|
esp32: ${{ steps.jsonStep.outputs.esp32 }}
|
|
esp32s3: ${{ steps.jsonStep.outputs.esp32s3 }}
|
|
esp32c3: ${{ steps.jsonStep.outputs.esp32c3 }}
|
|
esp32c6: ${{ steps.jsonStep.outputs.esp32c6 }}
|
|
nrf52840: ${{ steps.jsonStep.outputs.nrf52840 }}
|
|
rp2040: ${{ steps.jsonStep.outputs.rp2040 }}
|
|
stm32: ${{ steps.jsonStep.outputs.stm32 }}
|
|
check: ${{ steps.jsonStep.outputs.check }}
|
|
|
|
check:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.check) }}
|
|
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name != 'workflow_dispatch' }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Build base
|
|
id: base
|
|
uses: ./.github/actions/setup-base
|
|
- name: Check ${{ matrix.board }}
|
|
run: bin/check-all.sh ${{ matrix.board }}
|
|
|
|
build-esp32:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.esp32) }}
|
|
uses: ./.github/workflows/build_esp32.yml
|
|
with:
|
|
board: ${{ matrix.board }}
|
|
|
|
build-esp32-s3:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.esp32s3) }}
|
|
uses: ./.github/workflows/build_esp32_s3.yml
|
|
with:
|
|
board: ${{ matrix.board }}
|
|
|
|
build-esp32-c3:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.esp32c3) }}
|
|
uses: ./.github/workflows/build_esp32_c3.yml
|
|
with:
|
|
board: ${{ matrix.board }}
|
|
|
|
build-esp32-c6:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.esp32c6) }}
|
|
uses: ./.github/workflows/build_esp32_c6.yml
|
|
with:
|
|
board: ${{ matrix.board }}
|
|
|
|
build-nrf52:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.nrf52840) }}
|
|
uses: ./.github/workflows/build_nrf52.yml
|
|
with:
|
|
board: ${{ matrix.board }}
|
|
|
|
build-rpi2040:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.rp2040) }}
|
|
uses: ./.github/workflows/build_rpi2040.yml
|
|
with:
|
|
board: ${{ matrix.board }}
|
|
|
|
build-stm32:
|
|
needs: setup
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.setup.outputs.stm32) }}
|
|
uses: ./.github/workflows/build_stm32.yml
|
|
with:
|
|
board: ${{ matrix.board }}
|
|
|
|
package-raspbian:
|
|
uses: ./.github/workflows/package_raspbian.yml
|
|
|
|
package-raspbian-armv7l:
|
|
uses: ./.github/workflows/package_raspbian_armv7l.yml
|
|
|
|
package-native:
|
|
uses: ./.github/workflows/package_amd64.yml
|
|
|
|
build-docker:
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
uses: ./.github/workflows/build_docker.yml
|
|
secrets: inherit
|
|
|
|
after-checks:
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name != 'workflow_dispatch' }}
|
|
needs: [check]
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{github.event.pull_request.head.ref}}
|
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
|
|
|
gather-artifacts:
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch: [esp32, esp32s3, esp32c3, esp32c6, nrf52840, rp2040, stm32]
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
[
|
|
build-esp32,
|
|
build-esp32-s3,
|
|
build-esp32-c3,
|
|
build-esp32-c6,
|
|
build-nrf52,
|
|
build-rpi2040,
|
|
build-stm32,
|
|
]
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{github.event.pull_request.head.ref}}
|
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./
|
|
pattern: firmware-${{matrix.arch}}-*
|
|
merge-multiple: true
|
|
|
|
- name: Display structure of downloaded files
|
|
run: ls -R
|
|
|
|
- name: Get release version string
|
|
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
|
id: version
|
|
|
|
- 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-${{matrix.arch}}-${{ steps.version.outputs.version }}
|
|
overwrite: true
|
|
path: |
|
|
./firmware-*.bin
|
|
./firmware-*.uf2
|
|
./firmware-*.hex
|
|
./firmware-*-ota.zip
|
|
./device-*.sh
|
|
./device-*.bat
|
|
./littlefs-*.bin
|
|
./littlefswebui-*.bin
|
|
./bleota*bin
|
|
./Meshtastic_nRF52_factory_erase*.uf2
|
|
retention-days: 30
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}
|
|
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-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip ./output
|
|
|
|
- name: Repackage in single elfs zip
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
|
|
overwrite: true
|
|
path: ./*.elf
|
|
retention-days: 30
|
|
|
|
- uses: scruplelesswizard/comment-artifact@main
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
with:
|
|
name: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}
|
|
description: "Download firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip. This artifact will be available for 90 days from creation"
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
release-artifacts:
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
outputs:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
needs:
|
|
[
|
|
gather-artifacts,
|
|
package-raspbian,
|
|
package-raspbian-armv7l,
|
|
package-native,
|
|
]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: 3.x
|
|
|
|
- name: Get release version string
|
|
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
|
id: version
|
|
|
|
- name: Create release
|
|
uses: actions/create-release@v1
|
|
id: create_release
|
|
with:
|
|
draft: true
|
|
prerelease: true
|
|
release_name: Meshtastic Firmware ${{ steps.version.outputs.version }} Alpha
|
|
tag_name: v${{ steps.version.outputs.version }}
|
|
body: |
|
|
Autogenerated by github action, developer should edit as required before publishing...
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
|
|
- name: Download deb files
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
pattern: meshtasticd_${{ steps.version.outputs.version }}_*.deb
|
|
merge-multiple: true
|
|
path: ./output
|
|
|
|
# For diagnostics
|
|
- name: Display structure of downloaded files
|
|
run: ls -lR
|
|
|
|
- name: Add raspbian aarch64 .deb
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./output/meshtasticd_${{ steps.version.outputs.version }}_arm64.deb
|
|
asset_name: meshtasticd_${{ steps.version.outputs.version }}_arm64.deb
|
|
asset_content_type: application/vnd.debian.binary-package
|
|
|
|
- name: Add raspbian armv7l .deb
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./output/meshtasticd_${{ steps.version.outputs.version }}_armhf.deb
|
|
asset_name: meshtasticd_${{ steps.version.outputs.version }}_armhf.deb
|
|
asset_content_type: application/vnd.debian.binary-package
|
|
|
|
- name: Add raspbian amd64 .deb
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./output/meshtasticd_${{ steps.version.outputs.version }}_amd64.deb
|
|
asset_name: meshtasticd_${{ steps.version.outputs.version }}_amd64.deb
|
|
asset_content_type: application/vnd.debian.binary-package
|
|
|
|
- name: Bump version.properties
|
|
run: >-
|
|
bin/bump_version.py
|
|
|
|
- name: Create version.properties pull request
|
|
uses: peter-evans/create-pull-request@v7
|
|
with:
|
|
title: Bump version.properties
|
|
add-paths: |
|
|
version.properties
|
|
|
|
release-firmware:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch: [esp32, esp32s3, esp32c3, esp32c6, nrf52840, rp2040, stm32]
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
needs: [release-artifacts]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: 3.x
|
|
|
|
- name: Get release version string
|
|
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
|
id: version
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
pattern: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}
|
|
merge-multiple: true
|
|
path: ./output
|
|
|
|
- name: Display structure of downloaded files
|
|
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-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip ./output
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
|
|
merge-multiple: true
|
|
path: ./elfs
|
|
|
|
- name: Zip firmware
|
|
run: zip -j -9 -r ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip ./elfs
|
|
|
|
# For diagnostics
|
|
- name: Display structure of downloaded files
|
|
run: ls -lR
|
|
|
|
- name: Add bins to release
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
with:
|
|
upload_url: ${{needs.release-artifacts.outputs.upload_url}}
|
|
asset_path: ./firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
|
|
asset_name: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Add debug elfs to release
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
with:
|
|
upload_url: ${{needs.release-artifacts.outputs.upload_url}}
|
|
asset_path: ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
|
|
asset_name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
|
|
asset_content_type: application/zip
|