From 2c63e0fdd69bd38b62aa232a4232dee4b8ecaaf4 Mon Sep 17 00:00:00 2001 From: zenobit Date: Wed, 1 Apr 2026 04:12:54 +0200 Subject: [PATCH] chore(ci): improve and show CI summary --- .github/workflows/ci.yml | 137 ++++++++++++++++++++++++++++++++------- 1 file changed, 112 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3fbfe0d895..08f0926947 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,6 +14,7 @@ permissions: contents: read jobs: + lint: name: Lint runs-on: ubuntu-latest @@ -32,6 +33,19 @@ jobs: - run: npm run typecheck:core - run: npm run typecheck:noimplicit:core + i18n-matrix: + name: Build language matrix + runs-on: ubuntu-latest + outputs: + langs: ${{ steps.langs.outputs.langs }} + steps: + - uses: actions/checkout@v4 + - id: langs + run: | + LANG_DIR="src/i18n/messages" + LANGS=$(ls "$LANG_DIR"/*.json | xargs -n1 basename | sed 's/.json$//' | grep -v '^en$' | jq -R . | jq -s . | jq -c .) + echo "langs=${LANGS}" >> $GITHUB_OUTPUT + i18n: name: i18n Validation runs-on: ubuntu-latest @@ -46,31 +60,17 @@ jobs: - uses: actions/setup-python@v6.2.0 with: python-version: '3.12' + - name: Validate ${{ matrix.lang }} run: | - echo "Validating language: ${{ matrix.lang }}" - python3 scripts/validate_translation.py quick -l '${{ matrix.lang }}' - - name: Report to summary - if: always() - run: | - echo "### ${{ matrix.lang }} Translation Report" >> $GITHUB_STEP_SUMMARY - echo '```' >> $GITHUB_STEP_SUMMARY - python3 scripts/validate_translation.py quick -l '${{ matrix.lang }}' >> $GITHUB_STEP_SUMMARY 2>&1 - echo '```' >> $GITHUB_STEP_SUMMARY + python3 scripts/validate_translation.py quick -l '${{ matrix.lang }}' > result.txt - i18n-matrix: - name: Build language matrix - runs-on: ubuntu-latest - outputs: - langs: ${{ steps.langs.outputs.langs }} - steps: - - uses: actions/checkout@v4 - - name: Generate language list - id: langs - run: | - LANG_DIR="src/i18n/messages" - LANGS=$(ls "$LANG_DIR"/*.json | xargs -n1 basename | sed 's/.json$//' | grep -v '^en$' | jq -R . | jq -s . | jq -c .) - echo "langs=${LANGS}" >> $GITHUB_OUTPUT + - name: Upload result + if: always() + uses: actions/upload-artifact@v4 + with: + name: i18n-${{ matrix.lang }} + path: result.txt security: name: Security Audit @@ -137,9 +137,6 @@ jobs: cache: npm - run: npm ci - run: npm run test:coverage - - name: Check coverage threshold - run: | - echo "Coverage report generated. Check output for threshold compliance." test-e2e: name: E2E Tests @@ -192,3 +189,93 @@ jobs: cache: npm - run: npm ci - run: npm run test:security + + # ๐Ÿ”ฅ DASHBOARD + ci-summary: + name: CI Dashboard + runs-on: ubuntu-latest + if: always() + needs: + - lint + - security + - build + - test-unit + - test-coverage + - test-e2e + - test-integration + - test-security + - i18n + + steps: + - name: Download i18n results + uses: actions/download-artifact@v4 + with: + path: results + + - name: Generate dashboard + run: | + status() { + case "$1" in + success) echo "๐ŸŸข PASS" ;; + failure) echo "๐Ÿ”ด FAIL" ;; + cancelled) echo "โšซ CANCELLED" ;; + *) echo "๐ŸŸก UNKNOWN" ;; + esac + } + + echo "# ๐Ÿš€ CI Dashboard" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # ๐Ÿ”น CORE + echo "## ๐Ÿงฑ Core Checks" >> $GITHUB_STEP_SUMMARY + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | $(status '${{ needs.lint.result }}') |" >> $GITHUB_STEP_SUMMARY + echo "| Security Audit | $(status '${{ needs.security.result }}') |" >> $GITHUB_STEP_SUMMARY + + # ๐Ÿ”น BUILD + echo "" >> $GITHUB_STEP_SUMMARY + echo "## ๐Ÿ—๏ธ Build" >> $GITHUB_STEP_SUMMARY + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Build Matrix | $(status '${{ needs.build.result }}') |" >> $GITHUB_STEP_SUMMARY + + # ๐Ÿ”น TESTS + echo "" >> $GITHUB_STEP_SUMMARY + echo "## ๐Ÿงช Tests" >> $GITHUB_STEP_SUMMARY + echo "| Suite | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Unit | $(status '${{ needs.test-unit.result }}') |" >> $GITHUB_STEP_SUMMARY + echo "| Coverage | $(status '${{ needs.test-coverage.result }}') |" >> $GITHUB_STEP_SUMMARY + echo "| E2E | $(status '${{ needs.test-e2e.result }}') |" >> $GITHUB_STEP_SUMMARY + echo "| Integration | $(status '${{ needs.test-integration.result }}') |" >> $GITHUB_STEP_SUMMARY + echo "| Security Tests | $(status '${{ needs.test-security.result }}') |" >> $GITHUB_STEP_SUMMARY + + # ๐Ÿ”น I18N + echo "" >> $GITHUB_STEP_SUMMARY + echo "## ๐ŸŒ Translations" >> $GITHUB_STEP_SUMMARY + + total=0 + langs=0 + + for dir in results/*; do + file="$dir/result.txt" + val=$(sed -r 's/\x1B\[[0-9;]*[mK]//g' "$file" | grep "Untranslated:" | awk '{print $2}') + val=${val:-0} + total=$((total + val)) + langs=$((langs + 1)) + done + + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY + echo "|--------|------|" >> $GITHUB_STEP_SUMMARY + echo "| Languages checked | $langs |" >> $GITHUB_STEP_SUMMARY + echo "| Total untranslated | $total |" >> $GITHUB_STEP_SUMMARY + + if [ "$total" -gt 0 ]; then + echo "" >> $GITHUB_STEP_SUMMARY + echo "โš ๏ธ **Translations need attention**" >> $GITHUB_STEP_SUMMARY + else + echo "" >> $GITHUB_STEP_SUMMARY + echo "โœ… **All translations complete**" >> $GITHUB_STEP_SUMMARY + fi \ No newline at end of file