@@ -170,7 +170,6 @@ jobs:
170170 needs.setup.outputs.is-fork-pr != 'true'
171171 permissions :
172172 contents : read # Read repository content for security scanning
173- actions : write # Required for workflow cancellation on failure
174173 uses : ./.github/workflows/fortress-security-scans.yml
175174 with :
176175 env-json : ${{ needs.load-env.outputs.env-json }}
@@ -199,7 +198,6 @@ jobs:
199198 needs.setup.outputs.pre-commit-enabled == 'true'
200199 permissions :
201200 contents : read # Read repository content for pre-commit checks
202- actions : write # Required for workflow cancellation on failure
203201 uses : ./.github/workflows/fortress-pre-commit.yml
204202 with :
205203 env-json : ${{ needs.load-env.outputs.env-json }}
@@ -220,7 +218,6 @@ jobs:
220218 (needs.warm-cache.result == 'success' || needs.warm-cache.result == 'skipped')
221219 permissions :
222220 contents : read # Read repository content for code quality checks
223- actions : write # Required for workflow cancellation on failure
224221 uses : ./.github/workflows/fortress-code-quality.yml
225222 with :
226223 env-json : ${{ needs.load-env.outputs.env-json }}
@@ -251,7 +248,7 @@ jobs:
251248 pages : write # Required: Coverage workflow needs to deploy to GitHub Pages
252249 id-token : write # Required: Coverage workflow needs GitHub Pages authentication
253250 statuses : write # Required: Coverage workflow needs to create commit status checks
254- actions : write # Required: Manage/cancel child test workflows (test matrix & fuzz tests); artifact access only needs actions: read
251+ actions : read # Required: Coverage workflow needs to access artifacts from workflow runs
255252 uses : ./.github/workflows/fortress-test-suite.yml
256253 with :
257254 code-coverage-enabled : ${{ needs.setup.outputs.code-coverage-enabled }}
@@ -321,25 +318,87 @@ jobs:
321318 runs-on : ${{ needs.setup.outputs.primary-runner }}
322319 steps :
323320 # --------------------------------------------------------------------
324- # Build a summary table for the UI (always runs)
321+ # Build results summary showing job statuses
325322 # --------------------------------------------------------------------
326323 - name : 📊 Build results summary
324+ env :
325+ SETUP_RESULT : ${{ needs.setup.result }}
326+ MAGEX_RESULT : ${{ needs.test-magex.result }}
327+ CACHE_RESULT : ${{ needs.warm-cache.result }}
328+ SECURITY_RESULT : ${{ needs.security.result }}
329+ QUALITY_RESULT : ${{ needs.code-quality.result }}
330+ PRECOMMIT_RESULT : ${{ needs.pre-commit.result }}
331+ TESTS_RESULT : ${{ needs.test-suite.result }}
332+ BENCH_RESULT : ${{ needs.benchmarks.result }}
333+ CACHE_ENABLED : ${{ needs.setup.outputs.cache-warming-enabled }}
334+ PRECOMMIT_ENABLED : ${{ needs.setup.outputs.pre-commit-enabled }}
335+ TESTS_ENABLED : ${{ needs.setup.outputs.go-tests-enabled }}
327336 run : |
328337 {
329338 echo "## 🚦 Workflow Results"
330339 echo ""
331340 echo "| Component | Result | Status |"
332341 echo "|-----------|--------|--------|"
333- echo "| 🎯 Setup | ${{ needs.setup.result }} | Required |"
334- echo "| 🪄 MAGE-X | ${{ needs.test-magex.result }} | Required |"
335- echo "| 💾 Warm Cache | ${{ needs.warm-cache.result }} | ${{ needs.setup.outputs.cache-warming-enabled == 'true' && 'Required' || 'Disabled' }} |"
336- echo "| 🔒 Security | ${{ needs.security.result }} | Required |"
337- echo "| 📊 Code Quality | ${{ needs.code-quality.result }} | Required |"
338- echo "| 🪝 Pre-commit | ${{ needs.pre-commit.result }} | ${{ needs.setup.outputs.pre-commit-enabled == 'true' && 'Required' || 'Skipped' }} |"
339- echo "| 🧪 Test Suite | ${{ needs.test-suite.result }} | ${{ needs.setup.outputs.go-tests-enabled == 'true' && 'Required' || 'Skipped' }} |"
340- echo "| 🏃 Benchmarks | ${{ needs.benchmarks.result }} | Optional ⚠️ |"
342+
343+ # Helper function to determine result display
344+ get_result_display() {
345+ local result="$1"
346+
347+ if [[ "$result" == "failure" ]]; then
348+ echo "❌ **FAILED**"
349+ elif [[ "$result" == "cancelled" ]]; then
350+ echo "⏹️ cancelled"
351+ elif [[ "$result" == "skipped" ]]; then
352+ echo "⏭️ skipped"
353+ elif [[ "$result" == "success" ]]; then
354+ echo "✅ success"
355+ else
356+ echo "$result"
357+ fi
358+ }
359+
360+ # Setup
361+ SETUP_DISPLAY=$(get_result_display "$SETUP_RESULT")
362+ echo "| 🎯 Setup | $SETUP_DISPLAY | Required |"
363+
364+ # MAGE-X
365+ MAGEX_DISPLAY=$(get_result_display "$MAGEX_RESULT")
366+ echo "| 🪄 MAGE-X | $MAGEX_DISPLAY | Required |"
367+
368+ # Warm Cache
369+ CACHE_REQ="Disabled"
370+ [[ "$CACHE_ENABLED" == "true" ]] && CACHE_REQ="Required"
371+ CACHE_DISPLAY=$(get_result_display "$CACHE_RESULT")
372+ echo "| 💾 Warm Cache | $CACHE_DISPLAY | $CACHE_REQ |"
373+
374+ # Security
375+ SECURITY_DISPLAY=$(get_result_display "$SECURITY_RESULT")
376+ echo "| 🔒 Security | $SECURITY_DISPLAY | Required |"
377+
378+ # Code Quality
379+ QUALITY_DISPLAY=$(get_result_display "$QUALITY_RESULT")
380+ echo "| 📊 Code Quality | $QUALITY_DISPLAY | Required |"
381+
382+ # Pre-commit
383+ PRECOMMIT_REQ="Skipped"
384+ [[ "$PRECOMMIT_ENABLED" == "true" ]] && PRECOMMIT_REQ="Required"
385+ PRECOMMIT_DISPLAY=$(get_result_display "$PRECOMMIT_RESULT")
386+ echo "| 🪝 Pre-commit | $PRECOMMIT_DISPLAY | $PRECOMMIT_REQ |"
387+
388+ # Test Suite
389+ TESTS_REQ="Skipped"
390+ [[ "$TESTS_ENABLED" == "true" ]] && TESTS_REQ="Required"
391+ TESTS_DISPLAY=$(get_result_display "$TESTS_RESULT")
392+ echo "| 🧪 Test Suite | $TESTS_DISPLAY | $TESTS_REQ |"
393+
394+ # Benchmarks (always optional)
395+ BENCH_DISPLAY=$(get_result_display "$BENCH_RESULT")
396+ echo "| 🏃 Benchmarks | $BENCH_DISPLAY | Optional ⚠️ |"
397+
341398 echo ""
342- if [[ "${{ needs.benchmarks.result }}" == "failure" ]]; then
399+
400+ # Add explanatory note if benchmarks failed
401+ if [[ "$BENCH_RESULT" == "failure" ]]; then
343402 echo "⚠️ **Note**: Benchmarks failed but are currently non-blocking."
344403 fi
345404 } >> "$GITHUB_STEP_SUMMARY"
0 commit comments