name: NukiHub Beta on: workflow_dispatch: permissions: contents: write jobs: build: name: Build ${{ matrix.board }} (${{ matrix.build }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: board: [esp32, esp32-nopsram, esp32-s3, esp32-s3-nopsram, esp32-s3-oct, esp32-c3, esp32-c5, esp32-c6, esp32-c61, esp32-h2, esp32-solo1, esp32-gl-s10, esp32-p4, esp32-p4c5] build: [release] env: BOARD: ${{ matrix.board }} VARIANT: ${{ matrix.name || matrix.board }} BUILD: ${{ matrix.build }} steps: - name: Fix variant name run: | # remove dash character export VARIANT=${VARIANT//-/} echo "VARIANT=${VARIANT}" | tee -a ${GITHUB_ENV} - uses: actions/checkout@v4 with: submodules: recursive - uses: actions/cache@v4 with: path: | ~/.cache/pip ~/.platformio/.cache ~/.platformio/packages key: ${{ runner.os }}-pio-${{ matrix.board }} - uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: make deps - name: Add version info env: Version: ${{ github.run_id }}.${{ github.run_number }}.${{ github.run_attempt }} run: | sed -i "s/unknownbuildnr/$Version/g" src/Config.h python3 resources/config_version.py beta - name: Build ${{ matrix.build }} PlatformIO Project ${{ matrix.board }} run: | ORIGBOARD="${BOARD}" if [ "$BUILD" = "debug" ]; then BOARD="${BOARD}_dbg" fi echo "::group::Building with PlatformIO" make updater_${ORIGBOARD} make $BOARD echo "::endgroup::" - name: Add flash script env: DOC: resources/how-to-flash.txt FILES: ${{ format('{0}/{1}', env.BUILD, env.VARIANT) }} run: | BOARD=`echo $BOARD | tr '[:lower:]' '[:upper:]'` # look for documentation on flash and copy the command command=`sed -n '/^Howto flash (esptool)$/,$p' ${DOC} | sed -n '/^## '"${BOARD}"'$/,\${ n; n; p; }' | head -n1` if [ -z "$command" ]; then echo "::error::Command not found in document ${DOC} for board ${BOARD}" exit 1 fi echo -n "Command: " echo "$command" | tee ${FILES}/flash.sh chmod a+x ${FILES}/flash.sh - name: Upload Artifact ${{ matrix.board }}-${{ matrix.build }} uses: actions/upload-artifact@v4 with: name: ${{ format('{0}-{1}-assets', env.VARIANT, matrix.build) }} path: ${{ matrix.build }}/${{ env.VARIANT }} ota-beta: name: Create beta from latest master needs: build runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 with: ref: binary - name: Git Checkout master uses: actions/checkout@v4 with: ref: master path: master sparse-checkout: | resources/ota_manifest.py src/Config.h - name: Git Commands run: | git checkout --orphan newBinary git branch -D binary git branch -M binary git rm --cached --ignore-unmatch -r * - name: Download release assets uses: actions/download-artifact@v4 with: path: release pattern: '*-release-assets' - name: Copy binaries to ota/beta env: Version: ${{ github.run_id }}.${{ github.run_number }}.${{ github.run_attempt }} run: | mkdir -p ota/beta/ mkdir -p ota/master/ mkdir -p resources/ mkdir -p src/ cp -vf release/*/nuki_hub_*.bin ota/beta/ cp -vf release/*/nuki_hub_*.elf ota/beta/ cp -vf master/resources/ota_manifest.py resources/ota_manifest.py cp -vf master/src/Config.h src/Config.h python3 resources/ota_manifest.py beta $Version find * -not -path "ota*" -delete rm -rf .github .gitignore .gitmodules touch ota/beta/empty touch ota/beta/dummy.bin touch ota/master/empty - name: Commit binaries to binary uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: "Update binaries" file_pattern: 'ota/* ota/master/* ota/beta/*' branch: binary skip_dirty_check: true skip_fetch: true skip_checkout: true disable_globbing: true add_options: '-f' push_options: '-f'