Use GitHub CLI for release uploads #16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build DSi Wi-Fi Manager | |
| on: | |
| push: | |
| branches: ["*"] | |
| paths-ignore: | |
| - 'README.md' | |
| pull_request: | |
| branches: ["*"] | |
| paths-ignore: | |
| - 'README.md' | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| name: Offline test suite | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v7.0.1 | |
| - name: Build the fixture and run the suite | |
| # The real dumps are not in the repository, so CI runs against the synthetic flash | |
| # only. That still covers the decoder, the backup round trip, every malformed-file | |
| # refusal, restore into every slot, and the screen widths. | |
| run: | | |
| python3 tools/make_fixture.py build/fixture.bin | |
| python3 tools/crosscheck.py build/fixture.bin | |
| build-wrapper: | |
| runs-on: ubuntu-latest | |
| name: Build through documented wrapper | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v7.0.1 | |
| - name: Build with build.sh | |
| run: ./build.sh build | |
| - name: Fail on any compiler warning | |
| run: | | |
| if grep -qi "warning" build.log; then | |
| echo "::error::compiler warnings in build.log" | |
| grep -i warning build.log | |
| exit 1 | |
| fi | |
| echo "no warnings" | |
| build: | |
| runs-on: ubuntu-latest | |
| container: skylyrac/blocksds:slim-latest | |
| env: | |
| BLOCKSDS: /opt/wonderful/thirdparty/blocksds/core | |
| name: Build with BlocksDS toolchain using official Docker image | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v7.0.1 | |
| - name: Build app | |
| id: build | |
| # The Makefile builds the output name from the kind and the commit, so that is all this | |
| # passes. Nothing from the branch or PR title reaches a shell recipe, which is why | |
| # there is no whitelisting step here. | |
| run: | | |
| # No pipefail: the container's shell is dash, which does not have it, and `make | tee` | |
| # would then report tee's status and a broken build would look clean. Redirecting and | |
| # replaying the log keeps make's own exit status without needing bash. | |
| make DSIWIFI_BUILD_KIND=Nightly DSIWIFI_COMMIT=$(echo "${{ github.sha }}" | cut -c1-7) > build.log 2>&1 || { cat build.log; echo "::error::build failed"; exit 1; } | |
| cat build.log | |
| - name: Check this really is a debug build | |
| # Nightlies are for testing, so the flash-layout screen and the forced no-op write must | |
| # be present. Read back out of build.log rather than assumed from the build kind: the | |
| # two are derived in the Makefile and this is what proves the derivation held. | |
| run: | | |
| grep -q "kind=Nightly debug=1" build.log || { | |
| echo "::error::nightly is not a debug build"; grep "BUILD kind=" build.log; exit 1; } | |
| echo "debug build confirmed" | |
| - name: Fail on any compiler warning | |
| # This app writes to firmware flash, and a truncation warning is how a silently cut | |
| # SSID reaches a screen. The log has to be captured in the build step above for this | |
| # to have anything to read -- `make` alone writes no build.log, only ./build.sh does. | |
| run: | | |
| if grep -qi "warning" build.log; then | |
| echo "::error::compiler warnings in build.log" | |
| grep -i warning build.log | |
| exit 1 | |
| fi | |
| echo "no warnings" | |
| - name: Publish build to GH Actions | |
| uses: actions/upload-artifact@v7.0.1 | |
| with: | |
| # The commit stays in the filename so a downloaded nightly identifies itself. | |
| path: dsi_wifi_manager-*.dsi | |
| name: dsi_wifi_manager-nightly-${{ github.sha }} | |
| if-no-files-found: error | |
| retention-days: 14 |