Don't require the user to have psql installed #867
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: | |
- root-chapter-08 | |
pull_request: | |
types: [opened, synchronize, reopened] | |
branches: | |
- root-chapter-08 | |
env: | |
CARGO_TERM_COLOR: always | |
SQLX_VERSION: 0.8.0 | |
SQLX_FEATURES: "rustls,postgres" | |
jobs: | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
# Docker Hub image | |
image: postgres:14 | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: password | |
POSTGRES_DB: postgres | |
ports: | |
- 5432:5432 | |
steps: | |
# Downloads a copy of the code in your repository before running CI tests | |
- name: Check out repository code | |
# The uses keyword specifies that this step will run v3 of the actions/checkout action. | |
# This is an action that checks out your repository onto the runner, allowing you to run scripts or other actions against your code (such as build and test tools). | |
# You should use the checkout action any time your workflow will run against the repository's code. | |
uses: actions/checkout@v3 | |
# This GitHub Action installs a Rust toolchain using rustup. It is designed for one-line concise usage and good defaults. | |
- name: Install the Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
# A GitHub Action that implements smart caching for rust/cargo projects with sensible defaults. | |
- name: Rust Cache Action | |
uses: Swatinem/rust-cache@v2 | |
with: | |
key: sqlx-${{ env.SQLX_VERSION }} | |
- name: Install sqlx-cli | |
run: | |
cargo install sqlx-cli | |
--version=${{ env.SQLX_VERSION }} | |
--features ${{ env.SQLX_FEATURES }} | |
--no-default-features | |
--locked | |
# The --locked flag can be used to force Cargo to use the packaged Cargo.lock file if it is available. | |
# This may be useful for ensuring reproducible builds, to use the exact same set of dependencies that were available when the package was published. | |
# It may also be useful if a newer version of a dependency is published that no longer builds on your system, or has other problems | |
- 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 --workspace --check | |
- name: Run tests | |
run: cargo test | |
fmt: | |
name: Rustfmt | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt | |
- name: Enforce formatting | |
run: cargo fmt --check | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: postgres:14 | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: password | |
POSTGRES_DB: postgres | |
ports: | |
- 5432:5432 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: clippy | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: sqlx-${{ env.SQLX_VERSION }} | |
- name: Install sqlx-cli | |
run: cargo install sqlx-cli | |
--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: Linting | |
run: cargo clippy -- -D warnings | |
coverage: | |
name: Code coverage | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: postgres:14 | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: password | |
POSTGRES_DB: postgres | |
ports: | |
- 5432:5432 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: sqlx-${{ env.SQLX_VERSION }} | |
- name: Install tarpaulin | |
run: cargo install cargo-tarpaulin | |
- name: Install sqlx-cli | |
run: cargo install sqlx-cli | |
--version=${{ env.SQLX_VERSION }} | |
--features ${{ env.SQLX_FEATURES }} | |
--no-default-features | |
--locked | |
- name: Migrate database | |
run: SKIP_DOCKER=true ./scripts/init_db.sh | |
- name: Generate code coverage | |
run: cargo tarpaulin --verbose --workspace |