diff --git a/.github/workflows/android-cpp-ci.yml b/.github/workflows/android-cpp-ci.yml index 76208511b..33f575c49 100644 --- a/.github/workflows/android-cpp-ci.yml +++ b/.github/workflows/android-cpp-ci.yml @@ -223,34 +223,41 @@ jobs: android-cpp/QuickStartTasksCPP/app/build/outputs/apk/ android-cpp/QuickStartTasksCPP/appium-test/build/reports/ - - name: Comment PR with results - if: github.event_name == 'pull_request' && always() - uses: actions/github-script@v7 - with: - script: | - const testDocId = '${{ steps.seed_doc.outputs.doc_title }}'; - const status = '${{ job.status }}'; - const runUrl = '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'; + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, browserstack-appium-test] + if: always() - const body = `## 📱 BrowserStack Test Results (Android C++) + steps: + - name: Report Results + run: | + echo "## 📱 Android C++ CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY - **Status:** ${status === 'success' ? '✅ Passed' : '❌ Failed'} - **Build:** [#${{ github.run_number }}](${runUrl}) - **Test Document ID:** ${testDocId || 'Not generated'} - - ### Tested Devices: - - Google Pixel 7 (Android 13.0) - - ### Test Verification: - - ✅ Lint check completed - - ✅ APK build successful - - ✅ Test document seeded to Ditto Cloud - - ${status === 'success' ? '✅' : '❌'} Integration test verification on BrowserStack - `; - - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: body - }); + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.browserstack-appium-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| BrowserStack Tests | ${{ needs.browserstack-appium-test.result == 'success' && '✅ Passed' || (needs.browserstack-appium-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # BrowserStack link + if [[ "${{ needs.browserstack-appium-test.result }}" != "skipped" ]]; then + echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🤖 [View Test Results](https://app-automate.browserstack.com/dashboard/v2)" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tested Device:**" >> $GITHUB_STEP_SUMMARY + echo "- Google Pixel 7 (Android 13.0)" >> $GITHUB_STEP_SUMMARY + fi diff --git a/.github/workflows/android-java-ci.yml b/.github/workflows/android-java-ci.yml index 1251de558..aae98627e 100644 --- a/.github/workflows/android-java-ci.yml +++ b/.github/workflows/android-java-ci.yml @@ -343,38 +343,44 @@ jobs: android-java/app/build/outputs/apk/ android-java/app/build/reports/ - - name: Comment PR with results - if: github.event_name == 'pull_request' && always() - uses: actions/github-script@v7 - with: - script: | - const testDocId = 'Generated during BrowserStack testing'; - const status = '${{ job.status }}'; - const runUrl = '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'; - - const body = `## 📱 BrowserStack Test Results (Android Java) - - **Status:** ${status === 'success' ? '✅ Passed' : '❌ Failed'} - **Build:** [#${{ github.run_number }}](${runUrl}) - **Test Document ID:** ${testDocId || 'Not generated'} - - ### Tested Devices: - - Google Pixel 8 (Android 14) - - Samsung Galaxy S23 (Android 13) - - Google Pixel 6 (Android 12) - - OnePlus 9 (Android 11) - - ### Test Verification: - - ✅ Lint check completed - - ✅ APK build successful - - ✅ Unit tests passed - - ✅ Test document seeded to Ditto Cloud - - ${status === 'success' ? '✅' : '❌'} Integration test verification on BrowserStack - `; - - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: body - }); \ No newline at end of file + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, browserstack-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## 📱 Android Java CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.browserstack-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| BrowserStack Tests | ${{ needs.browserstack-test.result == 'success' && '✅ Passed' || (needs.browserstack-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # BrowserStack link + if [[ "${{ needs.browserstack-test.result }}" != "skipped" ]]; then + echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=Ditto+Android+Java&build=Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tested Devices:**" >> $GITHUB_STEP_SUMMARY + echo "- Google Pixel 8 (Android 14)" >> $GITHUB_STEP_SUMMARY + echo "- Samsung Galaxy S23 (Android 13)" >> $GITHUB_STEP_SUMMARY + echo "- Google Pixel 6 (Android 12)" >> $GITHUB_STEP_SUMMARY + echo "- OnePlus 9 (Android 11)" >> $GITHUB_STEP_SUMMARY + fi \ No newline at end of file diff --git a/.github/workflows/android-kotlin-ci.yml b/.github/workflows/android-kotlin-ci.yml index 7d9b033c4..d45d20637 100644 --- a/.github/workflows/android-kotlin-ci.yml +++ b/.github/workflows/android-kotlin-ci.yml @@ -349,3 +349,45 @@ jobs: echo "Warning: Could not parse final results" echo "Raw response: $FINAL_RESULT" fi + + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build-and-test, browserstack-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## 📱 Android Kotlin CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build-and-test.result }}" == "success" && \ + "${{ needs.browserstack-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build and Test | ${{ needs.build-and-test.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| BrowserStack Tests | ${{ needs.browserstack-test.result == 'success' && '✅ Passed' || (needs.browserstack-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # BrowserStack link + if [[ "${{ needs.browserstack-test.result }}" != "skipped" ]]; then + echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=Ditto+Android+Kotlin&build=Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tested Devices:**" >> $GITHUB_STEP_SUMMARY + echo "- Google Pixel 8 (Android 14)" >> $GITHUB_STEP_SUMMARY + echo "- Samsung Galaxy S23 (Android 13)" >> $GITHUB_STEP_SUMMARY + echo "- Google Pixel 6 (Android 12)" >> $GITHUB_STEP_SUMMARY + echo "- OnePlus 9 (Android 11)" >> $GITHUB_STEP_SUMMARY + fi diff --git a/.github/workflows/cpp-tui-ci.yml b/.github/workflows/cpp-tui-ci.yml index 5eb409a2d..09dd95430 100644 --- a/.github/workflows/cpp-tui-ci.yml +++ b/.github/workflows/cpp-tui-ci.yml @@ -145,4 +145,32 @@ jobs: src/task.cpp src/tasks_peer.cpp src/tasks_log.cpp \ -L./sdk -lditto -ldl -lrt -pthread \ -o build/integration_test - ./build/integration_test \ No newline at end of file + ./build/integration_test + + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, integration-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## 🔧 C++ TUI CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.integration-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Integration Test | ${{ needs.integration-test.result == 'success' && '✅ Passed' || (needs.integration-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.github/workflows/dotnet-tui-ci.yml b/.github/workflows/dotnet-tui-ci.yml index 01e05076b..bcfb58965 100644 --- a/.github/workflows/dotnet-tui-ci.yml +++ b/.github/workflows/dotnet-tui-ci.yml @@ -141,4 +141,32 @@ jobs: TASK_TO_FIND: ${{ env.GITHUB_TEST_DOC_TITLE }} GITHUB_RUN_ID: ${{ github.run_id }} GITHUB_RUN_NUMBER: ${{ github.run_number }} - run: dotnet test DittoDotNetTasksConsole.Tests --configuration Release --logger "console;verbosity=detailed" \ No newline at end of file + run: dotnet test DittoDotNetTasksConsole.Tests --configuration Release --logger "console;verbosity=detailed" + + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, integration-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## 🔷 .NET TUI CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.integration-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Integration Test | ${{ needs.integration-test.result == 'success' && '✅ Passed' || (needs.integration-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.github/workflows/dotnet-winforms-ci.yml b/.github/workflows/dotnet-winforms-ci.yml index bfc7bcd73..c6faae62b 100644 --- a/.github/workflows/dotnet-winforms-ci.yml +++ b/.github/workflows/dotnet-winforms-ci.yml @@ -147,4 +147,32 @@ jobs: run: | dotnet restore dotnet build --configuration Release --no-restore - dotnet run --configuration Release --no-build \ No newline at end of file + dotnet run --configuration Release --no-build + + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, integration-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## 🪟 .NET WinForms CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.integration-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Integration Test | ${{ needs.integration-test.result == 'success' && '✅ Passed' || (needs.integration-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.github/workflows/java-spring-ci.yml b/.github/workflows/java-spring-ci.yml index 96d19be7c..56417df14 100644 --- a/.github/workflows/java-spring-ci.yml +++ b/.github/workflows/java-spring-ci.yml @@ -308,3 +308,42 @@ jobs: java-spring/app.log browserstack-local.log retention-days: 1 + + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, browserstack-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## ☕ Java Spring CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.browserstack-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| BrowserStack Tests | ${{ needs.browserstack-test.result == 'success' && '✅ Passed' || (needs.browserstack-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # BrowserStack link + if [[ "${{ needs.browserstack-test.result }}" != "skipped" ]]; then + echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🔗 [View Test Results](https://automate.browserstack.com/dashboard/v2/builds)" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tested Browser:**" >> $GITHUB_STEP_SUMMARY + echo "- Chrome Latest (Windows 11)" >> $GITHUB_STEP_SUMMARY + fi diff --git a/.github/workflows/javascript-tui-ci.yml b/.github/workflows/javascript-tui-ci.yml index c32a45d08..93d70d56e 100644 --- a/.github/workflows/javascript-tui-ci.yml +++ b/.github/workflows/javascript-tui-ci.yml @@ -143,4 +143,32 @@ jobs: GITHUB_TEST_DOC_TITLE: ${{ env.GITHUB_TEST_DOC_TITLE }} GITHUB_RUN_ID: ${{ github.run_id }} GITHUB_RUN_NUMBER: ${{ github.run_number }} - run: npm run build && node tests/integration_test.js \ No newline at end of file + run: npm run build && node tests/integration_test.js + + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, integration-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## 📜 JavaScript TUI CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.integration-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Integration Test | ${{ needs.integration-test.result == 'success' && '✅ Passed' || (needs.integration-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.github/workflows/javascript-web-browserstack.yml b/.github/workflows/javascript-web-ci.yml similarity index 78% rename from .github/workflows/javascript-web-browserstack.yml rename to .github/workflows/javascript-web-ci.yml index fc77be8cd..2b82b97ae 100644 --- a/.github/workflows/javascript-web-browserstack.yml +++ b/.github/workflows/javascript-web-ci.yml @@ -161,3 +161,35 @@ jobs: test-report.md *screenshot*.png .github/scripts/browserstack-test.py + + - name: Generate test summary + if: always() + run: | + echo "## 🌐 JavaScript Web CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [ "${{ job.status }}" = "success" ]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Check | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ✅ Passed |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ✅ Passed |" >> $GITHUB_STEP_SUMMARY + echo "| BrowserStack Tests | ${{ job.status == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # BrowserStack info + echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🔗 [View Dashboard](https://automate.browserstack.com/dashboard/v2)" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tested Browsers:**" >> $GITHUB_STEP_SUMMARY + echo "- Chrome 120.0 (Windows 11)" >> $GITHUB_STEP_SUMMARY + echo "- Firefox 121.0 (Windows 11)" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Test Document ID:** \`${GITHUB_TEST_DOC_ID:-Not generated}\`" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/kotlin-multiplatform-ci.yml b/.github/workflows/kotlin-multiplatform-ci.yml index 7c6189736..c095d1ca6 100644 --- a/.github/workflows/kotlin-multiplatform-ci.yml +++ b/.github/workflows/kotlin-multiplatform-ci.yml @@ -577,4 +577,12 @@ jobs: else echo "⚠️ Core builds passed but testing had issues. Check testing logs above." >> $GITHUB_STEP_SUMMARY fi + fi + + # BrowserStack link + if [[ "${{ needs.browserstack-android.result }}" != "skipped" ]]; then + echo "" >> $GITHUB_STEP_SUMMARY + echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🤖 [View Android Test Results](https://app-automate.browserstack.com/builds?project=Ditto+Kotlin+Multiplatform&build=Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY fi \ No newline at end of file diff --git a/.github/workflows/rust-tui-ci.yml b/.github/workflows/rust-tui-ci.yml index ae33b6222..cd87c7a0f 100644 --- a/.github/workflows/rust-tui-ci.yml +++ b/.github/workflows/rust-tui-ci.yml @@ -157,4 +157,34 @@ jobs: # Build integration test cargo build --bin integration_test # Run integration test - cargo run --bin integration_test \ No newline at end of file + cargo run --bin integration_test + + summary: + name: CI Report + runs-on: ubuntu-latest + needs: [lint, build, test, integration-test] + if: always() + + steps: + - name: Report Results + run: | + echo "## 🦀 Rust TUI CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # Overall status + if [[ "${{ needs.lint.result }}" == "success" && \ + "${{ needs.build.result }}" == "success" && \ + "${{ needs.test.result }}" == "success" && \ + "${{ needs.integration-test.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY + else + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Test | ${{ needs.test.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Integration Test | ${{ needs.integration-test.result == 'success' && '✅ Passed' || (needs.integration-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.github/workflows/swift-ci.yml b/.github/workflows/swift-ci.yml index 6eee7de6a..58c008f0b 100644 --- a/.github/workflows/swift-ci.yml +++ b/.github/workflows/swift-ci.yml @@ -534,60 +534,42 @@ jobs: fi summary: - name: Summary - runs-on: macos-latest + name: CI Report + runs-on: ubuntu-latest needs: [lint, build-macos, build-ios, browserstack] if: always() - + steps: - name: Report Results run: | - echo "## 📱 Swift Build and Test Results" - echo "" - echo "### Job Results:" - echo "- **Lint**: ${{ needs.lint.result }}" - echo "- **Build macOS**: ${{ needs.build-macos.result }}" - echo "- **Build iOS**: ${{ needs.build-ios.result }}" - echo "- **BrowserStack Test**: ${{ needs.browserstack.result }}" - echo "" - - # Check results - if [[ "${{ needs.lint.result }}" != "success" ]]; then - echo "❌ **Linting failed** - Code quality issues found" - fi - - if [[ "${{ needs.build-macos.result }}" != "success" ]]; then - echo "⚠️ **macOS build failed** - Platform compatibility issues" - fi - - if [[ "${{ needs.build-ios.result }}" != "success" ]]; then - echo "❌ **iOS build failed** - BrowserStack testing was skipped" - elif [[ "${{ needs.browserstack.result }}" == "success" ]]; then - echo "✅ **Full pipeline success!**" - echo " - ✅ Linting passed" - echo " - ✅ macOS build succeeded" - echo " - ✅ iOS build succeeded" - echo " - ✅ BrowserStack real device testing passed" - echo " - ✅ End-to-end GitHub Actions → Ditto Cloud → BrowserStack sync validated" - echo " - 🚀 **Efficient parallel builds**: macOS & iOS built simultaneously" - elif [[ "${{ needs.browserstack.result }}" == "failure" ]]; then - echo "❌ **BrowserStack testing failed** - iOS builds but cloud sync may have issues" - elif [[ "${{ needs.browserstack.result }}" == "skipped" ]]; then - echo "⚠️ **BrowserStack testing skipped** - iOS build failed" - fi - + echo "## 📱 Swift CI" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + # Overall status - echo "" if [[ "${{ needs.lint.result }}" == "success" && \ - "${{ needs.build-ios.result }}" == "success" ]]; then - echo "🎉 **Core pipeline successful!** iOS app builds and passes quality checks." - if [[ "${{ needs.build-macos.result }}" == "success" ]]; then - echo "🍎 **macOS compatibility confirmed!** Cross-platform builds working." - fi - if [[ "${{ needs.browserstack.result }}" == "success" ]]; then - echo "🚀 **BrowserStack integration validated!** Real device testing works end-to-end." - fi + "${{ needs.build-macos.result }}" == "success" && \ + "${{ needs.build-ios.result }}" == "success" && \ + "${{ needs.browserstack.result }}" == "success" ]]; then + echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY else - echo "⚠️ Core pipeline has issues - check failed jobs above." - exit 1 + echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + + echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY + echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build macOS | ${{ needs.build-macos.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| Build iOS | ${{ needs.build-ios.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| BrowserStack Tests | ${{ needs.browserstack.result == 'success' && '✅ Passed' || (needs.browserstack.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + # BrowserStack link + if [[ "${{ needs.browserstack.result }}" != "skipped" ]]; then + echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🍎 [View Test Results](https://app-automate.browserstack.com/builds?project=Ditto+Swift&build=Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Tested Device:**" >> $GITHUB_STEP_SUMMARY + echo "- iPhone 15 Pro (iOS 17)" >> $GITHUB_STEP_SUMMARY fi \ No newline at end of file