name: CI on: pull_request: push: branches: - master env: REQWEST_TEST_BODY_FULL: 1 RUST_BACKTRACE: 1 jobs: style: name: Check Style runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Install rust uses: actions-rs/toolchain@v1 with: toolchain: stable components: rustfmt profile: minimal override: true - name: cargo fmt -- --check uses: actions-rs/cargo@v1 with: command: fmt args: -- --check - name: temporary workaround - fmt all files under src # Workaround for rust-lang/cargo#7732 run: cargo fmt -- --check $(find . -name '*.rs' -print) build: name: ${{ matrix.name }} needs: [style] runs-on: ${{ matrix.os || 'ubuntu-latest' }} # The build matrix does not yet support 'allow failures' at job level. # See `jobs.nightly` for the active nightly job definition. strategy: matrix: name: - linux / stable - linux / beta # - linux / nightly - macOS / stable - windows / stable-x86_64-msvc - windows / stable-i686-msvc - windows / stable-x86_64-gnu - windows / stable-i686-gnu - "feat.: default-tls disabled" - "feat.: rustls-tls" - "feat.: rustls-tls-manual-roots" - "feat.: native-tls" - "feat.: default-tls and rustls-tls" - "feat.: cookies" - "feat.: blocking" - "feat.: gzip" - "feat.: brotli" - "feat.: json" - "feat.: multipart" - "feat.: stream" - "feat.: socks/default-tls" - "feat.: socks/rustls-tls" - "feat.: trust-dns" include: - name: linux / stable test-features: "--features __internal_proxy_sys_no_cache" - name: linux / beta rust: beta test-features: "--features __internal_proxy_sys_no_cache" # - name: linux / nightly # rust: nightly # test-features: "--features __internal_proxy_sys_no_cache" - name: macOS / stable os: macOS-latest test-features: "--features __internal_proxy_sys_no_cache" - name: windows / stable-x86_64-msvc os: windows-latest target: x86_64-pc-windows-msvc features: "--features blocking,gzip,brotli,json,multipart" - name: windows / stable-i686-msvc os: windows-latest target: i686-pc-windows-msvc features: "--features blocking,gzip,brotli,json,multipart" - name: windows / stable-x86_64-gnu os: windows-latest rust: stable-x86_64-pc-windows-gnu target: x86_64-pc-windows-gnu features: "--features blocking,gzip,brotli,json,multipart" - name: windows / stable-i686-gnu os: windows-latest rust: stable-i686-pc-windows-gnu target: i686-pc-windows-gnu features: "--features blocking,gzip,brotli,json,multipart" - name: "feat.: default-tls disabled" features: "--no-default-features" - name: "feat.: rustls-tls" features: "--no-default-features --features rustls-tls" - name: "feat.: rustls-tls-manual-roots" features: "--no-default-features --features rustls-tls-manual-roots" - name: "feat.: native-tls" features: "--features native-tls" - name: "feat.: default-tls and rustls-tls" features: "--features rustls-tls" - name: "feat.: cookies" features: "--features cookies" - name: "feat.: blocking" features: "--features blocking" - name: "feat.: gzip" features: "--features gzip" - name: "feat.: brotli" features: "--features brotli" - name: "feat.: json" features: "--features json" - name: "feat.: multipart" features: "--features multipart" - name: "feat.: stream" features: "--features stream" - name: "feat.: socks/default-tls" features: "--features socks" - name: "feat.: socks/rustls-tls" features: "--features socks,rustls-tls" - name: "feat.: trust-dns" features: "--features trust-dns" steps: - name: Checkout uses: actions/checkout@v1 - name: Install rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust || 'stable' }} target: ${{ matrix.target }} profile: minimal override: true - name: Build uses: actions-rs/cargo@v1 with: command: build args: ${{ matrix.features }} - name: Test uses: actions-rs/cargo@v1 with: command: test args: ${{ matrix.features }} ${{ matrix.test-features }} -- --test-threads=1 docs: name: Docs runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true - name: Check documentation env: RUSTDOCFLAGS: -D warnings uses: actions-rs/cargo@v1 with: command: doc args: --no-deps --document-private-items --all-features # Separate build job for nightly because of the missing feature for allowed failures at # job level. See `jobs.build.strategy.matrix`. nightly: name: linux / nightly needs: [style] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Install rust uses: actions-rs/toolchain@v1 with: toolchain: nightly profile: minimal override: true - name: Build uses: actions-rs/cargo@v1 with: command: build - name: Test uses: actions-rs/cargo@v1 with: command: test args: --features __internal_proxy_sys_no_cache -- --test-threads=1 - name: Check minimal versions run: | cargo clean cargo update -Z minimal-versions cargo check cargo check --all-features minversion: name: Minimum version ${{ matrix.rust }} needs: [style] runs-on: ubuntu-latest strategy: matrix: rust: [1.46.0] steps: - name: Checkout uses: actions/checkout@v1 - name: Install rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} profile: minimal override: true - name: Check uses: actions-rs/cargo@v1 with: command: check android: name: Android needs: [style] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Install rust uses: actions-rs/toolchain@v1 with: toolchain: stable target: aarch64-linux-android profile: minimal override: true - name: Build uses: actions-rs/cargo@v1 with: use-cross: true command: build # disable default-tls feature since cross-compiling openssl is dragons args: --target aarch64-linux-android --no-default-features wasm: name: WASM needs: [style] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Install rust uses: actions-rs/toolchain@v1 with: toolchain: stable target: wasm32-unknown-unknown profile: minimal override: true - name: Check uses: actions-rs/cargo@v1 with: command: check args: --target wasm32-unknown-unknown - name: Install wasm-pack run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - name: Wasm-pack test firefox run: wasm-pack test --headless --firefox - name: Wasm-pack test chrome run: wasm-pack test --headless --chrome