name: '๐Ÿ”ฅ Firmware Build' on: push: tags: - 'v*.*.*' branches: - 'master' paths: - 'src/**' - '.github/workflows/*.yml' - '.github/workflows/*.json' - '!**/README.md' - '!**.rst' pull_request: branches: - 'master' paths: - 'src/**' - '.github/workflows/*.yml' - '.github/workflows/*.json' - '!**/README.md' - '!**.rst' jobs: build-firmware: runs-on: ubuntu-22.04 strategy: matrix: target: [OPENMV2, OPENMV3, OPENMV4, OPENMV4P, OPENMVPT, OPENMV_RT1060, ARDUINO_PORTENTA_H7, ARDUINO_GIGA, ARDUINO_NICLA_VISION, ARDUINO_NANO_RP2040_CONNECT, ARDUINO_NANO_33_BLE_SENSE] fail-fast: false steps: - name: 'โณ Checkout repository' uses: actions/checkout@v4 with: submodules: false - name: '๐Ÿงฑ Update submodules' run: source tools/ci.sh && ci_update_submodules - name: 'โ™ป Caching dependencies' uses: actions/cache@v4.0.2 id: cache with: path: ~/cache/gcc key: 'arm-gnu-toolchain-13.2.rel1' - name: '๐Ÿ Install Python' uses: actions/setup-python@v5 with: cache: 'pip' python-version: "3.12.4" - name: '๐Ÿ›  Install Vela' run: | pip install ethos-u-vela==3.12.0 vela --version - name: '๐Ÿ›  Install toolchain ' if: steps.cache.outputs.cache-hit != 'true' run: source tools/ci.sh && ci_install_arm_gcc - name: '๐Ÿ— Build firmware' run: source tools/ci.sh && ci_build_target ${{ matrix.target }} - name: 'โฌ† Upload artifacts' uses: actions/upload-artifact@v4 with: name: ${{ matrix.target }} path: ${{ matrix.target }} if-no-files-found: error code-size-report: needs: build-firmware runs-on: ubuntu-22.04 if: github.event_name == 'pull_request' steps: - name: 'โณ Checkout repository' uses: actions/checkout@v4 with: submodules: false - name: 'โ™ป Caching dependencies' uses: actions/cache@v4.0.2 id: cache with: path: ~/cache/gcc key: 'arm-gnu-toolchain-13.2.rel1' - name: '๐Ÿ Install Python' uses: actions/setup-python@v5 with: cache: 'pip' python-version: "3.12.4" - name: '๐Ÿ›  Install dependencies' run: | pip install tabulate==0.9.0 - name: 'โ†“ Download artifacts' uses: actions/download-artifact@v4 with: path: new_firmware merge-multiple: false - name: 'โ†“ Download release' uses: robinraju/release-downloader@v1 with: repository: 'openmv/openmv' tag: 'development' fileName: '*.zip' extract: false out-file-path: 'old_firmware' - name: '๐Ÿ“ Generate report' run: | TOOLCHAIN_PATH=${HOME}/cache/gcc export PATH=${TOOLCHAIN_PATH}/bin:${PATH} python tools/code_size.py > ${GITHUB_WORKSPACE}/${{ github.event.pull_request.number }}.md - name: 'โฌ† Upload report' uses: actions/upload-artifact@v4 with: overwrite: true name: code-size-report path: ${{ github.event.pull_request.number }}.md if-no-files-found: error stable-release: needs: build-firmware runs-on: ubuntu-22.04 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') steps: - name: 'โณ Checkout repository' uses: actions/checkout@v4 with: submodules: false - name: 'โ†“ Download artifacts' uses: actions/download-artifact@v4 with: path: firmware - name: '๐Ÿ“ฆ Package firmware' run: source tools/ci.sh && ci_package_firmware_release ${{github.ref_name}} - name: "โœ๏ธ Generate release changelog" id: changelog uses: mikepenz/release-changelog-builder-action@v5 with: toTag: ${{ github.sha }} configuration: '.github/workflows/changelog.json' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: '๐Ÿ”ฅ Create stable release' uses: softprops/action-gh-release@v2 with: draft: true files: firmware_*.zip body: ${{steps.changelog.outputs.changelog}} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: '๐Ÿงน Remove artifacts' uses: geekyeggo/delete-artifact@v5 with: name: firmware failOnError: false development-release: needs: build-firmware runs-on: ubuntu-22.04 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') == false permissions: contents: write steps: - name: 'โณ Checkout repository' uses: actions/checkout@v4 with: submodules: false - name: 'โ†“ Download artifacts' uses: actions/download-artifact@v4 with: path: firmware - name: '๐Ÿ“ฆ Package firmware' run: source tools/ci.sh && ci_package_firmware_development - name: '๐Ÿงน Delete old release' uses: dev-drprasad/delete-tag-and-release@v1.1 with: delete_release: true tag_name: development env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: "โœ๏ธ Generate release changelog" id: changelog uses: mikepenz/release-changelog-builder-action@v5 with: toTag: ${{ github.sha }} configuration: '.github/workflows/changelog.json' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: '๐Ÿ”ฅ Create development release' uses: softprops/action-gh-release@v2 with: draft: false name: Development Release tag_name: development body: | **โš ๏ธ This is a development release, and it may be unstable.** ${{steps.changelog.outputs.changelog}} files: firmware/firmware_*.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: '๐Ÿงน Remove artifacts' uses: geekyeggo/delete-artifact@v5 with: name: firmware failOnError: false