name: Rust on: push: # Run jobs when commits are pushed to # master or release-like branches: branches: - master pull_request: # Run jobs for any external PR that wants # to merge to master, too: branches: - master concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true env: CARGO_TERM_COLOR: always # TODO: Currently pointing at latest substrate; is there a suitable binary we can pin to here? SUBSTRATE_URL: https://releases.parity.io/substrate/x86_64-debian:stretch/latest/substrate/substrate jobs: build: name: Cargo check runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Download Substrate run: | curl $SUBSTRATE_URL --output substrate --location chmod +x substrate ./substrate --version mkdir -p ~/.local/bin mv substrate ~/.local/bin - name: Install Rust stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Rust Cache uses: Swatinem/rust-cache@2656b87321093db1cb55fbd73183d195214fdfd1 # v2.5.0 - name: Install cargo-hack uses: baptiste0928/cargo-install@v2 with: crate: cargo-hack version: 0.5 # A basic check over all targets together. This may lead to features being combined etc, # and doesn't test combinations of different features. - name: Cargo check all targets. run: cargo check --all-targets # Next, check subxt features. # - `native` feature must always be enabled # - `web` feature is always ignored. # - This means, don't check --no-default-features and don't try enabling --all-features; both will fail - name: Cargo hack; check each subxt feature run: cargo hack -p subxt --each-feature check --exclude-no-default-features --exclude-all-features --exclude-features web --features native # Subxt-signer has the "subxt" features enabled in the "check all targets" test. Run it on its own to # check it without. We can't enable subxt or web features here, so no cargo hack. - name: Cargo check subxt-signer run: cargo check -p subxt-signer # Next, check each other package in isolation. - name: Cargo hack; check each feature/crate on its own run: cargo hack --exclude subxt --exclude subxt-signer --exclude-all-features --each-feature check --workspace fmt: name: Cargo fmt runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Install Rust nightly toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true components: rustfmt - name: Rust Cache uses: Swatinem/rust-cache@2656b87321093db1cb55fbd73183d195214fdfd1 # v2.5.0 - name: Cargo fmt uses: actions-rs/cargo@v1.0.3 with: command: fmt args: --all -- --check docs: name: Check documentation and run doc tests runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Download Substrate run: | curl $SUBSTRATE_URL --output substrate --location chmod +x substrate ./substrate --version mkdir -p ~/.local/bin mv substrate ~/.local/bin - name: Install Rust stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Rust Cache uses: Swatinem/rust-cache@2656b87321093db1cb55fbd73183d195214fdfd1 # v2.5.0 - name: Check internal documentation links run: RUSTDOCFLAGS="--deny rustdoc::broken_intra_doc_links" cargo doc -vv --workspace --no-deps --document-private-items - name: Run cargo test on documentation uses: actions-rs/cargo@v1.0.3 with: command: test args: --doc nonwasm_tests: name: "Test non-wasm" runs-on: ubuntu-latest-16-cores steps: - name: Checkout sources uses: actions/checkout@v3 - name: Download Substrate run: | curl $SUBSTRATE_URL --output substrate --location chmod +x substrate ./substrate --version mkdir -p ~/.local/bin mv substrate ~/.local/bin - name: Install Rust stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Rust Cache uses: Swatinem/rust-cache@2656b87321093db1cb55fbd73183d195214fdfd1 # v2.5.0 - name: Install cargo-nextest run: cargo install cargo-nextest - name: Run tests uses: actions-rs/cargo@v1.0.3 with: command: nextest args: run --workspace nonwasm_light_client_tests: name: "Test Light Client" runs-on: ubuntu-latest-16-cores timeout-minutes: 15 steps: - name: Checkout sources uses: actions/checkout@v3 - name: Download Substrate run: | curl $SUBSTRATE_URL --output substrate --location chmod +x substrate ./substrate --version mkdir -p ~/.local/bin mv substrate ~/.local/bin - name: Install Rust stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Rust Cache uses: Swatinem/rust-cache@988c164c3d0e93c4dbab36aaf5bbeb77425b2894 # v2.4.0 - name: Run tests uses: actions-rs/cargo@v1.0.3 with: command: test args: --release --package integration-tests --features unstable-light-client clippy: name: Cargo clippy runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Download Substrate run: | curl $SUBSTRATE_URL --output substrate --location chmod +x substrate ./substrate --version mkdir -p ~/.local/bin mv substrate ~/.local/bin - name: Install Rust stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable components: clippy override: true - name: Rust Cache uses: Swatinem/rust-cache@2656b87321093db1cb55fbd73183d195214fdfd1 # v2.5.0 - name: Run clippy uses: actions-rs/cargo@v1 with: command: clippy args: --all-targets -- -D warnings wasm_tests: name: Test wasm runs-on: ubuntu-latest steps: - uses: actions/checkout@v3.1.0 - name: Install wasm-pack run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - name: Install firefox uses: browser-actions/setup-firefox@latest - name: Install chrome uses: browser-actions/setup-chrome@latest - name: Rust Cache uses: Swatinem/rust-cache@2656b87321093db1cb55fbd73183d195214fdfd1 # v2.5.0 - name: Download Substrate run: | curl $SUBSTRATE_URL --output substrate --location chmod +x substrate ./substrate --version mkdir -p ~/.local/bin mv substrate ~/.local/bin - name: Run subxt WASM tests run: | substrate --dev --tmp > /dev/null 2>&1 & wasm-pack test --headless --firefox wasm-pack test --headless --chrome pkill substrate working-directory: testing/wasm-tests - name: Run subxt-signer WASM tests run: | wasm-pack test --headless --firefox wasm-pack test --headless --chrome working-directory: signer/wasm-tests