name: Build revive-wasm on: push: branches: ["main"] pull_request: branches: ["main"] workflow_dispatch: env: CARGO_TERM_COLOR: always REVIVE_WASM_INSTALL_DIR: ${{ github.workspace }}/target/wasm32-unknown-emscripten/release BUN_VERSION: 1.1.43 jobs: build-revive-wasm: runs-on: parity-large defaults: run: shell: bash steps: - uses: actions/checkout@v4 - name: Cache LLVM build id: cache-llvm uses: actions/cache@v3 with: path: | target-llvm/emscripten/target-final target-llvm/gnu/target-final # Use a unique key based on LLVM version or configuration files to avoid cache invalidation key: llvm-build-${{ runner.os }}-${{ hashFiles('LLVM.lock', 'Cargo.toml', 'Cargo.lock', 'crates/llvm-builder/**', '.github/workflows/build-revive-wasm.yml') }} - name: Install system dependencies run: | sudo apt-get update && sudo apt-get install -y cmake ninja-build curl git libssl-dev pkg-config clang lld - name: Install Rust stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable components: rust-src target: wasm32-unknown-emscripten - name: Install LLVM build dependencies run: | make install-llvm-builder revive-llvm --target-env emscripten clone - name: Setup revive environment variables run: | echo "LLVM_SYS_181_PREFIX=$(pwd)/target-llvm/gnu/target-final" >> $GITHUB_ENV echo "REVIVE_LLVM_TARGET_PREFIX=$(pwd)/target-llvm/emscripten/target-final" >> $GITHUB_ENV - name: Build host LLVM if: steps.cache-llvm.outputs.cache-hit != 'true' run: | revive-llvm build - name: Build target LLVM if: steps.cache-llvm.outputs.cache-hit != 'true' run: | source emsdk/emsdk_env.sh revive-llvm --target-env emscripten build - run: | rustup show cargo --version rustup +nightly show cargo +nightly --version cmake --version bash --version - name: Use Cached LLVM if: steps.cache-llvm.outputs.cache-hit == 'true' run: | echo "Using cached LLVM" - name: Build revive run: | source emsdk/emsdk_env.sh make install-wasm - uses: actions/upload-artifact@v4 with: name: revive-wasm path: | ${{ env.REVIVE_WASM_INSTALL_DIR }}/resolc.js ${{ env.REVIVE_WASM_INSTALL_DIR }}/resolc.wasm retention-days: 1 test-revive-wasm: needs: build-revive-wasm strategy: matrix: os: ["ubuntu-24.04", "macos-14", "windows-2022"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Create Target Directory run: mkdir -p ${{ env.REVIVE_WASM_INSTALL_DIR }} - name: Download Artifact uses: actions/download-artifact@v4 with: name: revive-wasm path: ${{ env.REVIVE_WASM_INSTALL_DIR }} - name: Set Up Node.js uses: actions/setup-node@v3 with: node-version: "20" - name: Install Bun on Windows if: runner.os == 'Windows' run: | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser iex (new-object net.webclient).downloadstring('https://get.scoop.sh') scoop install bun@${{ env.BUN_VERSION }} scoop install wget Join-Path (Resolve-Path ~).Path "scoop\shims" >> $Env:GITHUB_PATH - name: Install Bun on macOS and Linux if: runner.os != 'Windows' run: | curl -fsSL https://bun.sh/install | bash -s bun-v${{ env.BUN_VERSION }} echo "$HOME/.bun/bin" >> $GITHUB_PATH - name: Install packages run: npm install - name: Run Playwright tests run: | cd js npx playwright install --with-deps npx playwright test - name: Test revive run: | echo "Running tests for ${{ matrix.os }}" npm run test:wasm