| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- name: Build and Pack
- on: [push, pull_request]
- jobs:
- #########################################################################################
- ## Build Firmware
- #########################################################################################
- build:
- runs-on: ubuntu-latest
- steps:
- - id: skip_check
- uses: fkirc/skip-duplicate-actions@v5
- with:
- concurrent_skipping: same_content_newer
-
- - uses: actions/checkout@v3
- with:
- submodules: recursive
- - name: Set Variables
- id: vars
- run: |
- echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- - name: Cache PlatformIO
- uses: actions/cache@v3
- with:
- path: ~/.platformio
- key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: '3.10'
- - name: Install PlatformIO
- run: |
- python -m pip install --upgrade pip
- pip install --upgrade platformio
- - name: Build Firmware
- #run: echo "Testing... ${{ github.ref_name }}, ${{ steps.vars.outputs.sha_short }}" > ./sd-card/html/version.txt; mkdir -p ./code/.pio/build/esp32cam/; cd ./code/.pio/build/esp32cam/; echo "${{ steps.vars.outputs.sha_short }}" > firmware.bin; cp firmware.bin partitions.bin; cp firmware.bin bootloader.bin # Testing
- run: cd code; platformio run --environment esp32cam
- - name: Store generated files in cache
- uses: actions/cache@v3
- with:
- path: |
- ./code/.pio/build/esp32cam/firmware.bin
- ./code/.pio/build/esp32cam/partitions.bin
- ./code/.pio/build/esp32cam/bootloader.bin
- ./sd-card/html/version.txt
- key: ${{ github.run_number }}
- #########################################################################################
- ## Pack for old OTA (v1)
- #########################################################################################
- pack-for-OTA-v1:
- # Old OTA concept
- # firmware__*.zip needs to be unpacked before attaching to the release!
- # The bin filename can contain versioning.
- runs-on: ubuntu-latest
- needs: build
- steps:
- - uses: actions/checkout@v3
- - name: Get generated files from cache
- uses: actions/cache@v3
- with:
- path: |
- ./code/.pio/build/esp32cam/firmware.bin
- ./code/.pio/build/esp32cam/partitions.bin
- ./code/.pio/build/esp32cam/bootloader.bin
- ./sd-card/html/version.txt
- key: ${{ github.run_number }}
- - name: Set Variables
- id: vars
- run: |
- echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- echo "branch=$(echo ${{ github.ref_name }} | tr / __)" >> $GITHUB_OUTPUT
- - name: Rename firmware file to contain versioning (old ota)
- run: |
- mkdir -p ./dist_old_ota
- cp "./code/.pio/build/esp32cam/firmware.bin" "./dist_old_ota/firmware__${{ steps.vars.outputs.branch }}_(${{ steps.vars.outputs.sha_short }}).bin"
- - name: Upload Firmware artifact (old OTA concept)
- uses: actions/upload-artifact@v3
- with:
- # name: "firmware__${{ github.ref_name }}__(${{ steps.vars.outputs.sha_short }})__(extract_before_upload__only_needed_for_migration_from_11.3.1)"
- name: "firmware__(extract_before_upload)__${{ steps.vars.outputs.branch }}__(${{ steps.vars.outputs.sha_short }})"
- path: ./dist_old_ota/*
- - name: Upload Web interface artifact (old OTA concept)
- uses: actions/upload-artifact@v3
- with:
- name: "html__${{ steps.vars.outputs.branch }}__(${{ steps.vars.outputs.sha_short }})"
- path: ./sd-card/html/*
- #########################################################################################
- ## Pack for new OTA (v2)
- #########################################################################################
- pack-for-OTA-v2:
- # New OTA concept
- # update__version.zip file with following content:
- # - /firmware.bin
- # - (optional) /html/*
- # - (optional) /config/*.tfl
- runs-on: ubuntu-latest
- needs: build
- steps:
- - uses: actions/checkout@v3
- - name: Get generated files from cache
- uses: actions/cache@v3
- with:
- path: |
- ./code/.pio/build/esp32cam/firmware.bin
- ./code/.pio/build/esp32cam/partitions.bin
- ./code/.pio/build/esp32cam/bootloader.bin
- ./sd-card/html/version.txt
- key: ${{ github.run_number }}
- - name: Set Variables
- id: vars
- run: |
- echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- echo "branch=$(echo ${{ github.ref_name }} | tr / __)" >> $GITHUB_OUTPUT
- - name: Prepare update.zip artifact
- run: |
- mkdir -p ./dist
- cp "./code/.pio/build/esp32cam/firmware.bin" "dist/firmware.bin"
- # - name: Upload update.zip Artifact (Firmware only)
- # uses: actions/upload-artifact@v3
- # with:
- # name: "update_firmware_only__${{ github.ref_name }}_(${{ steps.vars.outputs.sha_short }})"
- # path: ./dist/*
-
- - name: Add Web UI to dist
- run: cp -r ./sd-card/html ./dist/
- # - name: Upload update.zip artifact (Firmware + Web UI)
- # uses: actions/upload-artifact@v3
- # with:
- # name: "update_firmware+webinterface__${{ github.ref_name }}_(${{ steps.vars.outputs.sha_short }})"
- # path: ./dist/*
-
- - name: Add CNN to dist
- run: |
- mkdir ./dist/config/
- cp ./sd-card/config/*.tfl ./dist/config/ 2>/dev/null || true
- cp ./sd-card/config/*.tflite ./dist/config/ 2>/dev/null || true
- - name: Upload dist as update.zip artifact (Firmware + Web UI + CNN)
- uses: actions/upload-artifact@v3
- with:
- name: "update__${{ steps.vars.outputs.branch }}_(${{ steps.vars.outputs.sha_short }})"
- path: ./dist/*
- - name: Store generated files in cache
- uses: actions/cache@v3
- with:
- path: dist
- key: ${{ github.run_number }}-pack-for-OTA-v2
- #########################################################################################
- ## Pack for a fresh install (USB flashing) (initial_esp32_setup)
- #########################################################################################
- pack-for-fresh-install:
- # creates old style binaries for fresh installation (backward compatible to wiki)
- runs-on: ubuntu-latest
- needs: build
- steps:
- - uses: actions/checkout@v3
- - name: Get generated files from cache
- uses: actions/cache@v3
- with:
- path: |
- ./code/.pio/build/esp32cam/firmware.bin
- ./code/.pio/build/esp32cam/partitions.bin
- ./code/.pio/build/esp32cam/bootloader.bin
- ./sd-card/html/version.txt
- key: ${{ github.run_number }}
- - name: Set Variables
- id: vars
- run: |
- echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- echo "branch=$(echo ${{ github.ref_name }} | tr / __)" >> $GITHUB_OUTPUT
- - name: Prepare artifacts for release
- run: |
- mkdir -p firmware
- rm -rf firmware/*.zip
- mkdir -p release
- # copy builds to firmware folder
- cp -f "./code/.pio/build/esp32cam/firmware.bin" "firmware/firmware.bin"
- cp -f "./code/.pio/build/esp32cam/bootloader.bin" "firmware/bootloader.bin"
- cp -f "./code/.pio/build/esp32cam/partitions.bin" "firmware/partitions.bin"
- zip -r ./firmware/sd-card.zip sd-card
- cd ./firmware
-
- - name: Upload initial_esp32_setup.zip artifact (Firmware + Bootloader + Partitions + Web UI)
- uses: actions/upload-artifact@v3
- with:
- name: "initial_esp32_setup__${{ steps.vars.outputs.branch }}_(${{ steps.vars.outputs.sha_short }})"
- path: ./firmware
- - name: Store generated files in cache
- uses: actions/cache@v3
- with:
- path: firmware
- key: ${{ github.run_number }}-pack-for-fresh-install
- #########################################################################################
- ## Prepare and create release
- #########################################################################################
- release:
- runs-on: ubuntu-latest
- needs: [pack-for-OTA-v2, pack-for-fresh-install]
- if: startsWith(github.ref, 'refs/tags/')
-
- steps:
- - uses: actions/checkout@v3
- - name: Set Variables
- id: vars
- run: |
- echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- - name: Get generated files from cache
- uses: actions/cache@v3
- with:
- path: |
- ./code/.pio/build/esp32cam/firmware.bin
- ./code/.pio/build/esp32cam/partitions.bin
- ./code/.pio/build/esp32cam/bootloader.bin
- ./sd-card/html/version.txt
- key: ${{ github.run_number }}
- # import the changes from
- - name: Get generated files from cache
- uses: actions/cache@v3
- with:
- path: dist
- key: ${{ github.run_number }}-pack-for-OTA-v2
- # import cached artifacts from pack-for-fresh-install
- - name: Get generated files from cache
- uses: actions/cache@v3
- with:
- path: firmware
- key: ${{ github.run_number }}-pack-for-fresh-install
- - name: Prepare artifacts for release
- run: |
- mkdir -p release
- mkdir -p dist
- # create a update.zip like "update__rolling"
- pwd
- ls ./dist
- cd ./dist
- zip -r ../release/update.zip .
- cd ../firmware
- zip -r ../release/initial_esp32_setup.zip .
- cd ../sd-card/html
- zip -r ../../firmware/html-from-11.3.1.zip .
-
- # extract the version used in next step
- - id: get_version
- if: startsWith(github.ref, 'refs/tags/')
- uses: battila7/get-version-action@v2
- # the changelog [unreleased] will now be changed to the release version
- - name: Update changelog
- uses: thomaseizinger/keep-a-changelog-new-release@v1
- if: startsWith(github.ref, 'refs/tags/')
- with:
- changelogPath: Changelog.md
- version: ${{ steps.get_version.outputs.version-without-v }}
-
- # the release notes will be extracted from changelog
- - name: Extract release notes
- id: extract-release-notes
- if: startsWith(github.ref, 'refs/tags/')
- uses: ffurrer2/extract-release-notes@v1
- with:
- changelog_file: Changelog.md
-
- # Releases should only be created on master by tagging the last commit.
- # all artifacts in firmware folder pushed to the release
- - name: Release
- uses: softprops/action-gh-release@v1
- if: startsWith(github.ref, 'refs/tags/')
- with:
- name: ${{ steps.get_version.outputs.version-without-v }}
- body: ${{ steps.extract-release-notes.outputs.release_notes }}
- files: |
- release/*
- firmware/firmware.bin
- firmware/html-from-11.3.1.zip
-
- # Commit&Push Changelog to master branch. Must be manually merged back to rolling
- - name: Commit changes and push changes
- if: startsWith(github.ref, 'refs/tags/')
- run: |
- git config user.name github-actions
- git config user.email github-actions@github.com
- git add Changelog.md
- git commit Changelog.md -m "Update Changelog.md for ${{github.event.inputs.versionIncrement}} release"
- git push origin HEAD:master
|