Workflow update #527
Workflow file for this run
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: Build-Rust | |
on: | |
push: | |
branches: [ "main", "backend" ] | |
paths: | |
- "backend/**" | |
pull_request: | |
branches: [ "main", "backend" ] | |
paths: | |
- "backend/**" | |
workflow_dispatch: | |
env: | |
CARGO_TERM_COLOR: always | |
DATABASE_URL: "postgres://postgres:password@postgres/mensa_app" | |
FLICKR_API_KEY: ${{ secrets.FLICKR_PUBLIC_KEY }} | |
SMTP_SERVER: ${{ vars.SMTP_SERVER }} | |
SMTP_PORT: ${{ vars.SMTP_PORT }} | |
SMTP_USERNAME: ${{ vars.SMTP_USERNAME }} | |
SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }} | |
ADMIN_EMAIL: ${{ vars.ADMIN_EMAIL }} | |
GOOGLE_CLIENT_JSON_BASE64: ${{ secrets.GOOGLE_CLIENT_JSON_BASE64 }} | |
GOOGLE_PROJECT_ID: ${{ vars.GOOGLE_PROJECT_ID }} | |
jobs: | |
build_rust: | |
runs-on: ubuntu-latest | |
needs: [build, test, coverage] | |
steps: | |
- name: Print success | |
run: | | |
echo "Building, testing and coverage succeeded!" | |
build: | |
runs-on: ubuntu-latest | |
container: rust:latest | |
defaults: | |
run: | |
working-directory: ./backend | |
services: | |
postgres: | |
image: postgres | |
env: | |
POSTGRES_PASSWORD: password | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
steps: | |
- uses: actions/checkout@v4 | |
- run: rustup toolchain install stable --profile minimal | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: "build" | |
- name: Check formatting | |
run: | | |
rustup component add rustfmt | |
cargo fmt --check | |
- name: Setup database | |
run: | | |
cargo install sqlx-cli --no-default-features --features native-tls,postgres | |
cargo sqlx database setup | |
- name: Check prepared sql query information | |
run: cargo sqlx prepare --check | |
- name: Check docs | |
run: RUSTDOCFLAGS="-D warnings" cargo doc --no-deps | |
- name: Build | |
run: cargo build --verbose | |
- name: Check linter warnings | |
run: | | |
rustup component add clippy | |
cargo clippy --all-targets -- -D warnings | |
test: | |
runs-on: ubuntu-latest | |
container: rust:latest | |
defaults: | |
run: | |
working-directory: ./backend | |
services: | |
postgres: | |
image: postgres | |
env: | |
POSTGRES_PASSWORD: password | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
steps: | |
- uses: actions/checkout@v4 | |
- run: rustup toolchain install stable --profile minimal | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: "test" | |
- name: Setup database | |
run: | | |
cargo install sqlx-cli --no-default-features --features native-tls,postgres | |
cargo sqlx database setup | |
- name: Prepare secret file | |
run: | | |
echo "$GOOGLE_CLIENT_JSON_BASE64" >> secret.base64 | |
base64 --decode secret.base64 > secret.json | |
echo "SERVICE_ACCOUNT_JSON=$(realpath secret.json)" >> $GITHUB_ENV | |
- name: Run tests | |
run: cargo test --verbose | |
coverage: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./backend | |
container: | |
image: xd009642/tarpaulin:develop-nightly | |
options: --security-opt seccomp=unconfined | |
services: | |
postgres: | |
image: postgres | |
env: | |
POSTGRES_PASSWORD: password | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
steps: | |
- uses: actions/checkout@v4 | |
- run: rustup toolchain install stable --profile minimal | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: "coverage" | |
- name: Setup database | |
run: | | |
cargo install sqlx-cli --no-default-features --features native-tls,postgres | |
cargo sqlx database setup | |
- name: Prepare secret file | |
run: | | |
echo "$GOOGLE_CLIENT_JSON_BASE64" >> secret.base64 | |
base64 --decode secret.base64 > secret.json | |
echo "SERVICE_ACCOUNT_JSON=$(realpath secret.json)" >> $GITHUB_ENV | |
- name: Generate code coverage | |
run: | | |
cargo tarpaulin --all-targets --skip-clean --workspace --timeout 120 --out xml | |
- name: Upload to codecov.io | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{secrets.CODECOV_TOKEN}} | |
fail_ci_if_error: true |