From a81dd4a1ebff281cd81698f648eda5c7b45ee670 Mon Sep 17 00:00:00 2001 From: Yago Iglesias Date: Sun, 27 Aug 2023 11:57:49 +0200 Subject: [PATCH] feat(.github/workflows/general.yml): add postgressql --- .github/workflows/general.yml | 118 +++++++++++++++++++++++++++++++--- 1 file changed, 109 insertions(+), 9 deletions(-) diff --git a/.github/workflows/general.yml b/.github/workflows/general.yml index ca7a996..c0c1eb0 100644 --- a/.github/workflows/general.yml +++ b/.github/workflows/general.yml @@ -3,19 +3,74 @@ name: Rust on: [push, pull_request] env: - CARGO_TERM_COLOR: always + CARGO_TERM_COLOR: always + SQLX_VERSION: 0.6.2 + SQLX_FEATURES: "rustls,postgres" +# A workflow run is made up of one or more jobs, which run in parallel by default +# Each job runs in a runner environment specified by runs-on jobs: + # Unique identifier of our job (`job_id`) test: + # Sets the name `Test` for the job, which is displayed in the GitHub UI name: Test + # Containers must run in Linux based operating systems runs-on: ubuntu-latest + # Service containers to run with the `test` container job + services: + # Label used to access the service container + postgres: + # Docker Hub image + image: postgres:14 + # Environment variables scoped only for the `postgres` element + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + POSTGRES_DB: postgres + # When you map ports using the ports keyword, GitHub uses the --publish command to publish the container’s ports to the Docker host + # Opens tcp port 5432 on the host and service container + ports: + - 5432:5432 steps: - - uses: actions/checkout@v3 - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 + # 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: + # An additional cache key that is added alongside the automatic `job`-based cache key and can be used to further differentiate jobs. default: empty + 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: Install postgresql-client + run: sudo apt-get update && sudo apt-get install postgresql-client -y + + - name: Migrate database + run: SKIP_DOCKER=true ./scripts/init_db.sh + - name: Run tests run: cargo test + # `fmt` container job fmt: name: Rustfmt runs-on: ubuntu-latest @@ -23,31 +78,76 @@ jobs: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: + # Specific to dtolnay/rust-toolchain: Comma-separated string of additional components to install components: rustfmt - name: Enforce formatting run: cargo fmt --check + # `clippy` container job 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: Install postgresql-client + run: sudo apt-get update && sudo apt-get install postgresql-client -y + - name: Migrate database + run: SKIP_DOCKER=true ./scripts/init_db.sh - name: Linting run: cargo clippy -- -D warnings + # `coverage` container job coverage: name: Code coverage runs-on: ubuntu-latest - container: - image: xd009642/tarpaulin - options: --security-opt seccomp=unconfined + 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 + - name: Install postgresql-client + run: sudo apt-get update && sudo apt-get install postgresql-client -y + - 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: SKIP_DOCKER=true ./scripts/init_db.sh - name: Generate code coverage - run: | - cargo tarpaulin --verbose --workspace + run: cargo install cargo-tarpaulin && cargo tarpaulin --verbose --workspace