-
Notifications
You must be signed in to change notification settings - Fork 4
fix: clean node_modules before install in Inferno CI #186
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
a8b7fb7
3e97876
74fd43e
656e860
bf1f7cd
305783a
70cbdac
1b887b7
0ddd4e7
d8fe39c
91a8d3d
4a016b1
2650f78
d79325e
95b9022
5017f02
a94c1e6
a40e8ce
43d526c
928921d
a427ed3
9132e30
39ee534
fade5ff
f2dc9cb
9033a3d
1d5969b
0b8ff55
376a687
c05a62b
487bef9
0df686a
8f57c0a
0020ae6
f21f4bd
a931a9c
a76d17c
619364f
8b32259
317f846
87153a5
fd9c984
b64e4b1
3d5677b
8b664a2
59b0576
5057729
1d8f58b
3df5db6
e96110a
dc54f88
0a51cb8
64242ae
3148e10
5d9df7a
227ac5b
92623c4
d106949
d0afedd
985a12b
e17a02a
823d1ad
e469fe1
d425156
c1fe77d
adbfdca
c978c06
95b1cde
e2d5e4c
5037024
20cc291
5cf714a
6b2a29a
b60d1d0
b948b11
2108046
55df35c
712284d
c978c6b
80e0c4c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -45,6 +45,32 @@ jobs: | |||||||||||||||||
| --health-interval 10s | ||||||||||||||||||
| --health-timeout 5s | ||||||||||||||||||
| --health-retries 5 | ||||||||||||||||||
|
|
||||||||||||||||||
| # Inferno's postgres | ||||||||||||||||||
| inferno-db: | ||||||||||||||||||
| image: postgres:16-alpine | ||||||||||||||||||
| env: | ||||||||||||||||||
| POSTGRES_USER: inferno | ||||||||||||||||||
| POSTGRES_PASSWORD: inferno | ||||||||||||||||||
| POSTGRES_DB: inferno | ||||||||||||||||||
| ports: | ||||||||||||||||||
| - 5433:5432 | ||||||||||||||||||
| options: >- | ||||||||||||||||||
| --health-cmd pg_isready | ||||||||||||||||||
| --health-interval 5s | ||||||||||||||||||
| --health-timeout 5s | ||||||||||||||||||
| --health-retries 5 | ||||||||||||||||||
|
|
||||||||||||||||||
| # Redis for Inferno | ||||||||||||||||||
| redis: | ||||||||||||||||||
| image: redis:7-alpine | ||||||||||||||||||
| ports: | ||||||||||||||||||
| - 6379:6379 | ||||||||||||||||||
| options: >- | ||||||||||||||||||
| --health-cmd "redis-cli ping" | ||||||||||||||||||
| --health-interval 5s | ||||||||||||||||||
| --health-timeout 5s | ||||||||||||||||||
| --health-retries 5 | ||||||||||||||||||
|
|
||||||||||||||||||
| steps: | ||||||||||||||||||
| - name: Checkout repository | ||||||||||||||||||
|
|
@@ -54,19 +80,26 @@ jobs: | |||||||||||||||||
| uses: ./.github/actions/setup-bun-version | ||||||||||||||||||
|
|
||||||||||||||||||
| - name: Install dependencies | ||||||||||||||||||
| run: bun install | ||||||||||||||||||
| run: | | ||||||||||||||||||
| rm -rf node_modules */node_modules || true | ||||||||||||||||||
| bun install --no-cache | ||||||||||||||||||
|
|
||||||||||||||||||
| - name: Build Backend | ||||||||||||||||||
| run: | | ||||||||||||||||||
| cd backend | ||||||||||||||||||
| bun run build | ||||||||||||||||||
|
|
||||||||||||||||||
| # Start Keycloak | ||||||||||||||||||
| # Start Keycloak with realm import | ||||||||||||||||||
| - name: Start Keycloak | ||||||||||||||||||
| run: | | ||||||||||||||||||
| # Copy realm export to a temp location for mounting | ||||||||||||||||||
| mkdir -p /tmp/keycloak-import | ||||||||||||||||||
| cp keycloak/realm-export.json /tmp/keycloak-import/ | ||||||||||||||||||
|
|
||||||||||||||||||
| docker run -d \ | ||||||||||||||||||
| --name keycloak \ | ||||||||||||||||||
| --network host \ | ||||||||||||||||||
| -v /tmp/keycloak-import:/opt/keycloak/data/import \ | ||||||||||||||||||
| -e KEYCLOAK_ADMIN=admin \ | ||||||||||||||||||
| -e KEYCLOAK_ADMIN_PASSWORD=admin \ | ||||||||||||||||||
| -e KC_DB=postgres \ | ||||||||||||||||||
|
|
@@ -81,84 +114,92 @@ jobs: | |||||||||||||||||
|
|
||||||||||||||||||
| # Wait for Keycloak to be ready | ||||||||||||||||||
| echo "Waiting for Keycloak..." | ||||||||||||||||||
| for i in {1..60}; do | ||||||||||||||||||
| for i in {1..90}; do | ||||||||||||||||||
| if curl -sf http://localhost:8080/health/ready; then | ||||||||||||||||||
| echo "Keycloak is ready" | ||||||||||||||||||
| echo "Keycloak is ready!" | ||||||||||||||||||
| break | ||||||||||||||||||
| fi | ||||||||||||||||||
| echo "Attempt $i/90..." | ||||||||||||||||||
| sleep 5 | ||||||||||||||||||
| done | ||||||||||||||||||
|
|
||||||||||||||||||
| # Verify realm was imported | ||||||||||||||||||
| sleep 5 | ||||||||||||||||||
| echo "Checking realm..." | ||||||||||||||||||
| TOKEN=$(curl -s -X POST "http://localhost:8080/realms/master/protocol/openid-connect/token" \ | ||||||||||||||||||
| -H "Content-Type: application/x-www-form-urlencoded" \ | ||||||||||||||||||
| -d "grant_type=password&client_id=admin-cli&username=admin&password=admin" | jq -r '.access_token') | ||||||||||||||||||
|
|
||||||||||||||||||
| REALMS=$(curl -s "http://localhost:8080/admin/realms" -H "Authorization: Bearer $TOKEN" | jq -r '.[].realm') | ||||||||||||||||||
| echo "Available realms: $REALMS" | ||||||||||||||||||
|
|
||||||||||||||||||
| if echo "$REALMS" | grep -q "proxy-smart"; then | ||||||||||||||||||
| echo "proxy-smart realm found!" | ||||||||||||||||||
| else | ||||||||||||||||||
| echo "proxy-smart realm not found, creating it..." | ||||||||||||||||||
| curl -s -X POST "http://localhost:8080/admin/realms" \ | ||||||||||||||||||
| -H "Authorization: Bearer $TOKEN" \ | ||||||||||||||||||
| -H "Content-Type: application/json" \ | ||||||||||||||||||
| -d '{"realm": "proxy-smart", "enabled": true}' | ||||||||||||||||||
| fi | ||||||||||||||||||
|
|
||||||||||||||||||
| # Start the application | ||||||||||||||||||
| - name: Start Application | ||||||||||||||||||
| run: | | ||||||||||||||||||
| cd backend | ||||||||||||||||||
| bun run start & | ||||||||||||||||||
| APP_PID=$! | ||||||||||||||||||
| echo "app_pid=$APP_PID" >> $GITHUB_ENV | ||||||||||||||||||
|
|
||||||||||||||||||
| # Wait for app to be ready | ||||||||||||||||||
| echo "Waiting for application..." | ||||||||||||||||||
| for i in {1..30}; do | ||||||||||||||||||
| if curl -sf http://localhost:8445/health; then | ||||||||||||||||||
| echo "Application is ready" | ||||||||||||||||||
| echo "Application is ready!" | ||||||||||||||||||
| break | ||||||||||||||||||
| fi | ||||||||||||||||||
| echo "Attempt $i/30..." | ||||||||||||||||||
| sleep 2 | ||||||||||||||||||
| done | ||||||||||||||||||
| env: | ||||||||||||||||||
| NODE_ENV: production | ||||||||||||||||||
| KEYCLOAK_URL: http://localhost:8080 | ||||||||||||||||||
|
|
||||||||||||||||||
| # Clone and setup Inferno | ||||||||||||||||||
| - name: Setup Inferno Test Kit | ||||||||||||||||||
| # Setup Ruby and Inferno | ||||||||||||||||||
| - name: Setup Ruby | ||||||||||||||||||
| uses: ruby/setup-ruby@v1 | ||||||||||||||||||
| with: | ||||||||||||||||||
| ruby-version: '3.2' | ||||||||||||||||||
| bundler-cache: false | ||||||||||||||||||
|
|
||||||||||||||||||
| - name: Setup Inferno | ||||||||||||||||||
| run: | | ||||||||||||||||||
| git clone https://github.com/inferno-framework/smart-app-launch-test-kit.git inferno | ||||||||||||||||||
| cd inferno | ||||||||||||||||||
| bundle install | ||||||||||||||||||
|
|
||||||||||||||||||
| # Create docker-compose for Inferno | ||||||||||||||||||
| cat > docker-compose.ci.yml << 'EOF' | ||||||||||||||||||
| version: '3.8' | ||||||||||||||||||
| services: | ||||||||||||||||||
| inferno: | ||||||||||||||||||
| build: . | ||||||||||||||||||
| ports: | ||||||||||||||||||
| - "4567:4567" | ||||||||||||||||||
| environment: | ||||||||||||||||||
| - REDIS_URL=redis://redis:6379 | ||||||||||||||||||
| - DATABASE_URL=postgresql://inferno:inferno@inferno-db:5432/inferno | ||||||||||||||||||
| depends_on: | ||||||||||||||||||
| inferno-db: | ||||||||||||||||||
| condition: service_healthy | ||||||||||||||||||
| redis: | ||||||||||||||||||
| condition: service_started | ||||||||||||||||||
|
|
||||||||||||||||||
| inferno-db: | ||||||||||||||||||
| image: postgres:16-alpine | ||||||||||||||||||
| environment: | ||||||||||||||||||
| POSTGRES_USER: inferno | ||||||||||||||||||
| POSTGRES_PASSWORD: inferno | ||||||||||||||||||
| POSTGRES_DB: inferno | ||||||||||||||||||
| healthcheck: | ||||||||||||||||||
| test: ["CMD-SHELL", "pg_isready -U inferno"] | ||||||||||||||||||
| interval: 5s | ||||||||||||||||||
| timeout: 5s | ||||||||||||||||||
| retries: 5 | ||||||||||||||||||
|
|
||||||||||||||||||
| redis: | ||||||||||||||||||
| image: redis:7-alpine | ||||||||||||||||||
| EOF | ||||||||||||||||||
| # Setup database | ||||||||||||||||||
| export DATABASE_URL="postgresql://inferno:inferno@localhost:5433/inferno" | ||||||||||||||||||
| export REDIS_URL="redis://localhost:6379" | ||||||||||||||||||
| bundle exec rake db:migrate || bundle exec rake db:setup || true | ||||||||||||||||||
|
|
||||||||||||||||||
| - name: Start Inferno | ||||||||||||||||||
| run: | | ||||||||||||||||||
| cd inferno | ||||||||||||||||||
| docker compose -f docker-compose.ci.yml up -d --build | ||||||||||||||||||
| export DATABASE_URL="postgresql://inferno:inferno@localhost:5433/inferno" | ||||||||||||||||||
| export REDIS_URL="redis://localhost:6379" | ||||||||||||||||||
|
|
||||||||||||||||||
| # Start Inferno in background | ||||||||||||||||||
| bundle exec puma -p 4567 & | ||||||||||||||||||
|
|
||||||||||||||||||
| # Wait for Inferno to be ready | ||||||||||||||||||
| echo "Waiting for Inferno..." | ||||||||||||||||||
| for i in {1..60}; do | ||||||||||||||||||
| if curl -sf http://localhost:4567; then | ||||||||||||||||||
| echo "Inferno is ready" | ||||||||||||||||||
| if curl -sf http://localhost:4567 > /dev/null 2>&1; then | ||||||||||||||||||
| echo "Inferno is ready!" | ||||||||||||||||||
| break | ||||||||||||||||||
| fi | ||||||||||||||||||
| echo "Attempt $i/60..." | ||||||||||||||||||
| sleep 5 | ||||||||||||||||||
| done | ||||||||||||||||||
|
|
||||||||||||||||||
|
|
@@ -173,8 +214,24 @@ jobs: | |||||||||||||||||
| -d "username=admin" \ | ||||||||||||||||||
| -d "password=admin" | jq -r '.access_token') | ||||||||||||||||||
|
|
||||||||||||||||||
| echo "Admin token obtained: ${TOKEN:0:20}..." | ||||||||||||||||||
|
|
||||||||||||||||||
| # Check if realm exists | ||||||||||||||||||
| REALM_CHECK=$(curl -s -o /dev/null -w "%{http_code}" \ | ||||||||||||||||||
| "http://localhost:8080/admin/realms/proxy-smart" \ | ||||||||||||||||||
| -H "Authorization: Bearer $TOKEN") | ||||||||||||||||||
|
|
||||||||||||||||||
| if [ "$REALM_CHECK" != "200" ]; then | ||||||||||||||||||
| echo "Creating proxy-smart realm..." | ||||||||||||||||||
| curl -s -X POST "http://localhost:8080/admin/realms" \ | ||||||||||||||||||
| -H "Authorization: Bearer $TOKEN" \ | ||||||||||||||||||
| -H "Content-Type: application/json" \ | ||||||||||||||||||
| -d '{"realm": "proxy-smart", "enabled": true}' | ||||||||||||||||||
| fi | ||||||||||||||||||
|
|
||||||||||||||||||
| # Create client | ||||||||||||||||||
| curl -s -X POST "http://localhost:8080/admin/realms/proxy-smart/clients" \ | ||||||||||||||||||
| echo "Creating Inferno client..." | ||||||||||||||||||
| RESULT=$(curl -s -w "\n%{http_code}" -X POST "http://localhost:8080/admin/realms/proxy-smart/clients" \ | ||||||||||||||||||
| -H "Authorization: Bearer $TOKEN" \ | ||||||||||||||||||
| -H "Content-Type: application/json" \ | ||||||||||||||||||
| -d '{ | ||||||||||||||||||
|
|
@@ -192,26 +249,62 @@ jobs: | |||||||||||||||||
| "attributes": { | ||||||||||||||||||
| "pkce.code.challenge.method": "S256" | ||||||||||||||||||
| } | ||||||||||||||||||
| }' | ||||||||||||||||||
| }') | ||||||||||||||||||
|
|
||||||||||||||||||
| HTTP_CODE=$(echo "$RESULT" | tail -1) | ||||||||||||||||||
| BODY=$(echo "$RESULT" | head -n -1) | ||||||||||||||||||
|
|
||||||||||||||||||
| if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "409" ]; then | ||||||||||||||||||
| echo "Client registered (or already exists)" | ||||||||||||||||||
| else | ||||||||||||||||||
| echo "Client registration response: $HTTP_CODE" | ||||||||||||||||||
| echo "$BODY" | ||||||||||||||||||
| fi | ||||||||||||||||||
|
|
||||||||||||||||||
| # Run Inferno tests | ||||||||||||||||||
| # Run Inferno tests via API | ||||||||||||||||||
| - name: Run SMART Compliance Tests | ||||||||||||||||||
| id: inferno-tests | ||||||||||||||||||
| continue-on-error: true | ||||||||||||||||||
|
||||||||||||||||||
| run: | | ||||||||||||||||||
| echo "=== Checking Inferno API ===" | ||||||||||||||||||
|
|
||||||||||||||||||
| # List available test suites | ||||||||||||||||||
| SUITES=$(curl -s "http://localhost:4567/api/test_suites" || echo "[]") | ||||||||||||||||||
| echo "Available suites: $SUITES" | ||||||||||||||||||
|
|
||||||||||||||||||
| # Create test session | ||||||||||||||||||
| SESSION=$(curl -s -X POST "http://localhost:4567/api/test_sessions" \ | ||||||||||||||||||
| echo "Creating test session for $TEST_SUITE..." | ||||||||||||||||||
| SESSION_RESPONSE=$(curl -s -X POST "http://localhost:4567/api/test_sessions" \ | ||||||||||||||||||
| -H "Content-Type: application/json" \ | ||||||||||||||||||
| -d "{\"test_suite_id\": \"$TEST_SUITE\"}" | jq -r '.id') | ||||||||||||||||||
| -d "{\"test_suite_id\": \"$TEST_SUITE\"}" || echo "{}") | ||||||||||||||||||
|
|
||||||||||||||||||
| echo "Session response: $SESSION_RESPONSE" | ||||||||||||||||||
| SESSION=$(echo "$SESSION_RESPONSE" | jq -r '.id // empty') | ||||||||||||||||||
|
|
||||||||||||||||||
| if [ -z "$SESSION" ]; then | ||||||||||||||||||
| echo "::warning::Could not create test session. Inferno API may not be ready." | ||||||||||||||||||
| echo "## SMART Compliance Tests" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "Could not run automated tests - Inferno API not responding as expected." >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| exit 0 | ||||||||||||||||||
| fi | ||||||||||||||||||
|
|
||||||||||||||||||
| echo "Created test session: $SESSION" | ||||||||||||||||||
| echo "session_id=$SESSION" >> $GITHUB_OUTPUT | ||||||||||||||||||
|
|
||||||||||||||||||
| # Get test suite info | ||||||||||||||||||
| SUITE_INFO=$(curl -s "http://localhost:4567/api/test_suites/$TEST_SUITE") | ||||||||||||||||||
| FIRST_GROUP=$(echo $SUITE_INFO | jq -r '.test_groups[0].id') | ||||||||||||||||||
| FIRST_GROUP=$(echo "$SUITE_INFO" | jq -r '.test_groups[0].id // empty') | ||||||||||||||||||
|
|
||||||||||||||||||
| if [ -z "$FIRST_GROUP" ]; then | ||||||||||||||||||
| echo "::warning::Could not find test groups" | ||||||||||||||||||
| exit 0 | ||||||||||||||||||
| fi | ||||||||||||||||||
|
|
||||||||||||||||||
| echo "Running test group: $FIRST_GROUP" | ||||||||||||||||||
|
|
||||||||||||||||||
| # Run tests with inputs | ||||||||||||||||||
| RUN=$(curl -s -X POST "http://localhost:4567/api/test_runs" \ | ||||||||||||||||||
| RUN_RESPONSE=$(curl -s -X POST "http://localhost:4567/api/test_runs" \ | ||||||||||||||||||
| -H "Content-Type: application/json" \ | ||||||||||||||||||
| -d "{ | ||||||||||||||||||
| \"test_session_id\": \"$SESSION\", | ||||||||||||||||||
|
|
@@ -222,14 +315,22 @@ jobs: | |||||||||||||||||
| {\"name\": \"smart_token_url\", \"value\": \"http://localhost:8080/realms/proxy-smart/protocol/openid-connect/token\"}, | ||||||||||||||||||
| {\"name\": \"client_id\", \"value\": \"inferno-test-client\"} | ||||||||||||||||||
| ] | ||||||||||||||||||
| }" | jq -r '.id') | ||||||||||||||||||
| }") | ||||||||||||||||||
|
|
||||||||||||||||||
| echo "Run response: $RUN_RESPONSE" | ||||||||||||||||||
| RUN=$(echo "$RUN_RESPONSE" | jq -r '.id // empty') | ||||||||||||||||||
|
|
||||||||||||||||||
| if [ -z "$RUN" ]; then | ||||||||||||||||||
| echo "::warning::Could not start test run" | ||||||||||||||||||
| exit 0 | ||||||||||||||||||
| fi | ||||||||||||||||||
|
|
||||||||||||||||||
| echo "Started test run: $RUN" | ||||||||||||||||||
| echo "run_id=$RUN" >> $GITHUB_OUTPUT | ||||||||||||||||||
|
|
||||||||||||||||||
| # Poll for completion (max 10 minutes) | ||||||||||||||||||
| for i in {1..120}; do | ||||||||||||||||||
| STATUS=$(curl -s "http://localhost:4567/api/test_runs/$RUN" | jq -r '.status') | ||||||||||||||||||
| STATUS=$(curl -s "http://localhost:4567/api/test_runs/$RUN" | jq -r '.status // "unknown"') | ||||||||||||||||||
| echo "Test status: $STATUS" | ||||||||||||||||||
|
|
||||||||||||||||||
| if [ "$STATUS" = "done" ]; then | ||||||||||||||||||
|
|
@@ -242,51 +343,50 @@ jobs: | |||||||||||||||||
| # Get results | ||||||||||||||||||
| RESULTS=$(curl -s "http://localhost:4567/api/test_runs/$RUN/results") | ||||||||||||||||||
|
|
||||||||||||||||||
| PASSED=$(echo $RESULTS | jq '[.[] | select(.result == "pass")] | length') | ||||||||||||||||||
| FAILED=$(echo $RESULTS | jq '[.[] | select(.result == "fail")] | length') | ||||||||||||||||||
| SKIPPED=$(echo $RESULTS | jq '[.[] | select(.result == "skip")] | length') | ||||||||||||||||||
| ERRORS=$(echo $RESULTS | jq '[.[] | select(.result == "error")] | length') | ||||||||||||||||||
| PASSED=$(echo "$RESULTS" | jq '[.[] | select(.result == "pass")] | length') | ||||||||||||||||||
| FAILED=$(echo "$RESULTS" | jq '[.[] | select(.result == "fail")] | length') | ||||||||||||||||||
| SKIPPED=$(echo "$RESULTS" | jq '[.[] | select(.result == "skip")] | length') | ||||||||||||||||||
| ERRORS=$(echo "$RESULTS" | jq '[.[] | select(.result == "error")] | length') | ||||||||||||||||||
|
|
||||||||||||||||||
| echo "## SMART Compliance Test Results" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "**Test Suite:** $TEST_SUITE" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| Status | Count |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| ✅ Passed | $PASSED |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| ❌ Failed | $FAILED |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| ⏭️ Skipped | $SKIPPED |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| ⚠️ Errors | $ERRORS |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| Passed | $PASSED |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| Failed | $FAILED |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| Skipped | $SKIPPED |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
| echo "| Errors | $ERRORS |" >> $GITHUB_STEP_SUMMARY | ||||||||||||||||||
|
Comment on lines
+357
to
+360
|
||||||||||||||||||
| echo "| Passed | $PASSED |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Failed | $FAILED |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Skipped | $SKIPPED |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Errors | $ERRORS |" >> $GITHUB_STEP_SUMMARY | |
| echo "| ✅ Passed | $PASSED |" >> $GITHUB_STEP_SUMMARY | |
| echo "| ❌ Failed | $FAILED |" >> $GITHUB_STEP_SUMMARY | |
| echo "| ⏭️ Skipped | $SKIPPED |" >> $GITHUB_STEP_SUMMARY | |
| echo "| ⚠️ Errors | $ERRORS |" >> $GITHUB_STEP_SUMMARY |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The wait time for Keycloak has been increased from 60 to 90 iterations (7.5 minutes total). This increase should be documented with a comment explaining why the longer timeout is necessary, or consider if this indicates an underlying performance issue that should be addressed.