Install
$ agentstack add skill-d-oit-gemini-search-plugin-github-repo-management ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
GitHub Repository Management for Claude Code Plugins
This skill provides comprehensive guidance for managing GitHub repositories that host Claude Code plugins, including issue tracking, pull request workflows, release management, and CI/CD automation.
When to Use This Skill
Invoke this skill when the user:
- Wants to create or manage GitHub issues
- Needs help with pull request workflows
- Wants to set up or modify GitHub Actions CI/CD
- Asks about release management and versioning
- Needs to create GitHub releases
- Wants to automate repository workflows
- Asks about GitHub best practices for plugins
- Needs to set up branch protection or repository settings
- Wants to use GitHub Projects or milestones
- Needs help with GitHub Packages
Repository Structure for Claude Code Plugins
my-plugin/
├── .github/
│ ├── workflows/
│ │ ├── ci.yml # Continuous integration
│ │ ├── release.yml # Release automation
│ │ ├── pr-checks.yml # Pull request validation
│ │ └── package.yml # Package publishing
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── feature_request.md
│ │ └── config.yml
│ └── PULL_REQUEST_TEMPLATE.md
├── .claude-plugin/
│ ├── plugin.json
│ └── marketplace.json
├── commands/
├── agents/
├── hooks/
├── scripts/
├── tests/
├── CHANGES.md # Changelog
├── CONTRIBUTING.md # Contribution guidelines
├── README.md
└── LICENSE
GitHub Issues Management
1. Issue Templates
Create .github/ISSUE_TEMPLATE/bug_report.md:
---
name: Bug Report
about: Report a bug or unexpected behavior
title: '[BUG] '
labels: bug
assignees: ''
---
## Description
A clear and concise description of the bug.
## Steps to Reproduce
1. Go to '...'
2. Run command '...'
3. See error
## Expected Behavior
What you expected to happen.
## Actual Behavior
What actually happened.
## Environment
- Claude Code Version: [e.g., 1.0.0]
- Plugin Version: [e.g., 0.2.0]
- OS: [e.g., macOS 14.0, Ubuntu 22.04, Windows 11]
- Shell: [e.g., bash 5.2, zsh 5.9]
## Screenshots/Logs
If applicable, add screenshots or log output.
## Additional Context
Any other context about the problem.
Create .github/ISSUE_TEMPLATE/feature_request.md:
---
name: Feature Request
about: Suggest a new feature or enhancement
title: '[FEATURE] '
labels: enhancement
assignees: ''
---
## Feature Description
A clear and concise description of the feature you'd like.
## Use Case
Describe the problem this feature would solve or the workflow it would improve.
## Proposed Solution
How you envision this feature working.
## Alternatives Considered
Other approaches you've considered.
## Additional Context
Any other context, mockups, or examples.
## Benefit
Who would benefit from this feature and how?
Create .github/ISSUE_TEMPLATE/config.yml:
blank_issues_enabled: false
contact_links:
- name: Documentation
url: https://github.com/owner/repo#readme
about: Check the documentation first
- name: Discussions
url: https://github.com/owner/repo/discussions
about: Ask questions and discuss ideas
2. Issue Labels
Recommended label structure:
Type Labels:
bug(red) - Something isn't workingenhancement(blue) - New feature or requestdocumentation(light blue) - Documentation improvementsquestion(purple) - Further information requestedrefactor(orange) - Code refactoring
Priority Labels:
priority/critical(dark red) - Critical issue requiring immediate attentionpriority/high(orange) - High prioritypriority/medium(yellow) - Medium prioritypriority/low(green) - Low priority
Status Labels:
status/in-progress(yellow) - Being worked onstatus/blocked(red) - Blocked by dependenciesstatus/needs-review(blue) - Needs review or feedbackstatus/wontfix(dark gray) - Won't be addressed
Area Labels:
area/commands- Slash commandsarea/agents- Agent functionalityarea/hooks- Hook systemarea/ci- CI/CD workflowsarea/docs- Documentation
Size Labels:
size/XS- Very small changesize/S- Small changesize/M- Medium changesize/L- Large changesize/XL- Very large change
3. Using GitHub CLI for Issues
# List issues
gh issue list
gh issue list --label bug --state open
# Create issue
gh issue create --title "Bug: Command fails with error" --body "Description of the bug"
gh issue create --label bug,priority/high
# View issue
gh issue view 123
# Comment on issue
gh issue comment 123 --body "Working on this now"
# Close issue
gh issue close 123 --comment "Fixed in v0.2.1"
# Reopen issue
gh issue reopen 123
# Assign issue
gh issue edit 123 --add-assignee @me
# Add labels
gh issue edit 123 --add-label bug,priority/high
# Link to PR
gh issue comment 123 --body "Fixed in #124"
4. Issue Management Best Practices
Triage Process:
- Review new issues daily
- Add appropriate labels
- Ask for clarification if needed
- Set priority and milestone
- Assign if ready to work on
Issue Templates:
- Use templates to ensure consistent information
- Require environment details for bugs
- Ask for use cases in feature requests
Communication:
- Respond to new issues within 48 hours
- Keep reporters updated on progress
- Use clear, friendly language
- Link related issues and PRs
Pull Request Workflows
1. Pull Request Template
Create .github/PULL_REQUEST_TEMPLATE.md:
## Description
Brief description of what this PR does.
## Type of Change
- [ ] Bug fix (non-breaking change fixing an issue)
- [ ] New feature (non-breaking change adding functionality)
- [ ] Breaking change (fix or feature causing existing functionality to change)
- [ ] Documentation update
- [ ] Refactoring (no functional changes)
- [ ] Performance improvement
- [ ] Test improvements
## Related Issues
Closes #(issue number)
Related to #(issue number)
## Changes Made
- Change 1
- Change 2
- Change 3
## Testing
- [ ] Added/updated tests
- [ ] All tests pass locally
- [ ] Tested manually
### Test Plan
1. Step to test
2. Expected result
## Checklist
- [ ] Code follows project style guidelines
- [ ] Self-reviewed the code
- [ ] Commented complex code sections
- [ ] Updated documentation (if applicable)
- [ ] Updated CHANGES.md
- [ ] No new warnings introduced
- [ ] Added tests for new functionality
- [ ] All tests pass
## Screenshots/Logs
If applicable, add screenshots or log output.
## Additional Notes
Any additional context or notes for reviewers.
2. PR Workflow with GitHub Actions
Create .github/workflows/pr-checks.yml:
name: PR Checks
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
pr-title-check:
name: PR Title Check
runs-on: ubuntu-latest
steps:
- name: Check PR title format
uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: |
feat
fix
docs
style
refactor
perf
test
chore
revert
requireScope: false
size-check:
name: PR Size Check
runs-on: ubuntu-latest
steps:
- name: Check PR size
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const additions = pr.additions;
const deletions = pr.deletions;
const totalChanges = additions + deletions;
let label = '';
if (totalChanges 1000) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: '⚠️ This PR is quite large (1000+ lines changed). Consider breaking it into smaller PRs for easier review.'
});
}
changes-check:
name: Check CHANGES.md Updated
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check if CHANGES.md was updated
id: changes_check
run: |
git fetch origin ${{ github.base_ref }}
if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -q "CHANGES.md"; then
echo "updated=true" >> $GITHUB_OUTPUT
else
echo "updated=false" >> $GITHUB_OUTPUT
fi
- name: Comment if CHANGES.md not updated
if: steps.changes_check.outputs.updated == 'false'
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: '📝 Reminder: Please update CHANGES.md with your changes if applicable.'
})
conflict-check:
name: Check for Merge Conflicts
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check for merge conflicts
run: |
git fetch origin ${{ github.base_ref }}
if ! git merge-tree $(git merge-base HEAD origin/${{ github.base_ref }}) HEAD origin/${{ github.base_ref }} | grep -q "^> $GITHUB_OUTPUT
- name: Validate version in plugin.json
run: |
PLUGIN_VERSION=$(jq -r '.version' plugin.json)
TAG_VERSION="${{ steps.tag_version.outputs.VERSION }}"
if [ "$PLUGIN_VERSION" != "$TAG_VERSION" ]; then
echo "Version mismatch: plugin.json has $PLUGIN_VERSION but tag is $TAG_VERSION"
exit 1
fi
- name: Validate version in marketplace.json
run: |
MARKETPLACE_VERSION=$(jq -r '.plugins[0].version' .claude-plugin/marketplace.json)
TAG_VERSION="${{ steps.tag_version.outputs.VERSION }}"
if [ "$MARKETPLACE_VERSION" != "$TAG_VERSION" ]; then
echo "Version mismatch: marketplace.json has $MARKETPLACE_VERSION but tag is $TAG_VERSION"
exit 1
fi
create-release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: validate-version
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Extract tag version
id: tag_version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Extract changelog for version
id: changelog
run: |
VERSION="${{ steps.tag_version.outputs.VERSION }}"
if [ -f CHANGES.md ]; then
NOTES=$(sed -n "/## \[${VERSION}\]/,/## \[/p" CHANGES.md | sed '$d' | tail -n +2)
if [ -z "$NOTES" ]; then
NOTES="Release ${VERSION}"
fi
else
NOTES="Release ${VERSION}"
fi
echo "$NOTES" > release_notes.txt
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.ref_name }}
name: Release ${{ steps.tag_version.outputs.VERSION }}
body_path: release_notes.txt
draft: false
prerelease: false
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create release archive
run: |
VERSION="${{ steps.tag_version.outputs.VERSION }}"
tar -czf plugin-${VERSION}.tar.gz \
--exclude='.git' \
--exclude='.github' \
--exclude='tests' \
--exclude='*.log' \
--exclude='/tmp' \
--warning=no-file-changed \
. || [ $? -eq 1 ]
- name: Upload release archive
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.ref_name }}
files: plugin-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
notify:
name: Post-Release Notifications
runs-on: ubuntu-latest
needs: create-release
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Extract version
id: version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Create success comment
run: |
echo "✅ Release ${{ steps.version.outputs.VERSION }} published successfully!"
echo "📦 Installation: /plugin add https://github.com/${{ github.repository }}"
Step 4: Verify Release
# Check release on GitHub
gh release view v0.2.0
# List all releases
gh release list
# Test installation
/plugin add https://github.com/owner/repo
4. Using GitHub CLI for Releases
# Create release manually
gh release create v0.2.0 --title "Release v0.2.0" --notes "Release notes here"
# Create release with files
gh release create v0.2.0 plugin.tar.gz --title "Release v0.2.0"
# Create draft release
gh release create v0.2.0 --draft --notes "Draft release"
# Create pre-release
gh release create v0.2.0-beta.1 --prerelease
# View release
gh release view v0.2.0
# List releases
gh release list
# Delete release
gh release delete v0.2.0
# Download release assets
gh release download v0.2.0
# Upload additional assets to existing release
gh release upload v0.2.0 additional-file.zip
Continuous Integration (CI)
1. Basic CI Workflow
Create .github/workflows/ci.yml:
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
shellcheck:
name: ShellCheck Linting
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
with:
scandir: './scripts'
severity: warning
- name: Run ShellCheck on hooks
uses: ludeeus/action-shellcheck@master
with:
scandir: './hooks'
severity: warning
json-validation:
name: JSON Validation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq
- name: Validate plugin.json
run: jq empty .claude-plugin/plugin.json
- name: Validate marketplace.json
run: jq empty .claude-plugin/marketplace.json
- name: Validate hooks.json (if exists)
run: |
if [ -f hooks/hooks.json ]; then
jq empty hooks/hooks.json
fi
integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y jq bats
- name: Set up test environment
run: |
mkdir -p /tmp/test-cache
mkdir -p /tmp/test-logs
- name: Run integration tests
run: |
if [ -f tests/run-integration-tests.sh ]; then
bash tests/run-integration-tests.sh
else
echo "No integration tests found"
fi
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: |
/tmp/test-logs/*.log
security-scan:
name: Security Scanning
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Trivy security scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
format: 'sarif'
output: 'trivy-resul
…
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [d-oit](https://github.com/d-oit)
- **Source:** [d-oit/gemini-search-plugin](https://github.com/d-oit/gemini-search-plugin)
- **License:** MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.