name: NukiHub Nightly on: workflow_dispatch: schedule: - cron: "30 0 * * *" permissions: contents: write jobs: build: name: Build ${{ matrix.board }} (${{ matrix.build }}) if: github.repository == 'technyon/nuki_hub' runs-on: ubuntu-latest strategy: fail-fast: false matrix: board: [esp32dev, esp32-s3, esp32-c3, esp32-c6, esp32solo1] 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//-/} if [ "$VARIANT" = "esp32dev" ]; then VARIANT="esp32" fi echo "VARIANT=${VARIANT}" | tee -a ${GITHUB_ENV} - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - name: Get new commits run: echo "NEW_COMMIT_COUNT=$(git log --oneline --since '24 hours ago' | wc -l)" >> $GITHUB_ENV - uses: actions/cache@v4 if: ${{ env.NEW_COMMIT_COUNT > 1 }} with: path: | ~/.cache/pip ~/.platformio/.cache ~/.platformio/packages key: ${{ runner.os }}-pio-${{ matrix.board }} - uses: actions/setup-python@v5 with: python-version: '3.9' - 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 - name: Build ${{ matrix.build }} PlatformIO Project ${{ matrix.board }} run: | if [ "$BUILD" = "debug" ]; then BOARD="${BOARD}_dbg" fi echo "::group::Building with PlatformIO" if [ "$BUILD" = "release" ]; then make updater_${BOARD} fi 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:]'` # fix for docs if [ "$BOARD" = "ESP32DEV" ]; then BOARD="ESP32" fi # 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-nightly: name: Create nightly from latest master needs: build runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} - name: Download release assets uses: actions/download-artifact@v4 with: path: release pattern: '*-release-assets' - name: Copy binaries to ota/master env: Version: ${{ github.run_id }}.${{ github.run_number }}.${{ github.run_attempt }} run: | mkdir -p ota/master/ cp -vf release/*/nuki_hub_*.bin ota/master/ rm -rf release python3 resources/ota_manifest.py master $Version - name: Commit binaries to master uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: "Update master binaries" file_pattern: 'ota/master/*.bin ota/manifest.json' branch: master skip_dirty_check: true skip_fetch: true skip_checkout: true disable_globbing: true add_options: '-f'