From 2a3c0a7911be3531e0a30c01c9cf0d58e013951c Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 26 Nov 2024 18:07:47 +0100 Subject: [PATCH 1/7] Add Forgejo CI action --- .forgejo/workflows/push.yaml | 173 +++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 .forgejo/workflows/push.yaml diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml new file mode 100644 index 0000000..992b782 --- /dev/null +++ b/.forgejo/workflows/push.yaml @@ -0,0 +1,173 @@ +on: + push: + tags: + - "*" + branches: + - 'feature/forgejo-ci' + workflow_dispatch: + +jobs: + build: + runs-on: docker + container: + image: ghcr.io/catthehacker/ubuntu:js-22.04 + permissions: + contents: write + checks: write + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: yarn + cache-dependency-path: '**/yarn.lock' + - uses: actions/cache@v4 + with: + path: | + ~/.cache/pip + ~/.platformio/.cache + ~/data/node_modules + key: ${{ runner.os }}-pio + - uses: actions/setup-python@v5 + with: + python-version: '3.9' + - name: Get current date + id: dateAndTime + shell: bash + run: echo "dateAndTime=$(date +'%Y-%m-%d-%H:%M')" >> $GITHUB_OUTPUT + - name: Install PlatformIO Core + shell: bash + run: pip install --upgrade platformio + - name: Run unit tests + shell: bash + run: mkdir -p junit-reports && pio test -e native_test_only --junit-output-path junit-reports/ + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: success() || failure() # always run even if the previous step fails + with: + report_paths: '**/junit-reports/*.xml' + detailed_summary: true + - name: Build BTClock firmware + shell: bash + run: pio run + - name: Build BTClock filesystem + shell: bash + run: pio run --target buildfs + - name: Copy bootloader to output folder + run: cp ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin .pio + - name: Upload artifacts + uses: https://code.forgejo.org/forgejo/upload-artifact@v4 + with: + include-hidden-files: true + retention-days: 1 + name: prepared-outputs + path: .pio/**/*.bin + merge: + runs-on: docker + container: + image: ghcr.io/catthehacker/ubuntu:js-22.04 + permissions: + contents: write + checks: write + needs: build + continue-on-error: true + strategy: + matrix: + chip: + - name: lolin_s3_mini + version: esp32s3 + - name: btclock_rev_b + version: esp32s3 + - name: btclock_v8 + version: esp32s3 + epd_variant: [213epd, 29epd] + exclude: + - chip: {name: btclock_rev_b, version: esp32s3} + epd_variant: 29epd + - chip: {name: btclock_v8, version: esp32s3} + epd_variant: 29epd + steps: + - uses: https://code.forgejo.org/forgejo/download-artifact@v4 + with: + name: prepared-outputs + path: .pio + - name: Install esptools.py + run: pip install --upgrade esptool + - name: Create merged firmware binary + run: | + if [ "${{ matrix.chip.name }}" == "btclock_v8" ]; then + mkdir -p ${{ matrix.chip.name }}_${{ matrix.epd_variant }} && \ + esptool.py --chip ${{ matrix.chip.version }} merge_bin \ + -o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin \ + --flash_mode dio \ + --flash_freq 80m \ + --flash_size 16MB \ + 0x0000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/bootloader.bin \ + 0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin \ + 0xe000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/ota_data_initial.bin \ + 0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin \ + 0x810000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin; + else + # Original command for other cases + mkdir -p ${{ matrix.chip.name }}_${{ matrix.epd_variant }} && \ + esptool.py --chip ${{ matrix.chip.version }} merge_bin \ + -o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin \ + --flash_mode dio \ + 0x0000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/bootloader.bin \ + 0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin \ + 0xe000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/ota_data_initial.bin \ + 0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin \ + 0x369000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin + # Adjust the offset for littlefs or other files as needed for the original case + fi + + - name: Create checksum for firmware + run: shasum -a 256 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}_firmware.bin.sha256 + + - name: Create checksum for merged binary + run: shasum -a 256 ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin.sha256 + + - name: Create checksum for littlefs partition + run: shasum -a 256 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin.sha256 + + - name: Copy all artifacts to output folder + run: cp .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/*.bin .pio/boot_app0.bin ${{ matrix.chip.name }}_${{ matrix.epd_variant }} + + - name: Create OTA binary file + run: mv ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}_firmware.bin + - name: Upload artifacts + uses: https://code.forgejo.org/forgejo/upload-artifact@v4 + with: + name: build-${{ matrix.chip.name }}-${{ matrix.epd_variant }} + path: | + ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/*.bin + ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/*.sha256 + release: + runs-on: docker + permissions: + contents: write + checks: write + needs: merge + steps: + - name: Download matrix outputs + uses: https://code.forgejo.org/forgejo/download-artifact@v4 + with: + pattern: "build-*/**/*.bin,build-*/**/*.sha256" + merge-multiple: false + path: release + - name: Create release + uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0 + with: + url: 'https://git.btclock.dev/' + repo: '${{ github.repository }}' + direction: upload + tag: '${{ github.ref_name }}' + sha: '${{ github.sha }}' + release-dir: release + token: ${{ secrets.TOKEN }} + override: false + verbose: false + prerelease: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }} + release-notes-assistant: false \ No newline at end of file From 44a6c44e7a10597cfa4006f55b5ac5a16d4bd2e4 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 26 Nov 2024 18:08:54 +0100 Subject: [PATCH 2/7] Remove report action --- .forgejo/workflows/push.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml index 992b782..132e662 100644 --- a/.forgejo/workflows/push.yaml +++ b/.forgejo/workflows/push.yaml @@ -43,12 +43,6 @@ jobs: - name: Run unit tests shell: bash run: mkdir -p junit-reports && pio test -e native_test_only --junit-output-path junit-reports/ - - name: Publish Test Report - uses: mikepenz/action-junit-report@v4 - if: success() || failure() # always run even if the previous step fails - with: - report_paths: '**/junit-reports/*.xml' - detailed_summary: true - name: Build BTClock firmware shell: bash run: pio run From e44d686218ebfa87d059a6dc45cad1a409b3e830 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 26 Nov 2024 18:37:50 +0100 Subject: [PATCH 3/7] Fix release step --- .forgejo/workflows/push.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml index 132e662..b54425b 100644 --- a/.forgejo/workflows/push.yaml +++ b/.forgejo/workflows/push.yaml @@ -148,9 +148,13 @@ jobs: - name: Download matrix outputs uses: https://code.forgejo.org/forgejo/download-artifact@v4 with: - pattern: "build-*/**/*.bin,build-*/**/*.sha256" + pattern: build-* merge-multiple: false - path: release + path: temp + - name: Copy files + run: | + mkdir -p release + cp -t release temp/**/*.bin temp/**/*.sha256 - name: Create release uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0 with: From 25dcf444c2ea04a46c55d81197d030b6368b6461 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 26 Nov 2024 19:03:48 +0100 Subject: [PATCH 4/7] Add platformio and node_modules cache --- .forgejo/workflows/push.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml index b54425b..07ac8c8 100644 --- a/.forgejo/workflows/push.yaml +++ b/.forgejo/workflows/push.yaml @@ -29,6 +29,8 @@ jobs: ~/.cache/pip ~/.platformio/.cache ~/data/node_modules + .pio + data/node_modules key: ${{ runner.os }}-pio - uses: actions/setup-python@v5 with: @@ -154,7 +156,7 @@ jobs: - name: Copy files run: | mkdir -p release - cp -t release temp/**/*.bin temp/**/*.sha256 + cp -rf -t release temp/**/*.bin temp/**/*.sha256 - name: Create release uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0 with: @@ -165,7 +167,7 @@ jobs: sha: '${{ github.sha }}' release-dir: release token: ${{ secrets.TOKEN }} - override: false + override: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }} verbose: false prerelease: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }} release-notes-assistant: false \ No newline at end of file From b26ca1e760d32caa4007c657727d2b334120e1c9 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 26 Nov 2024 19:29:37 +0100 Subject: [PATCH 5/7] Try with less targets --- .forgejo/workflows/push.yaml | 3 ++- platformio.ini | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml index 07ac8c8..602897f 100644 --- a/.forgejo/workflows/push.yaml +++ b/.forgejo/workflows/push.yaml @@ -35,6 +35,7 @@ jobs: - uses: actions/setup-python@v5 with: python-version: '3.9' + cache: 'pip' - name: Get current date id: dateAndTime shell: bash @@ -156,7 +157,7 @@ jobs: - name: Copy files run: | mkdir -p release - cp -rf -t release temp/**/*.bin temp/**/*.sha256 + find temp -type f \( -name "*.bin" -o -name "*.sha256" \) -exec cp -f {} release/ \; - name: Create release uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0 with: diff --git a/platformio.ini b/platformio.ini index 25e7d9c..28ccda0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] data_dir = data/build_gz -default_envs = lolin_s3_mini_213epd, lolin_s3_mini_29epd, btclock_rev_b_213epd, btclock_v8_213epd +default_envs = lolin_s3_mini_213epd, lolin_s3_mini_29epd [env] From d3725d6ae1f7af84cae9380f63b829c69e84189e Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 26 Nov 2024 19:42:36 +0100 Subject: [PATCH 6/7] Disable more --- .forgejo/workflows/push.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml index 602897f..5aff65b 100644 --- a/.forgejo/workflows/push.yaml +++ b/.forgejo/workflows/push.yaml @@ -75,10 +75,10 @@ jobs: chip: - name: lolin_s3_mini version: esp32s3 - - name: btclock_rev_b - version: esp32s3 - - name: btclock_v8 - version: esp32s3 + # - name: btclock_rev_b + # version: esp32s3 + # - name: btclock_v8 + # version: esp32s3 epd_variant: [213epd, 29epd] exclude: - chip: {name: btclock_rev_b, version: esp32s3} From 684cd7e05cc832cc15ee2ac87b12af209433b1a5 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 26 Nov 2024 19:58:10 +0100 Subject: [PATCH 7/7] Restore all variants --- .forgejo/workflows/push.yaml | 12 ++++++------ platformio.ini | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml index 5aff65b..86c0ed6 100644 --- a/.forgejo/workflows/push.yaml +++ b/.forgejo/workflows/push.yaml @@ -75,10 +75,10 @@ jobs: chip: - name: lolin_s3_mini version: esp32s3 - # - name: btclock_rev_b - # version: esp32s3 - # - name: btclock_v8 - # version: esp32s3 + - name: btclock_rev_b + version: esp32s3 + - name: btclock_v8 + version: esp32s3 epd_variant: [213epd, 29epd] exclude: - chip: {name: btclock_rev_b, version: esp32s3} @@ -161,7 +161,7 @@ jobs: - name: Create release uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0 with: - url: 'https://git.btclock.dev/' + url: 'https://git.btclock.dev' repo: '${{ github.repository }}' direction: upload tag: '${{ github.ref_name }}' @@ -169,6 +169,6 @@ jobs: release-dir: release token: ${{ secrets.TOKEN }} override: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }} - verbose: false + verbose: ${{ vars.VERBOSE || "false" }} prerelease: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }} release-notes-assistant: false \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 28ccda0..25e7d9c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] data_dir = data/build_gz -default_envs = lolin_s3_mini_213epd, lolin_s3_mini_29epd +default_envs = lolin_s3_mini_213epd, lolin_s3_mini_29epd, btclock_rev_b_213epd, btclock_v8_213epd [env]