Claude-skill-registry getting-pr-artifacts
Use when needing workflow artifacts from PR - runs in subagent to find jobs with artifacts, returns gh commands to download them without consuming context
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/getting-pr-artifacts" ~/.claude/skills/majiayu000-claude-skill-registry-getting-pr-artifacts && rm -rf "$T"
skills/data/getting-pr-artifacts/SKILL.mdGetting PR Artifacts
Overview
Find workflow jobs that produced artifacts and provide commands to download them.
Core principle: Return download commands, not artifacts themselves. Artifacts can be large (100MB+).
REQUIRED BACKGROUND: Use
awaiting-pr-workflows first to ensure workflows are complete.
When to Use
Use when you need:
- List of available artifacts from PR workflows
- Commands to download specific artifacts
- Info about artifact contents (name, size)
When NOT to use:
- Workflows still running (use
)awaiting-pr-workflows - Need to actually download/analyze artifacts (use returned commands)
Workflow
Step 1: Get Workflow Runs for PR
# Get PR commit PR_COMMIT=$(gh pr view $PR_NUM --json headRefOid -q '.headRefOid') # Get runs for this commit gh run list --commit $PR_COMMIT --json databaseId,name,conclusion
Step 2: Check Each Run for Artifacts
RUN_ID=<from step 1> # List artifacts for this run gh run view $RUN_ID --json artifacts --jq '.artifacts[] | { name: .name, size: .size_in_bytes, expired: .expired, id: .id }'
Step 3: Build Download Commands
For each artifact, provide:
- Artifact name and size
- Which job/run it's from
command to downloadgh- Suggested extraction commands (if zip/tar)
Return Format
PR #{number} Workflow Artifacts (commit {sha}): ## Available Artifacts ### Run: iOS Test (id: 19727163744) #### 1. ios-e2e-test-results (24.3 MB) **Download:** ```bash gh run download 19727163744 -n ios-e2e-test-results -D /tmp/ios-artifacts
Contents: Likely xcresult bundle, screenshots, logs
Extract/Analyze:
# List contents ls -lh /tmp/ios-artifacts/ # If it's a zip: unzip -l /tmp/ios-artifacts/ios-e2e-test-results.zip # For xcresult bundles (iOS-specific): # See the 'using-ios-xcresult-artifacts' skill
2. test-coverage-report (1.2 MB)
Download:
gh run download 19727163744 -n test-coverage-report -D /tmp/coverage
Contents: HTML coverage report
View:
open /tmp/coverage/index.html
Run: Backend Test (id: 19727163743)
No artifacts produced
Summary: 2 artifacts available (25.5 MB total) List all:
gh run list --commit {sha} | while read id; do gh run view $id --json artifacts; done
## Common Artifact Types ### iOS/Xcode Artifacts - `*.xcresult` - Test results bundle (use `using-ios-xcresult-artifacts` skill) - `*.app` - Application bundle - `*.ipa` - iOS app package - `screenshots/` - UI test screenshots ### Test Artifacts - `coverage/` - Code coverage reports (HTML/XML) - `test-results.xml` - JUnit test results - `*.log` - Test execution logs ### Build Artifacts - `dist/` - Built application files - `*.tar.gz` - Compressed build outputs - `build-logs/` - Compilation logs ## Download Strategies ### Download Single Artifact ```bash # By name gh run download $RUN_ID -n artifact-name -D /destination # All artifacts from run gh run download $RUN_ID -D /destination
Download to Specific Location
# Project-local (in .gitignore) gh run download $RUN_ID -n ios-results -D .artifacts/ # System temp (cleaned automatically) gh run download $RUN_ID -n ios-results -D /tmp/pr-artifacts/ # User's Downloads gh run download $RUN_ID -n ios-results -D ~/Downloads/
Check Before Downloading Large Files
# Get size first SIZE=$(gh api repos/{owner}/{repo}/actions/runs/$RUN_ID/artifacts \ --jq '.artifacts[] | select(.name == "ios-results") | .size_in_bytes') # Convert to MB SIZE_MB=$((SIZE / 1024 / 1024)) echo "Artifact is ${SIZE_MB}MB" # Ask user if > 50MB if [ $SIZE_MB -gt 50 ]; then echo "Large artifact. Proceed? (y/n)" fi
Example Implementation
#!/bin/bash # Run in subagent PR_NUM=$1 PR_COMMIT=$(gh pr view $PR_NUM --json headRefOid -q '.headRefOid') REPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner') # Get all runs RUN_IDS=$(gh run list --commit $PR_COMMIT --json databaseId -q '.[].databaseId') # For each run, check for artifacts for RUN_ID in $RUN_IDS; do RUN_NAME=$(gh run view $RUN_ID --json name -q '.name') ARTIFACTS=$(gh api "repos/$REPO/actions/runs/$RUN_ID/artifacts" \ --jq '.artifacts[] | {name: .name, size: .size_in_bytes}') if [ -n "$ARTIFACTS" ]; then echo "## Run: $RUN_NAME (id: $RUN_ID)" echo "$ARTIFACTS" | jq -r '"### \(.name) (\(.size / 1024 / 1024 | floor)MB)"' echo "Download: gh run download $RUN_ID -n {name} -D /tmp/artifacts" fi done
Common Mistakes
Downloading artifacts in main context
- Problem: Wastes tokens, slows down session
- Fix: Return commands, let user decide what to download
Not checking artifact size
- Problem: Downloads 500MB file unexpectedly
- Fix: Always show size, warn if large
Not suggesting next steps
- Problem: User has artifacts but doesn't know what to do
- Fix: Include extraction/viewing commands for common types
Quick Reference
| Task | Command |
|---|---|
| List artifacts for run | |
| Download by name | |
| Download all from run | |
| Get artifact metadata | |
| List all for commit | then check each |
Integration with Other Skills
For xcresult bundles: After downloading iOS test artifacts, use the
using-ios-xcresult-artifacts skill to analyze them.
For logs in artifacts: If logs are packaged in artifacts rather than workflow logs, download first then analyze locally.
Use Subagents
CRITICAL: Always run in subagent.
Use Task tool with subagent_type='general-purpose'. Give them this skill and the PR number. They return artifact list + download commands.
Why: Prevents downloading large files into context. Main agent gets commands and can selectively download.