Skip to content

fix: improve resilience in test.yml workflow #7

fix: improve resilience in test.yml workflow

fix: improve resilience in test.yml workflow #7

Workflow file for this run

name: "Run backend tests"
on:
push:
branches:
- "master"
workflow_dispatch:
jobs:
run-unit-tests:
runs-on: "self-hosted"
name: "Run doc and unit tests"
steps:
- name: "Set up required tools"
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential libssl-dev pkg-config
- name: "Checkout repository"
uses: actions/checkout@v4.1.1
- name: "Install stable Rust"
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Cache
uses: Swatinem/rust-cache@v2
- name: "Compile tests"
run: cargo test --workspace --exclude kolomoni_test --verbose --no-run
- name: "Run unit tests"
# Excludes the end-to-end testing crate (tested separately).
# This one also doesn't execute doctests due to --all-targets.
run: cargo test --workspace --exclude kolomoni_test --all-features --all-targets --verbose
- name: "Run doctests"
# Excludes the end-to-end testing crate (tested separately).
run: cargo test --workspace --exclude kolomoni_test --all-features --doc --verbose
run-end-to-end-tests:
runs-on: "self-hosted"
name: "Run end-to-end tests"
steps:
- name: "Set up required tools"
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential libssl-dev pkg-config
- name: "Checkout repository"
uses: actions/checkout@v4.1.1
- name: "Install stable Rust"
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Cache
uses: Swatinem/rust-cache@v2
- name: "Initialize PostgreSQL database"
run: |
docker stop kolomoni-e2e-test-database || true
docker run --name kolomoni-e2e-test-database --expose 5432 \
--env POSTGRES_PASSWORD=postgres --env POSTGRES_USER=postgres \
--env POSTGRES_HOST_AUTH_METHOD=trust --env POSTGRES_DB=kolomoni \
-v ./kolomoni_test/assets/postgres-initialization-script.sh:/docker-entrypoint-initdb.d/postgres-initialization-script.sh \
--rm --detach postgres:16.2-alpine
- name: "Build API server"
run: cargo build --release --features with_test_facilities --verbose
- name: "Initialize API server"
run: |
mkdir -p logs
nohup cargo run --verbose --release --features with_test_facilities > logs/server.log 2>&1 &
echo $! > server.pid
- name: "Run end-to-end tests"
env:
TEST_API_SERVER_URL: "http://127.0.0.1:8866"
run: cd kolomoni_test && cargo test --verbose -- --test-threads 1
- name: "Output API server log"
if: ${{ always() }}
run: |
echo "-- server log START --"
cat ./logs/server.log
echo "-- server log END --"
- name: "Stop API server"
# Kills the most recent background task.
if: ${{ always() }}
run: |
SERVER_PID=$(<server.pid)
echo "Killing API server with PID $SERVER_PID."
kill --signal SIGTERM "$SERVER_PID"
echo "API server killed."
- name: "Stop PostgreSQL database"
if: ${{ always() }}
run: |
echo "Stopping PostgreSQL database container."
docker stop kolomoni-e2e-test-database
echo "PostgreSQL database container stopped."