Skip to content

Commit b22a4a5

Browse files
committed
♻️ Reuse justfile recipes in E2E workflow to remove duplication
- Split justfile into composable recipes (up, wait-services, migrate, e2e-test, e2e) - Workflow now invokes 'just e2e' and 'just down' instead of inlining bash - Keeps local and CI E2E flows consistent
1 parent b729201 commit b22a4a5

2 files changed

Lines changed: 40 additions & 62 deletions

File tree

.github/workflows/e2e.yml

Lines changed: 11 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -17,52 +17,23 @@ jobs:
1717

1818
- name: Set up Rust toolchain
1919
uses: dtolnay/rust-toolchain@stable
20-
with:
21-
toolchain: stable
2220

2321
- name: Cache Rust build artifacts
2422
uses: Swatinem/rust-cache@v2
2523

26-
- name: Create master-key-password file
27-
run: |
28-
echo -n "ci-test-master-key-password" > master-key-password
29-
chmod 600 master-key-password
30-
31-
- name: Start services via docker compose
32-
run: docker compose up -d
24+
- name: Install just
25+
uses: extractions/setup-just@v2
3326

34-
- name: Wait for postgres
35-
run: |
36-
n=0
37-
until docker compose exec -T postgres pg_isready -U postgres > /dev/null 2>&1; do
38-
n=$((n+1))
39-
if [ $n -ge 30 ]; then echo "ERROR: postgres not ready"; exit 1; fi
40-
echo "Waiting for postgres... ($n)"
41-
sleep 2
42-
done
27+
- name: Install cargo-binstall
28+
uses: cargo-bins/cargo-binstall@main
4329

44-
- name: Wait for redis
45-
run: |
46-
n=0
47-
until docker compose exec -T redis redis-cli ping 2>/dev/null | grep -q PONG; do
48-
n=$((n+1))
49-
if [ $n -ge 30 ]; then echo "ERROR: redis not ready"; exit 1; fi
50-
echo "Waiting for redis... ($n)"
51-
sleep 2
52-
done
30+
- name: Install sqlx-cli
31+
run: cargo binstall sqlx-cli --no-confirm
5332

54-
- name: Wait for Ory services (Kratos, Hydra, Keto)
33+
- name: Create master-key-password file
5534
run: |
56-
for port in 4433 4444 4445 4466 4467; do
57-
n=0
58-
until curl -sf http://localhost:$port/health/alive > /dev/null 2>&1; do
59-
n=$((n+1))
60-
if [ $n -ge 30 ]; then echo "ERROR: port $port not ready"; exit 1; fi
61-
echo "Waiting for port $port... ($n)"
62-
sleep 2
63-
done
64-
echo "Port $port is ready"
65-
done
35+
echo -n "ci-test-master-key-password" > master-key-password
36+
chmod 600 master-key-password
6637
6738
- name: Create .env file
6839
run: |
@@ -79,27 +50,13 @@ jobs:
7950
echo "CORS_ALLOWED_ORIGINS=*"
8051
} > .env
8152
82-
- name: Install cargo-binstall
83-
uses: cargo-bins/cargo-binstall@main
84-
85-
- name: Install sqlx-cli
86-
run: cargo binstall sqlx-cli --no-confirm
87-
88-
- name: Run database migrations
89-
run: sqlx migrate run
90-
env:
91-
DATABASE_URL: postgres://postgres:develop@localhost:5432/postgres
92-
93-
- name: Pre-build server binary
94-
run: cargo build -p server
95-
9653
- name: Run E2E tests
97-
run: cargo test -p server --test e2e_basic_flow -- --ignored --test-threads=1 --nocapture
54+
run: just e2e
9855

9956
- name: Collect docker logs on failure
10057
if: failure()
10158
run: docker compose logs
10259

10360
- name: Stop services
10461
if: always()
105-
run: docker compose down -v
62+
run: just down

justfile

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
# Run E2E tests (requires docker compose services running)
2-
e2e:
1+
# Start docker compose services
2+
up:
33
docker compose up -d
4+
5+
# Stop all services
6+
down:
7+
docker compose down -v
8+
9+
# Wait for all services to become healthy
10+
wait-services:
411
@echo "Waiting for services to be healthy..."
512
@n=0; until docker compose exec -T postgres pg_isready -U postgres > /dev/null 2>&1; do \
613
n=$((n+1)); if [ $n -ge 30 ]; then echo "ERROR: postgres not ready after 60s"; exit 1; fi; \
@@ -16,11 +23,25 @@ e2e:
1623
echo "Waiting for port $port..."; sleep 2; \
1724
done; \
1825
done
26+
@echo "All services healthy."
27+
28+
# Verify master-key-password file exists
29+
check-master-key:
1930
@test -f master-key-password || (echo "ERROR: master-key-password file not found" && exit 1)
20-
@echo "All services healthy. Running E2E tests..."
21-
cargo test -p server --test e2e_basic_flow -- --ignored --test-threads=1
22-
@echo "E2E tests complete."
2331

24-
# Stop all services
25-
e2e-down:
26-
docker compose down -v
32+
# Run database migrations (requires sqlx-cli)
33+
migrate:
34+
sqlx migrate run
35+
36+
# Run E2E tests only (services and prerequisites must be ready)
37+
e2e-test:
38+
cargo build -p server
39+
cargo test -p server --test e2e_basic_flow -- --ignored --test-threads=1 --nocapture
40+
41+
# Full local E2E flow: start services, wait, verify, run tests
42+
e2e: up wait-services check-master-key
43+
@just migrate
44+
@just e2e-test
45+
46+
# Alias for stopping services
47+
e2e-down: down

0 commit comments

Comments
 (0)