Feature/viewer 1392 sonar cloud issues on #198
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: Code Quality | |
on: | |
pull_request: | |
types: [opened, synchronize, reopened] | |
branches: | |
- "**" | |
- "!main" | |
env: | |
NODE_VERSION: "22.5.1" | |
RUST_VERSION: "1.82" | |
SQLX_OFFLINE: true | |
SQLX_VERSION: "0.8.2" | |
PGHOST: localhost # Overrides the default value in .env | |
jobs: | |
# add_review_links: | |
# runs-on: ubuntu-22.04 | |
# timeout-minutes: 3 | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - name: Add review links | |
# env: | |
# GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
# run: scripts/github_add_link_for_reviews.sh | |
dependency-review: | |
name: "Dependency Review" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Review Dependencies | |
uses: actions/dependency-review-action@v4 | |
with: | |
# Disable scorecard output for now, as the output may get too large otherwise, | |
# causing the action to fail. | |
show-openssf-scorecard: false | |
# Allow GHSA-qg5g-gv98-5ffh (https://github.com/advisories/GHSA-qg5g-gv98-5ffh) | |
# Very recently found as of now (2024-11-26). | |
# Affects the Rust crate `rustls`, which is in use by multiple of our dependencies. | |
# There are no fixes for it yet. | |
allow-ghsas: GHSA-qg5g-gv98-5ffh | |
install-ui: | |
name: "Install UI" | |
runs-on: ubuntu-latest | |
needs: | |
- dependency-review | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Get npm cache directory | |
id: npm-cache-dir | |
run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT} | |
- name: Cache npm | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.npm-cache-dir.outputs.dir }} | |
key: "${{ runner.os }}-npm-${{ env.NODE_VERSION }}-${{ hashFiles('./ui/package-lock.json') }}" | |
restore-keys: | | |
${{ runner.os }}-npm- | |
- name: Cache node modules | |
uses: actions/cache@v4 | |
with: | |
path: ./ui/node_modules | |
key: "${{ runner.os }}-node_modules-${{ env.NODE_VERSION }}-${{ hashFiles('./ui/package-lock.json') }}" | |
restore-keys: | | |
${{ runner.os }}-node_modules- | |
- name: Install node dependencies | |
run: cd ui && npm ci | |
check-ui: | |
name: "Check UI" | |
runs-on: ubuntu-latest | |
needs: | |
- install-ui | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Restore cached node modules | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./ui/node_modules | |
key: "${{ runner.os }}-node_modules-${{ env.NODE_VERSION }}-${{ hashFiles('./ui/package-lock.json') }}" | |
- name: Run build | |
run: cd ui && npm run check | |
test-ui: | |
name: "Test UI" | |
runs-on: ubuntu-latest | |
needs: | |
- check-ui | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Restore cached node modules | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./ui/node_modules | |
key: "${{ runner.os }}-node_modules-${{ env.NODE_VERSION }}-${{ hashFiles('./ui/package-lock.json') }}" | |
- name: Run tests | |
run: | | |
cd ui | |
npm run test | |
lint-ui: | |
name: "Lint UI" | |
runs-on: ubuntu-latest | |
needs: | |
- check-ui | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Restore cached node modules | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./ui/node_modules | |
key: "${{ runner.os }}-node_modules-${{ env.NODE_VERSION }}-${{ hashFiles('./ui/package-lock.json') }}" | |
- name: Run lint | |
run: | | |
cd ui | |
npm run lint | |
build-ui: | |
name: "Build UI" | |
runs-on: ubuntu-latest | |
needs: | |
- test-ui | |
- lint-ui | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Restore cached node modules | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./ui/node_modules | |
key: "${{ runner.os }}-node_modules-${{ env.NODE_VERSION }}-${{ hashFiles('./ui/package-lock.json') }}" | |
- name: Build | |
run: | | |
cd ui | |
npm run build | |
install-api: | |
name: "Install API" | |
runs-on: ubuntu-latest | |
needs: | |
- dependency-review | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
- name: Cache cargo registry | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/registry | |
key: "${{ runner.os }}-cargo_registry-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
restore-keys: | | |
${{ runner.os }}-cargo_registry- | |
- name: Cache cargo index | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/git | |
key: "${{ runner.os }}-cargo_index-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
restore-keys: | | |
${{ runner.os }}-cargo_index- | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: ./api/target | |
key: "${{ runner.os }}-cargo_build-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
restore-keys: | | |
${{ runner.os }}-cargo_build- | |
- name: Cache sqlx binary | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/bin/sqlx | |
key: "${{ runner.os }}-sqlx-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
restore-keys: | | |
${{ runner.os }}-sqlx- | |
- name: Setup SQLx | |
run: | | |
cd api | |
if [[ ! -f ~/.cargo/bin/sqlx ]] || [[ $(sqlx --version) != "sqlx-cli $SQLX_VERSION" ]]; then | |
cargo install sqlx-cli --version $SQLX_VERSION --no-default-features --features native-tls,postgres --locked --quiet | |
fi | |
- name: Install dependencies | |
run: | | |
cd api | |
rm -r src/* | |
rm -r tests/ | |
echo "fn main() {}" > src/main.rs | |
cargo build --all-targets --locked --quiet | |
check-api: | |
name: "Check API" | |
runs-on: ubuntu-latest | |
needs: | |
- install-api | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
- name: Restore cargo registry | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/registry | |
key: "${{ runner.os }}-cargo_registry-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo index | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/git | |
key: "${{ runner.os }}-cargo_index-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo build | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./api/target | |
key: "${{ runner.os }}-cargo_build-${{ env.RUST_VERSION }}-${{ hashFiles('/api/Cargo.lock') }}" | |
- name: Run check | |
run: | | |
cd api | |
cargo check --frozen --quiet | |
lint-api: | |
name: "Lint API" | |
runs-on: ubuntu-latest | |
needs: | |
- check-api | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
components: clippy, rustfmt | |
- name: Restore cargo registry | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/registry | |
key: "${{ runner.os }}-cargo_registry-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo index | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/git | |
key: "${{ runner.os }}-cargo_index-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo build | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./api/target | |
key: "${{ runner.os }}-cargo_build-${{ env.RUST_VERSION }}-${{ hashFiles('/api/Cargo.lock') }}" | |
- name: Run rustfmt | |
run: | | |
cd api | |
cargo fmt --check | |
- name: Run clippy | |
env: | |
# Treat warnings as errors | |
RUSTFLAGS: "-D warnings" | |
run: | | |
cd api | |
cargo clippy --frozen --quiet | |
test-api: | |
name: "Test API" | |
runs-on: ubuntu-latest | |
needs: | |
- check-api | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
- name: Restore cargo registry | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/registry | |
key: "${{ runner.os }}-cargo_registry-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo index | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/git | |
key: "${{ runner.os }}-cargo_index-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo build | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./api/target | |
key: "${{ runner.os }}-cargo_build-${{ env.RUST_VERSION }}-${{ hashFiles('/api/Cargo.lock') }}" | |
- name: Restore sqlx binary | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/bin/sqlx | |
key: "${{ runner.os }}-sqlx-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Start DB | |
run: | | |
docker compose up --quiet-pull -d db | |
chmod +x ./.github/scripts/wait_for_service.sh | |
./.github/scripts/wait_for_service.sh db | |
- name: Setup DB | |
run: | | |
cd api | |
sqlx database create | |
sqlx migrate run | |
- name: Start API | |
run: | | |
cd api | |
nohup cargo run --frozen > ../api.log 2>&1 & | |
echo $! > ../api.pid | |
- name: Run test | |
run: | | |
cd api | |
cargo test --frozen | |
- name: Stop services | |
run: | | |
kill $(cat api.pid) | |
docker compose down | |
build-api: | |
name: "Build API" | |
runs-on: ubuntu-latest | |
needs: | |
- test-api | |
- lint-api | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
components: clippy, rustfmt | |
- name: Restore cargo registry | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/registry | |
key: "${{ runner.os }}-cargo_registry-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo index | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cargo/git | |
key: "${{ runner.os }}-cargo_index-${{ env.RUST_VERSION }}-${{ hashFiles('./api/Cargo.lock') }}" | |
- name: Restore cargo build | |
uses: actions/cache/restore@v4 | |
with: | |
path: ./api/target | |
key: "${{ runner.os }}-cargo_build-${{ env.RUST_VERSION }}-${{ hashFiles('/api/Cargo.lock') }}" | |
- name: Build | |
run: | | |
cd api | |
cargo build | |
check-changelog: | |
name: "Check CHANGELOG" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
# Fetch full history for comparison | |
fetch-depth: 0 | |
- name: Determine if branch is a feature branch | |
id: check_feature_branch | |
run: | | |
if [[ "${{ github.head_ref || github.ref_name }} " =~ ^feature/* ]]; then | |
echo "is_feature=true" >> $GITHUB_ENV | |
else | |
echo "is_feature=false" >> $GITHUB_ENV | |
fi | |
- name: Check if CHANGELOG.md has changed | |
if: env.is_feature == 'true' | |
run: | | |
# Compare the CHANGELOG.md file in the current branch with the `develop` branch | |
if git diff --name-only origin/develop...HEAD | grep -q '^CHANGELOG.md$'; then | |
echo "CHANGELOG.md has been updated." | |
else | |
echo "::warning file=CHANGELOG.md::CHANGELOG.md has not been updated." | |
fi | |
prefer-single-commit: | |
name: "Prefer Single Commit" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
# Fetch full history for comparison | |
fetch-depth: 0 | |
- name: Count commits | |
id: count_commits | |
run: | | |
commit_count=$(git rev-list --count HEAD ^origin/${{ github.event.pull_request.base.ref }}) | |
echo "commit_count=$commit_count" >> $GITHUB_ENV | |
- name: Fail if more than one commit | |
if: env.commit_count > 1 | |
run: | | |
echo "::warning::Pull request contains more than one commit ($commit_count commits). Please squash your commits." |