name: CI
on: [pull_request, push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v1
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- uses: actions/setup-python@v1
with:
python-version: '3.7'
- name: Run unit and system tests
run: cargo test --verbose
- name: Install Python dependencies
run: python -m pip install -r dev-requirements.txt
- name: Run `main.rs` tests
run: python -m pytest test_main.py
coverage:
runs-on: ubuntu-latest
needs: test
env:
CARGO_TARGET_DIR: target
steps:
- uses: actions/checkout@v1
- name: Get cargo-tarpaulin index
run: curl --output cargo-tarpaulin.index https://raw.githubusercontent.com/rust-lang/crates.io-index/master/ca/rg/cargo-tarpaulin
- uses: actions/cache@v1
name: Cache cargo build
with:
path: ${{ env.CARGO_TARGET_DIR }}
key: ${{ runner.os }}-cargo-tarpaulin-${{ hashFiles('cargo-tarpaulin.index') }}
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Install tools
run: cargo install cargo-tarpaulin
- name: Run coverage
run: cargo tarpaulin -v --out Xml
- uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
lint:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v1
- name: Install tools
run: rustup component add clippy
- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings
format-check:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v1
- uses: actions/setup-python@v1
with:
python-version: '3.7'
- name: Install tools
run: |
rustup component add rustfmt
python -m pip install black
- name: Run rustfmt
run: cargo fmt --all -- --check
- name: Run Black
run: python -m black --check --target-version py37 .
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Get cargo-audit index
run: curl --output cargo-audit.index https://raw.githubusercontent.com/rust-lang/crates.io-index/master/ca/rg/cargo-audit
- uses: actions/cache@v1
name: Check cache for cargo-audit
with:
path: ~/.cargo/cargo-audit
key: ${{ runner.os }}-cargo-audit-${{ hashFiles('cargo-audit.index') }}
- name: Install cargo-audit
shell: bash
run: "[ -e ~/.cargo/cargo-audit/bin/cargo-audit ] || cargo install --root ~/.cargo/cargo-audit cargo-audit"
- name: Audit
run: ~/.cargo/cargo-audit/bin/cargo-audit audit --deny-warnings