Skip to content

chore(deps-dev): update mypy requirement from >=1.0.0 to >=1.19.1 #4

chore(deps-dev): update mypy requirement from >=1.0.0 to >=1.19.1

chore(deps-dev): update mypy requirement from >=1.0.0 to >=1.19.1 #4

name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
branches: [dev, main]
paths:
# Python files
- '**.py'
# Documentation
- '**.md'
- 'CLAUDE.md'
- 'README.md'
# Configuration
- 'pyproject.toml'
- '.github/**'
# ASO skill structure
- 'app-store-optimization/**'
- '.claude/**'
jobs:
pr-labeling:
name: Label PR Size
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Label PR by size
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const additions = pr.additions;
const deletions = pr.deletions;
const changes = additions + deletions;
let sizeLabel;
if (changes < 50) {
sizeLabel = 'size: XS';
} else if (changes < 200) {
sizeLabel = 'size: S';
} else if (changes < 500) {
sizeLabel = 'size: M';
} else if (changes < 1000) {
sizeLabel = 'size: L';
} else {
sizeLabel = 'size: XL';
}
// Remove old size labels
const labels = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
});
for (const label of labels.data) {
if (label.name.startsWith('size: ')) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
name: label.name,
});
}
}
// Add new size label
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
labels: [sizeLabel],
});
console.log(`Added label: ${sizeLabel} (${changes} changes)`);
// Warn if PR is too large
if (changes > 500) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: `⚠️ **Large PR Alert**: This PR has ${changes} changes. Consider breaking it into smaller PRs for easier review and to reduce merge conflicts.\n\n**Recommendation**: Aim for <200 changes per PR for optimal velocity.`,
});
}
claude-review:
name: Claude Code Review
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}
Please review this ASO skill pull request and provide focused feedback on:
**ASO-Specific Concerns:**
- Character limit validation (Apple: title 30, subtitle 30, keywords 100; Google: title 50, short desc 80)
- Platform-specific logic correctness (Apple App Store vs Google Play Store)
- Keyword analysis accuracy and relevance scoring
- Metadata optimization quality (clear, actionable recommendations)
- No external dependencies (standard library only)
**Code Quality:**
- Python best practices (PEP 8 compliance via ruff)
- Type hints and function signatures
- Docstring completeness for public functions
- Error handling and edge cases
- Performance considerations (especially for iTunes API calls)
**Security:**
- No hardcoded credentials or API keys
- Safe URL handling and input validation
- Proper data sanitization
**Documentation:**
- README.md accuracy for feature changes
- CHANGELOG.md updates following Keep a Changelog format
- Inline comments for complex ASO logic
Use the repository's CLAUDE.md for ASO skill context and structure. Be concise and actionable.
Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'