feat(docs): add Claude Code plugin for AI-assisted development #96
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: PR Tests | |
| on: | |
| pull_request: | |
| branches: [master] | |
| types: [opened, synchronize, reopened] | |
| # Path filtering moved to job level using dorny/paths-filter | |
| # This ensures the workflow always runs and reports a status | |
| # Ensure only one test run per PR at a time | |
| concurrency: | |
| group: pr-tests-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| # Workflow-level permissions set to maximum needed by any job | |
| # Individual jobs further restrict to only what they need | |
| permissions: | |
| contents: read | |
| checks: write | |
| statuses: write | |
| pull-requests: write | |
| jobs: | |
| changes: | |
| name: Detect Changes | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| outputs: | |
| should_test: ${{ steps.filter.outputs.src }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dorny/paths-filter@v3 | |
| id: filter | |
| with: | |
| filters: | | |
| src: | |
| - 'UnityProject/Packages/com.jasonxudeveloper.jengine.core/**' | |
| - 'UnityProject/Packages/com.jasonxudeveloper.jengine.util/**' | |
| - 'UnityProject/Packages/com.jasonxudeveloper.jengine.ui/**' | |
| - 'UnityProject/Assets/Tests/**' | |
| - '.github/workflows/unity-tests.yml' | |
| - '.github/workflows/pr-tests.yml' | |
| run-tests: | |
| name: Run Unity Tests | |
| needs: changes | |
| if: needs.changes.outputs.should_test == 'true' | |
| permissions: | |
| contents: read | |
| checks: write | |
| uses: ./.github/workflows/unity-tests.yml | |
| secrets: inherit | |
| skip-tests: | |
| name: Skip Unity Tests | |
| needs: changes | |
| if: needs.changes.outputs.should_test == 'false' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| statuses: write | |
| steps: | |
| - name: Skip tests | |
| run: echo "No relevant changes detected, skipping tests" | |
| - name: Set PR check status (skipped) | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| await github.rest.repos.createCommitStatus({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| sha: context.payload.pull_request.head.sha, | |
| state: 'success', | |
| target_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`, | |
| description: 'Skipped - no relevant changes', | |
| context: 'Unity Tests' | |
| }); | |
| upload-coverage: | |
| name: Upload Coverage | |
| needs: [changes, run-tests] | |
| runs-on: ubuntu-latest | |
| if: needs.changes.outputs.should_test == 'true' && needs.run-tests.result == 'success' | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Download coverage artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: Coverage-results-2022.3.55f1 | |
| path: coverage | |
| - name: List coverage files | |
| run: | | |
| echo "Coverage directory structure:" | |
| find coverage -type f -name "*.xml" 2>/dev/null || echo "No XML files found" | |
| - name: Upload coverage to Codecov (util package) | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: coverage/**/TestCoverageResults*.xml | |
| flags: util | |
| name: jengine-util | |
| fail_ci_if_error: true | |
| verbose: true | |
| - name: Upload coverage to Codecov (ui package) | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: coverage/**/TestCoverageResults*.xml | |
| flags: ui | |
| name: jengine-ui | |
| fail_ci_if_error: true | |
| verbose: true | |
| comment-results: | |
| name: Comment Test Results | |
| needs: [changes, run-tests, skip-tests] | |
| runs-on: ubuntu-latest | |
| if: always() && needs.changes.outputs.should_test == 'true' | |
| permissions: | |
| pull-requests: write | |
| statuses: write | |
| steps: | |
| - name: Comment PR with test results | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const testResults = `${{ needs.run-tests.outputs.test_results }}`; | |
| const jobStatus = '${{ needs.run-tests.result }}'; | |
| let comment = testResults; | |
| if (jobStatus === 'success') { | |
| comment += '\n\n✅ All tests passed! The PR is ready for review.'; | |
| } else if (jobStatus === 'failure') { | |
| comment += '\n\n❌ Some tests failed. Please fix the failing tests before merging.'; | |
| } else { | |
| comment += '\n\n⚠️ Test execution was cancelled or encountered an error.'; | |
| } | |
| comment += `\n\n<details><summary>View workflow run</summary>\n\n[Click here to view the full workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})\n\n</details>`; | |
| // Find existing comment | |
| const comments = await github.rest.issues.listComments({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| }); | |
| const botComment = comments.data.find(comment => | |
| comment.user.type === 'Bot' && | |
| comment.body.includes('Unity Test Results') | |
| ); | |
| if (botComment) { | |
| // Update existing comment | |
| await github.rest.issues.updateComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| comment_id: botComment.id, | |
| body: comment | |
| }); | |
| } else { | |
| // Create new comment | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| body: comment | |
| }); | |
| } | |
| - name: Set PR check status | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const jobStatus = '${{ needs.run-tests.result }}'; | |
| const state = jobStatus === 'success' ? 'success' : 'failure'; | |
| const description = jobStatus === 'success' | |
| ? 'All Unity tests passed' | |
| : 'Unity tests failed'; | |
| await github.rest.repos.createCommitStatus({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| sha: context.payload.pull_request.head.sha, | |
| state: state, | |
| target_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`, | |
| description: description, | |
| context: 'Unity Tests' | |
| }); |