Add subscriptions getter and resubscribe on connection #75
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: ESP32 CI | |
| on: | |
| push: | |
| pull_request: | |
| jobs: | |
| unit-tests: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.11' | |
| - name: Install PlatformIO | |
| run: python -m pip install platformio==6.1.18 | |
| - name: Check ESP32-only source tree | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| test ! -e src/esp8266 | |
| test ! -e src/picow | |
| test ! -e src/unor4 | |
| test ! -e examples/ArduinoESP8266TestNip01 | |
| test ! -e examples/ArduinoRaspberryPiPicoWTestNip01 | |
| test ! -e examples/ArduinoUnoR4TestNip01 | |
| test -f src/uBitcoin/src/Bitcoin.h | |
| test "$(git -C src/uBitcoin rev-parse HEAD)" = "877542fdc16319dd92a7d2a679ea9dacce474bd2" | |
| test "$(git ls-files --stage src/uBitcoin | awk '{print $1}')" = "160000" | |
| grep -F '#include "../uBitcoin/src/Bitcoin.h"' src/crypto/UBitcoinBackend.cpp | |
| test ! -e src/crypto/libsecp256k1 | |
| test ! -e src/crypto/Secp256k1Backend.cpp | |
| if grep -RInE --exclude-dir=uBitcoin --exclude=UBitcoinBackend.cpp 'Hash\.h|Bitcoin\.h' src; then | |
| echo 'uBitcoin must only be called through UBitcoinBackend' >&2 | |
| exit 1 | |
| fi | |
| if grep -RInE '(^|[^[:alnum:]_])(byte|uint8_t|char)[[:space:]]+[A-Za-z_][A-Za-z0-9_]*\[[[:space:]]*(byteSize|messageSize|contentLength|encodedSize|length|NostrString_length)' src examples; then | |
| echo 'VLA-like declaration found' >&2 | |
| exit 1 | |
| fi | |
| test "$(grep -Ec '^\[env:ESP32' platformio.ini)" -eq 4 | |
| - name: Check release metadata | |
| run: | | |
| python - <<'PY' | |
| import json | |
| from pathlib import Path | |
| metadata = json.loads(Path("library.json").read_text()) | |
| properties = dict(line.split("=", 1) for line in Path("library.properties").read_text().splitlines() if "=" in line) | |
| assert metadata["version"] == properties["version"] == "2.0.0" | |
| assert metadata["platforms"] == "espressif32" | |
| assert "uBitcoin" not in metadata["dependencies"] | |
| assert "uBitcoin" not in properties["depends"] | |
| assert "uBitcoin@" not in Path("platformio.ini").read_text() | |
| PY | |
| - name: Install Espressif QEMU dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libgcrypt20 libglib2.0-0 libpixman-1-0 libsdl2-2.0-0 libslirp0 | |
| - name: Install Espressif QEMU | |
| env: | |
| QEMU_RELEASE: esp-develop-9.2.2-20260417 | |
| QEMU_ASSET: qemu-xtensa-softmmu-esp_develop_9.2.2_20260417-x86_64-linux-gnu.tar.xz | |
| QEMU_SHA256: 0eecb2a34a5586c0e59110f77b9343b7b336e82fdb0e1a30e1dc1bab8a547e35 | |
| run: | | |
| set -euo pipefail | |
| qemu_root="$RUNNER_TEMP/espressif-qemu" | |
| mkdir -p "$qemu_root" | |
| curl --fail --location --silent --show-error --output "$qemu_root/$QEMU_ASSET" \ | |
| "https://github.com/espressif/qemu/releases/download/$QEMU_RELEASE/$QEMU_ASSET" | |
| printf '%s %s\n' "$QEMU_SHA256" "$qemu_root/$QEMU_ASSET" | sha256sum --check | |
| tar -xJf "$qemu_root/$QEMU_ASSET" -C "$qemu_root" | |
| echo "$qemu_root/qemu/bin" >> "$GITHUB_PATH" | |
| - name: ESP32 QEMU unit tests | |
| env: | |
| UNIT_TEST_EMULATOR: qemu | |
| UNIT_TEST_RESULTS_FILE: ${{ runner.temp }}/unit-test-results.tsv | |
| UNIT_TEST_OUTPUT_FILE: ${{ runner.temp }}/unit-test-output.log | |
| run: bash tests/unit/run.sh | |
| - name: Compile ESP32 examples | |
| if: always() | |
| shell: bash | |
| env: | |
| EXAMPLE_RESULTS_FILE: ${{ runner.temp }}/example-results.tsv | |
| run: | | |
| set -uo pipefail | |
| : > "$EXAMPLE_RESULTS_FILE" | |
| example_build_failed=0 | |
| while IFS= read -r example_environment; do | |
| if pio run -e "$example_environment"; then | |
| example_compiled="OK" | |
| else | |
| example_compiled="FALSE" | |
| example_build_failed=1 | |
| fi | |
| printf '%s\t%s\n' "$example_environment" "$example_compiled" >> "$EXAMPLE_RESULTS_FILE" | |
| done < <(sed -nE 's/^\[env:(ESP32[^]]*)\]$/\1/p' platformio.ini) | |
| exit "$example_build_failed" | |
| - name: Publish test and example summary | |
| if: always() | |
| env: | |
| UNIT_TEST_RESULTS_FILE: ${{ runner.temp }}/unit-test-results.tsv | |
| UNIT_TEST_OUTPUT_FILE: ${{ runner.temp }}/unit-test-output.log | |
| EXAMPLE_RESULTS_FILE: ${{ runner.temp }}/example-results.tsv | |
| run: python .github/scripts/write_ci_summary.py |