test(sealevel): backward compat e2e with old core programs #5779
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: Claude Code Review | |
| on: | |
| pull_request: | |
| types: [opened, synchronize, reopened, ready_for_review] | |
| paths: | |
| - 'solidity/**' | |
| - 'rust/**' | |
| - 'typescript/infra/**' | |
| pull_request_review_comment: | |
| types: [created] | |
| issue_comment: | |
| types: [created] | |
| env: | |
| CLAUDE_OPUS_MODEL: claude-opus-4-6 | |
| CLAUDE_SONNET_MODEL: claude-sonnet-4-5 | |
| concurrency: | |
| group: claude-review-${{ github.event.pull_request.number || github.event.issue.number }} | |
| cancel-in-progress: false | |
| jobs: | |
| # On-demand code review triggered by @claude review comment or 'claude-review' label | |
| code-review: | |
| if: | | |
| ( | |
| github.event_name == 'issue_comment' && | |
| github.event.issue.pull_request && | |
| contains(github.event.comment.body, '@claude review') && | |
| ( | |
| github.event.comment.author_association == 'MEMBER' || | |
| github.event.comment.author_association == 'OWNER' || | |
| github.event.comment.author_association == 'COLLABORATOR' | |
| ) | |
| ) || | |
| ( | |
| github.event_name == 'pull_request' && | |
| contains(join(github.event.pull_request.labels.*.name, ','), 'claude-review') && | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| ) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| id-token: write | |
| steps: | |
| - name: Get PR SHA | |
| id: pr-sha | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| if (context.eventName === 'issue_comment') { | |
| const { data: pr } = await github.rest.pulls.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| pull_number: context.issue.number | |
| }); | |
| core.setOutput('head_sha', pr.head.sha); | |
| } else { | |
| core.setOutput('head_sha', context.payload.pull_request.head.sha); | |
| } | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ steps.pr-sha.outputs.head_sha }} | |
| fetch-depth: 0 | |
| - name: Run Claude Code Review | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} | |
| prompt: Run /claude-review | |
| track_progress: true | |
| use_sticky_comment: true | |
| claude_args: | | |
| --model ${{ env.CLAUDE_OPUS_MODEL }} | |
| --max-turns 30 | |
| # Security-focused review: manual via @claude security comment only | |
| security-review: | |
| if: | | |
| github.event_name == 'issue_comment' && | |
| github.event.issue.pull_request && | |
| contains(github.event.comment.body, '@claude security') && | |
| ( | |
| github.event.comment.author_association == 'MEMBER' || | |
| github.event.comment.author_association == 'OWNER' || | |
| github.event.comment.author_association == 'COLLABORATOR' | |
| ) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| id-token: write | |
| steps: | |
| - name: Get PR SHA | |
| id: pr-sha | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| if (context.eventName === 'issue_comment') { | |
| const { data: pr } = await github.rest.pulls.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| pull_number: context.issue.number | |
| }); | |
| core.setOutput('head_sha', pr.head.sha); | |
| } else { | |
| core.setOutput('head_sha', context.payload.pull_request.head.sha); | |
| } | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ steps.pr-sha.outputs.head_sha }} | |
| fetch-depth: 2 | |
| - name: Run Claude Security Review | |
| uses: anthropics/claude-code-security-review@25e460eb0a12077f0c6a1934d5dbae2f50785dda | |
| with: | |
| claude-api-key: ${{ secrets.ANTHROPIC_API_KEY }} | |
| comment-pr: true | |
| upload-results: true | |
| exclude-directories: 'node_modules,dist,coverage,artifacts,cache,typechain' | |
| claudecode-timeout: '15' | |
| claude-model: ${{ env.CLAUDE_OPUS_MODEL }} | |
| custom-security-scan-instructions: '.github/prompts/security-scan.md' | |
| # Trail of Bits security skills: manual via @claude security comment only | |
| tob-security-skills: | |
| if: | | |
| github.event_name == 'issue_comment' && | |
| github.event.issue.pull_request && | |
| contains(github.event.comment.body, '@claude security') && | |
| ( | |
| github.event.comment.author_association == 'MEMBER' || | |
| github.event.comment.author_association == 'OWNER' || | |
| github.event.comment.author_association == 'COLLABORATOR' | |
| ) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 25 | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| id-token: write | |
| steps: | |
| - name: Get PR SHA | |
| id: pr-sha | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| if (context.eventName === 'issue_comment') { | |
| const { data: pr } = await github.rest.pulls.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| pull_number: context.issue.number | |
| }); | |
| core.setOutput('head_sha', pr.head.sha); | |
| core.setOutput('base_sha', pr.base.sha); | |
| } else { | |
| core.setOutput('head_sha', context.payload.pull_request.head.sha); | |
| core.setOutput('base_sha', context.payload.pull_request.base.sha); | |
| } | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ steps.pr-sha.outputs.head_sha }} | |
| fetch-depth: 0 | |
| - name: Check for Solidity changes | |
| id: solidity-changes | |
| uses: dorny/paths-filter@v3 | |
| with: | |
| base: ${{ steps.pr-sha.outputs.base_sha }} | |
| ref: ${{ steps.pr-sha.outputs.head_sha }} | |
| filters: | | |
| solidity: | |
| - 'solidity/**' | |
| - name: Run ToB Security Skills | |
| if: steps.solidity-changes.outputs.solidity == 'true' | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} | |
| prompt: Run /claude-tob-review | |
| track_progress: true | |
| use_sticky_comment: true | |
| claude_args: | | |
| --model ${{ env.CLAUDE_OPUS_MODEL }} | |
| --max-turns 25 | |
| # Interactive @claude mentions in comments | |
| interactive: | |
| if: | | |
| ( | |
| github.event_name == 'issue_comment' && | |
| contains(github.event.comment.body, '@claude') && | |
| !contains(github.event.comment.body, '@claude review') && | |
| !contains(github.event.comment.body, '@claude security') && | |
| ( | |
| github.event.comment.author_association == 'MEMBER' || | |
| github.event.comment.author_association == 'OWNER' || | |
| github.event.comment.author_association == 'COLLABORATOR' | |
| ) | |
| ) || | |
| ( | |
| github.event_name == 'pull_request_review_comment' && | |
| contains(github.event.comment.body, '@claude') && | |
| !contains(github.event.comment.body, '@claude security') && | |
| ( | |
| github.event.comment.author_association == 'MEMBER' || | |
| github.event.comment.author_association == 'OWNER' || | |
| github.event.comment.author_association == 'COLLABORATOR' | |
| ) | |
| ) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| issues: write | |
| id-token: write | |
| steps: | |
| - name: Get PR SHA | |
| id: pr-sha | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| let prNumber; | |
| if (context.eventName === 'issue_comment') { | |
| prNumber = context.issue.number; | |
| } else if (context.eventName === 'pull_request_review_comment') { | |
| prNumber = context.payload.pull_request.number; | |
| } | |
| if (prNumber) { | |
| const { data: pr } = await github.rest.pulls.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| pull_number: prNumber | |
| }); | |
| core.setOutput('head_sha', pr.head.sha); | |
| } | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ steps.pr-sha.outputs.head_sha || github.sha }} | |
| fetch-depth: 0 | |
| - name: Run Claude Code Assistant | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} | |
| track_progress: true | |
| use_sticky_comment: true | |
| claude_args: | | |
| --model ${{ env.CLAUDE_SONNET_MODEL }} | |
| --max-turns 20 |