name: Build Solo Sim (WASM) # Builds the companion_radio browser sim (real firmware compiled to WASM via # Emscripten, see variants/sim/) and attaches it to the same draft release # build-solo-firmwares.yml creates for this tag, as a single fixed-name # asset: solo-sim-wasm.zip. Fixed name (no version in it) so # meshcore-solo-site's server-side deploy script can always fetch it from # the stable "latest release" download URL without knowing the tag -- # see meshcore-solo-site/scripts/fetch-wasm-release.sh. # # Independent job/workflow from the hardware firmware builds: different # toolchain (Emscripten, not PlatformIO), and a WASM build failure shouldn't # block or delay the actual firmware release. permissions: contents: write on: workflow_dispatch: push: tags: - 'v*' jobs: build-sim-wasm: runs-on: ubuntu-latest steps: - name: Clone Repo uses: actions/checkout@v4 - name: Cache emsdk uses: actions/cache@v4 with: path: variants/sim/tools/emsdk key: emsdk-6.0.9-${{ runner.os }} - name: Install emsdk 6.0.9 run: | if [ ! -x variants/sim/tools/emsdk/upstream/emscripten/em++ ]; then rm -rf variants/sim/tools/emsdk git clone --depth 1 https://github.com/emscripten-core/emsdk.git variants/sim/tools/emsdk cd variants/sim/tools/emsdk python3 ./emsdk.py install 6.0.9 python3 ./emsdk.py activate 6.0.9 else echo "emsdk 6.0.9 already cached" fi - name: Build companion WASM run: variants/sim/build_wasm.sh - name: Build repeater WASM run: variants/sim/build_wasm_repeater.sh - name: Package run: | mkdir -p out/wasm/companion out/wasm/repeater cp variants/sim/web/build/meshcore_sim.js variants/sim/web/build/meshcore_sim.wasm out/wasm/companion/ cp variants/sim/web/build/repeater/meshcore_sim_repeater.js variants/sim/web/build/repeater/meshcore_sim_repeater.wasm out/wasm/repeater/ cd out && zip -r solo-sim-wasm.zip wasm - name: Attach to release if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: draft: true files: out/solo-sim-wasm.zip