name: Rust on: push: branches: [ main ] pull_request: types: [opened, reopened, synchronize] env: CARGO_TERM_COLOR: always jobs: pre_job: continue-on-error: true runs-on: ubuntu-latest # Map a step output to a job output outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check uses: fkirc/skip-duplicate-actions@master with: concurrent_skipping: 'never' skip_after_successful_duplicate: 'true' paths_ignore: '["**/*.md", "**/docs/**", "example_configs/**", "*.sh"]' do_not_skip: '["workflow_dispatch", "schedule"]' test: name: cargo test needs: pre_job if: ${{ needs.pre_job.outputs.should_skip != 'true' }} runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - uses: Swatinem/rust-cache@v1 - name: Build run: cargo build --verbose --workspace - name: Run tests run: cargo test --verbose --workspace - name: Generate GraphQL schema run: cargo run -- export_graphql_schema -o generated_schema.graphql - name: Check schema run: diff schema.graphql generated_schema.graphql || (echo "The schema file is out of date. Please run `./export_schema.sh`" && false) clippy: name: cargo clippy needs: pre_job if: ${{ needs.pre_job.outputs.should_skip != 'true' }} runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Install nightly toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true components: rustfmt, clippy - uses: Swatinem/rust-cache@v1 - name: Run cargo clippy uses: actions-rs/cargo@v1 with: command: clippy args: --tests --all -- -D warnings format: name: cargo fmt needs: pre_job if: ${{ needs.pre_job.outputs.should_skip != 'true' }} runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Install nightly toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true components: rustfmt, clippy - uses: Swatinem/rust-cache@v1 - name: Run cargo fmt uses: actions-rs/cargo@v1 with: command: fmt args: --all -- --check coverage: name: Code coverage needs: pre_job runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v3 - name: Install Rust run: rustup toolchain install nightly --component llvm-tools-preview - name: Install cargo-llvm-cov run: curl -LsSf https://github.com/taiki-e/cargo-llvm-cov/releases/latest/download/cargo-llvm-cov-x86_64-unknown-linux-gnu.tar.gz | tar xzf - -C ~/.cargo/bin - uses: Swatinem/rust-cache@v1 - name: clean run: cargo llvm-cov clean --workspace - name: Generate code coverage for unit test run: cargo llvm-cov --workspace --no-report - name: Aggregate reports run: cargo llvm-cov --no-run --lcov --output-path lcov.info - name: Upload coverage to Codecov uses: codecov/codecov-action@v2.1.0 with: files: lcov.info fail_ci_if_error: true