diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..94b1b77 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,122 @@ +name: Test + +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + CARGO_TERM_COLOR: always + +jobs: + browser-test: + name: Test on ${{ matrix.browser }} (using rustc ${{ matrix.rust }}) + runs-on: ${{ matrix.os }} + strategy: + matrix: + rust: + - 1.63.0 + - stable + - nightly + browser: + - firefox + - chrome + os: + - ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Setup Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + override: true + + - name: Install wasm-pack + run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + + - name: Cargo generate-lockfile + run: cargo generate-lockfile + + - name: Cargo cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }} + + - name: Run headless browser tests with default features + run: wasm-pack test --${{ matrix.browser }} --headless + + - name: Run headless browser tests with all features + run: wasm-pack test --${{ matrix.browser }} --headless --all-features + + clippy: + name: Clippy + runs-on: ubuntu-latest + env: + RUSTFLAGS: -Dwarnings + + steps: + - uses: actions/checkout@v2 + + - name: Setup Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Cargo generate-lockfile + run: cargo generate-lockfile + + - name: Cargo cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - name: Run clippy + run: cargo clippy + + miri: + name: Miri + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Install Miri + run: | + MIRI_NIGHTLY=nightly-$(curl -s https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/miri) + echo "Installing latest nightly with Miri: $MIRI_NIGHTLY" + rustup set profile minimal + rustup default "$MIRI_NIGHTLY" + rustup component add miri + - name: Cargo generate-lockfile + run: cargo generate-lockfile + + - name: Cargo cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - name: Run tests with all features + run: | + cargo miri test --all-features