name: Continuous Integration on: # # Triggers the workflow on push but only for the master branch push: branches: [master] paths-ignore: - "**.md" - "**.yml" - "version.properties" # Note: This is different from "pull_request". Need to specify ref when doing checkouts. pull_request_target: branches: [master] paths-ignore: - "**.md" - "**.yml" workflow_dispatch: jobs: check: strategy: fail-fast: false matrix: include: - board: rak11200 - board: tlora-v2 - board: tlora-v1 - board: tlora_v1_3 - board: tlora-v2-1-1.6 - board: tbeam - board: heltec-v1 - board: heltec-v2.0 - board: heltec-v2.1 - board: tbeam0.7 - board: meshtastic-diy-v1 - board: rak4631_5005 - board: rak4631_19003 - board: rak4631_5005_eink - board: t-echo runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: "recursive" ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} - name: Install cppcheck run: | sudo apt-get install -y cppcheck - name: Setup Python uses: actions/setup-python@v2 with: python-version: 3.x - name: Cache python libs uses: actions/cache@v1 id: cache-pip # needed in if test with: path: ~/.cache/pip key: ${{ runner.os }}-pip - name: Upgrade python tools and install platformio run: | python -m pip install --upgrade pip pip install -U platformio - name: Upgrade platformio run: | pio upgrade - name: Check ${{ matrix.board }} run: bin/check-all.sh ${{ matrix.board }} build-esp32: strategy: fail-fast: false matrix: include: - board: rak11200 - board: tlora-v2 - board: tlora-v1 - board: tlora_v1_3 - board: tlora-v2-1-1.6 - board: tbeam - board: heltec-v1 - board: heltec-v2.0 - board: heltec-v2.1 - board: tbeam0.7 - board: meshtastic-diy-v1 runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: "recursive" ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} - name: Setup Python uses: actions/setup-python@v2 with: python-version: 3.x - name: Cache python libs uses: actions/cache@v1 id: cache-pip # needed in if test with: path: ~/.cache/pip key: ${{ runner.os }}-pip - name: Upgrade python tools run: | python -m pip install --upgrade pip pip install -U platformio meshtastic adafruit-nrfutil littlefs-python - name: Upgrade platformio run: | pio upgrade - name: Pull web ui uses: dsaltares/fetch-gh-release-asset@master with: repo: "meshtastic/meshtastic-web" file: "build.tar" target: "build.tar" token: ${{ secrets.GITHUB_TOKEN }} - name: Unpack web ui run: | tar -xf build.tar -C data/static rm build.tar - name: Build ESP32 run: bin/build-esp32.sh ${{ matrix.board }} - name: Get release version string run: echo "::set-output name=version::$(./bin/buildinfo.py long)" id: version - name: Store binaries as an artifact uses: actions/upload-artifact@v2 with: name: firmware-${{ matrix.board }}-${{ steps.version.outputs.version }}.zip path: | release/*.bin release/*.elf retention-days: 90 build-nrf52: strategy: fail-fast: false max-parallel: 2 matrix: include: - board: rak4631_5005 - board: rak4631_19003 - board: rak4631_5005_eink - board: t-echo runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: "recursive" ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} - name: Setup Python uses: actions/setup-python@v2 with: python-version: 3.x - name: Cache python libs uses: actions/cache@v1 id: cache-pip # needed in if test with: path: ~/.cache/pip key: ${{ runner.os }}-pip - name: Upgrade python tools run: | python -m pip install --upgrade pip pip install -U platformio meshtastic adafruit-nrfutil - name: Upgrade platformio run: | pio upgrade - name: Build NRF52 run: bin/build-nrf52.sh ${{ matrix.board }} - name: Get release version string run: echo "::set-output name=version::$(./bin/buildinfo.py long)" id: version - name: Store binaries as an artifact uses: actions/upload-artifact@v2 with: name: firmware-${{ matrix.board }}-${{ steps.version.outputs.version }}.zip path: | release/*.uf2 release/*.elf retention-days: 90 build-native: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: "recursive" ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} - name: Setup Python uses: actions/setup-python@v2 with: python-version: 3.x - name: Cache python libs uses: actions/cache@v1 id: cache-pip # needed in if test with: path: ~/.cache/pip key: ${{ runner.os }}-pip - name: Upgrade python tools run: | python -m pip install --upgrade pip pip install -U platformio meshtastic adafruit-nrfutil - name: Upgrade platformio run: | pio upgrade # We now run integration test before other build steps (to quickly see runtime failures) - name: Build for native run: platformio run -e native - name: Integration test run: | .pio/build/native/program & sleep 20 # 5 seconds was not enough echo "Simulator started, launching python test..." python3 -c 'from meshtastic.test import testSimulator; testSimulator()' - name: Build Native run: bin/build-native.sh - name: Get release version string run: echo "::set-output name=version::$(./bin/buildinfo.py long)" id: version - name: Store binaries as an artifact uses: actions/upload-artifact@v2 with: name: firmware-native-${{ steps.version.outputs.version }}.zip path: | release/meshtasticd_linux_amd64 release/device-*.sh release/device-*.bat retention-days: 90 after-checks: runs-on: ubuntu-latest needs: [check] steps: - name: Checkout code uses: actions/checkout@v3 with: ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} gather-artifacts: runs-on: ubuntu-latest needs: [build-esp32, build-nrf52, build-native] steps: - name: Checkout code uses: actions/checkout@v3 with: ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} - uses: actions/download-artifact@v2 with: path: ./ - name: Get release version string run: echo "::set-output name=version::$(./bin/buildinfo.py long)" id: version - name: Move files up run: mv -b -t ./ ./*tbeam-*/littlefs*.bin ./*tbeam-*/system-info.bin ./**/firmware*.bin ./**/*.uf2 ./**/*.elf ./**/meshtasticd_linux_amd64 ./*native*/*device-*.sh ./*native*/*device-*.bat - name: Repackage in single firmware zip uses: actions/upload-artifact@v2 with: name: firmware-${{ steps.version.outputs.version }} path: | ./*.bin ./*.uf2 ./meshtasticd_linux_amd64 ./device-*.sh ./device-*.bat retention-days: 90 - uses: actions/download-artifact@v2 with: name: firmware-${{ steps.version.outputs.version }} path: ./output # For diagnostics - name: Show artifacts run: ls -lR - name: Zip firmware run: zip -j -r ./firmware-${{ steps.version.outputs.version }}.zip ./output - name: Repackage in single elfs zip uses: actions/upload-artifact@v2 with: name: debug-elfs-${{ steps.version.outputs.version }}.zip path: ./*.elf retention-days: 90 - name: Create request artifacts if: ${{ github.event_name == 'pull_request_target' || github.event_name == 'pull_request' }} uses: gavv/pull-request-artifacts@v1.0.0 with: commit: ${{ (github.event.pull_request_target || github.event.pull_request).head.sha }} repo-token: ${{ secrets.GITHUB_TOKEN }} artifacts-token: ${{ secrets.ARTIFACTS_TOKEN }} artifacts-repo: meshtastic/artifacts artifacts-branch: device artifacts-dir: pr artifacts: ./firmware-${{ steps.version.outputs.version }}.zip