name: Rust on: # NB: this differs from the book's project! # These settings allow us to run this specific CI pipeline for PRs against # this specific branch (a.k.a. book chapter). push: branches: - main pull_request: types: [ opened, synchronize, reopened ] branches: - main env: CARGO_TERM_COLOR: always jobs: test: name: Test runs-on: ubuntu-latest services: postgres: image: postgres:12 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: postgres ports: - 5432:5432 env: SQLX_VERSION: 0.5.7 SQLX_FEATURES: postgres steps: - name: Checkout repository uses: actions/checkout@v2 - name: Cache dependencies id: cache-dependencies uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Cache sqlx-cli uses: actions/cache@v2 id: cache-sqlx with: path: | ~/.cargo/bin/sqlx ~/.cargo/bin/cargo-sqlx key: ${{ runner.os }}-sqlx-${{ env.SQLX_VERSION }}-${{ env.SQLX_FEATURES }} - name: Install sqlx-cli uses: actions-rs/cargo@v1 if: steps.cache-sqlx.outputs.cache-hit == false with: command: install args: > sqlx-cli --force --version=${{ env.SQLX_VERSION }} --features=${{ env.SQLX_FEATURES }} --no-default-features --locked - name: Migrate database run: | sudo apt-get install libpq-dev -y SKIP_DOCKER=true ./scripts/init_db.sh - name: Check sqlx-data.json is up-to-date run: | cargo sqlx prepare --check -- --bin zero2prod - name: Run cargo test uses: actions-rs/cargo@v1 with: command: test fmt: name: Rustfmt runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: toolchain: stable override: true components: rustfmt - uses: actions-rs/cargo@v1 with: command: fmt args: --all -- --check clippy: name: Clippy runs-on: ubuntu-latest services: postgres: image: postgres:12 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: postgres ports: - 5432:5432 env: SQLX_VERSION: 0.5.7 SQLX_FEATURES: postgres steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable components: clippy override: true - name: Cache sqlx-cli uses: actions/cache@v2 id: cache-sqlx with: path: | ~/.cargo/bin/sqlx key: ${{ runner.os }}-sqlx-${{ env.SQLX_VERSION }}-${{ env.SQLX_FEATURES }} - name: Install sqlx-cli uses: actions-rs/cargo@v1 if: steps.cache-sqlx.outputs.cache-hit == false with: command: install args: > sqlx-cli --force --version=${{ env.SQLX_VERSION }} --features=${{ env.SQLX_FEATURES }} --no-default-features --locked - name: Migrate database run: | sudo apt-get install libpq-dev -y SKIP_DOCKER=true ./scripts/init_db.sh - name: Run clippy uses: actions-rs/clippy-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} args: -- -D warnings coverage: name: Code coverage runs-on: ubuntu-latest services: postgres: image: postgres:12 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: postgres ports: - 5432:5432 env: SQLX_VERSION: 0.5.7 SQLX_FEATURES: postgres steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: Cache sqlx-cli uses: actions/cache@v2 id: cache-sqlx with: path: | ~/.cargo/bin/sqlx key: ${{ runner.os }}-sqlx-${{ env.SQLX_VERSION }}-${{ env.SQLX_FEATURES }} - name: Install sqlx-cli uses: actions-rs/cargo@v1 if: steps.cache-sqlx.outputs.cache-hit == false with: command: install args: > sqlx-cli --force --version=${{ env.SQLX_VERSION }} --features=${{ env.SQLX_FEATURES }} --no-default-features --locked - name: Migrate database run: | sudo apt-get install libpq-dev -y SKIP_DOCKER=true ./scripts/init_db.sh - name: Run cargo-tarpaulin uses: actions-rs/tarpaulin@v0.1 with: args: '--ignore-tests --avoid-cfg-tarpaulin'