gh-oss-release-prep
Skill15 starsChanged 9 days agoMITView on GitHub
Systematic OSS release preparation checklist. Use when preparing a repository for open-source publishing, making a project public, or ensuring a repo meets OSS standards. Triggers: "prepare for OSS", "ready to publish", "make this public", "OSS checklist", "scan repo for publish", "open source this", "/oss-release-prep"
- Reads credentials
- Installs packages
In this repository31 other files it gives its agents.
- claude-permissions-auditSkill
- claude-skill-orchestration-auditSkill
- claude-skill-prereq-auditSkill
- claude-skill-spec-auditSkill
- dev-cli-consistency-auditSkill
- dev-code-qualitySkill
- dev-new-toolSkill
- dev-software-designSkill
- gh-dep-pr-triageSkill
- gh-issue-reportSkill
- gh-org-chartSkill
- gh-oss-go-bumpSkill
- gh-oss-releaseSkill
- gh-review-triageSkill
- git-conventional-commitSkill
- gws-meeting-schedulerSkill
- p-activity-digestSkill
- p-blog-post-miningSkill
- p-blog-writerSkill
- p-clipboard-copySkill
- p-daily-reflectionSkill
- p-daily-reportSkill
- p-daily-standupSkill
- p-ego-searchSkill
- p-md-to-slidesSkill
- p-meeting-prepSkill
- p-news-briefingSkill
- project-namerSkill
- p-slack-triageSkill
- p-violentmonkey-userscript-syncSkill
- restaurant-searchSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. About 0 are common, 15 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈15
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 23
Before creating any file from scratch, check the user's sibling repositories for existing conventions.
- Very specific: line 26
Look at sibling directories (e.g., ls ../) for other repos by the same user
- Distinctive: line 32
Before starting, determine the project type — this affects which steps apply:
- Distinctive: line 46
Read the project structure (directories, key files)
- Very specific: line 47
Check for existing README, LICENSE, CONTRIBUTING, CODE_OF_CONDUCT
- Distinctive: line 49
Check for any sensitive files (.env, credentials, API keys, internal URLs)
- Distinctive: line 70
Check all dependencies for license compatibility:
- Distinctive: line 73
If attribution is required, create or update a NOTICES file
- Distinctive: line 100
Run linters and fix all issues before proceeding:
- Distinctive: line 103
Ensure public API documentation exists (exported functions/types have comments)
- Distinctive: line 104
Search for and remove TODO/FIXME comments that reference internal context
- Distinctive: line 105
Run tests, verify they pass
- Distinctive: line 112
Test + lint workflow (on push/PR)
- Very specific: line 123
No release workflow needed (tags are sufficient for go get / npm)
- Distinctive: line 150
If all checks pass, confirm with user before any publishing steps
- Distinctive: line 151
Commit all changes in a single commit (or logical groups)
- Distinctive: line 161
Goreleaser for a library: Don't add it. Libraries don't need binary releases.
- Very specific: line 162
Missing .gitignore entries: Add OS-specific (.DS_Store), IDE-specific (.vscode/, .idea/), and language-specific entries
- Distinctive: line 163
Internal references: Search for company-internal URLs, Slack channels, or employee names in code and docs
- Very specific: line 164
Inconsistent naming: Ensure the project name is consistent across README, package.json/go.mod, and CLI help text
- Distinctive: line 220
Read the appropriate reference file for templates and conventions before creating config files:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OSS Release Preparation
Systematic workflow to prepare a repository for open-source publishing. Covers code quality, licensing, documentation, CI, and release readiness.
Key Principle: Convention Reuse
Before creating any file from scratch, check the user's sibling repositories for existing conventions. Users maintain consistency across their repos — reuse their LICENSE text, .golangci.yml, .gitignore, .github/workflows, .goreleaser.yaml, etc. from a recent, well-maintained repo.
How to find conventions:
- Look at sibling directories (e.g.,
ls ../) for other repos by the same user - Pick a recently-updated repo with similar characteristics (same language, similar type)
- Copy config files, adapting only what's project-specific (binary name, module path)
Step 0: Classify the Project
Before starting, determine the project type — this affects which steps apply:
| Type | Has main.go / binary output | Needs goreleaser | Needs package registry |
| CLI tool / binary | Yes | Yes | Homebrew tap, etc. |
| Library / module | No | No | go get / npm / PyPI |
| Both (tool + importable pkg) | Yes | Yes | Both |
This classification drives decisions in Steps 3-6. Don't suggest goreleaser for a library. Don't skip install instructions for a binary.
Step 1: Repository Scan
Scan the repo and a sibling repo (for conventions):
- Read the project structure (directories, key files)
- Check for existing README, LICENSE, CONTRIBUTING, CODE_OF_CONDUCT
- Identify the primary language and build system
- Check for any sensitive files (.env, credentials, API keys, internal URLs)
- Review .gitignore for completeness
- Scan a sibling repo for: LICENSE, .gitignore, linter config, .github/workflows, .goreleaser.yaml
Report findings as a checklist:
Repository Scan:
- [x/!] README.md exists
- [x/!] LICENSE file exists
- [x/!] .gitignore is comprehensive
- [x/!] .golangci.yml / linter config exists
- [x/!] .github/workflows exists (CI)
- [x/!] No sensitive files detected
- [x/!] No hardcoded internal URLs or secrets
- Reference repo for conventions: <sibling-repo-name>Step 2: License & Dependency Audit
- Identify the intended license (check sibling repos first, default: MIT)
- Check all dependencies for license compatibility:
- Direct dependencies: list each with its license
- Flag any copyleft (GPL, AGPL) dependencies that conflict with the chosen license
- If attribution is required, create or update a NOTICES file
- Copy LICENSE from sibling repo, updating year if needed
Step 3: README Quality Check
Evaluate and improve the README:
- Required sections (create if missing):
- Project name and tagline (concise, memorable)
- What it does (1-2 sentences)
- Installation instructions (adapt based on project type —
go getfor libraries,go install/brew for CLIs) - Quick start / basic usage
- License
- Recommended sections (suggest if missing):
- Features list
- Configuration options
- Contributing guidelines (or link to CONTRIBUTING.md)
- Quality checks:
- Does the README match the actual CLI/API interface?
- Are code examples up to date and runnable?
- Is the installation method documented correctly?
Step 4: Code Quality Review
- Copy linter config from sibling repo if missing (.golangci.yml, .eslintrc, etc.)
- Run linters and fix all issues before proceeding:
- Go:
golangci-lint run ./...— fix errcheck, unused, etc. - Node/TS: check
package.jsonscripts for lint commands
- Go:
- Ensure public API documentation exists (exported functions/types have comments)
- Search for and remove TODO/FIXME comments that reference internal context
- Run tests, verify they pass
Step 5: CI/CD Setup
Copy CI configuration from sibling repo, adapting project-specific values:
For all projects:
- Test + lint workflow (on push/PR)
permissions: contents: readat the top of every read-only workflow (test, lint, license); grantwriteonly in release/publish workflows.github/CODEOWNERS(* @<owner>)- Dependabot or Renovate config for dependency updates (no
reviewerskey in dependabot.yml; CODEOWNERS handles review requests) - License check workflow (on dependency changes)
For CLI tools / binaries only:
- Release workflow with goreleaser (on tag push)
.goreleaser.yamlif missing
For libraries only:
- No release workflow needed (tags are sufficient for
go get/ npm)
Step 6: Release Readiness Checklist
Present the final checklist (items vary by project type):
OSS Release Readiness:
- [ ] LICENSE file is correct and complete
- [ ] All dependency licenses are compatible
- [ ] README is comprehensive and accurate
- [ ] No secrets, internal URLs, or sensitive data in code
- [ ] .gitignore covers build artifacts, IDE files, OS files
- [ ] Linter config exists and passes with no errors
- [ ] CI workflows exist (test, lint, license check) with least-privilege `permissions`
- [ ] .github/CODEOWNERS exists; dependabot.yml has no `reviewers`
- [ ] README's required language version matches go.mod / engines
- [ ] Tests pass
- [ ] Version/tag strategy defined (semver); libraries have at least one semver tag
- [ ] [CLI only] Release automation configured (goreleaser)
- [ ] [CLI only] Homebrew tap / package registry configuredFor each unchecked item, provide the specific fix needed.
Step 7: Final Actions
- If all checks pass, confirm with user before any publishing steps
- Commit all changes in a single commit (or logical groups)
- Push and verify CI passes
- Suggest next steps:
- Libraries: tag a semver release (e.g.
v0.1.0), verifygo get/ npm install resolves the tag (not a pseudo-version) - CLI tools: tag release, verify goreleaser produces artifacts, update Homebrew tap
- Libraries: tag a semver release (e.g.
Common Issues
- Missing linter config: Copy from sibling repo — don't create from scratch
- Missing CI workflows: Copy from sibling repo — adapt binary name and module path only
- Goreleaser for a library: Don't add it. Libraries don't need binary releases.
- Missing .gitignore entries: Add OS-specific (
.DS_Store), IDE-specific (.vscode/,.idea/), and language-specific entries - Internal references: Search for company-internal URLs, Slack channels, or employee names in code and docs
- Inconsistent naming: Ensure the project name is consistent across README, package.json/go.mod, and CLI help text
- Linter errors on first run: Fix them immediately — don't ship with lint failures. Common: errcheck (use
_ =for intentionally ignored errors), unused imports, missing comments on exports.
Examples
Example 1: Go CLI tool
User: "prepare this for OSS"
Action:
1. Classify: CLI tool (has main.go)
2. Find sibling repo with .goreleaser.yaml for conventions
3. Scan repo structure, check for sensitive files
4. Copy LICENSE, .gitignore, .golangci.yml from sibling
5. Check go.mod dependencies for license compatibility
6. Ensure README matches `--help` output
7. Run golangci-lint, fix all errors
8. Copy .github/workflows (test, license, release) from sibling
9. Copy .goreleaser.yaml from sibling, update binary name
10. Present checklist, commit, pushExample 2: Go library
User: "make this repo public"
Action:
1. Classify: library (no main.go, no binary output)
2. Find sibling repo for conventions
3. Scan repo, check for sensitive files
4. Copy LICENSE, .gitignore, .golangci.yml from sibling
5. Check dependency licenses
6. Ensure README has go get install + usage examples
7. Run golangci-lint, fix all errors
8. Copy .github/workflows (test, license only — NO release/goreleaser)
9. Present checklist, commit, pushExample 3: Node.js library
User: "open source this"
Action:
1. Classify: library (no bin in package.json)
2. Find sibling repo for conventions
3. Scan for .env files, hardcoded URLs
4. Copy LICENSE, .gitignore from sibling
5. Check package.json dependencies' licenses
6. Ensure README has npm install + usage + API docs
7. Run configured lint/test scripts, fix issues
8. Copy .github/workflows from sibling (test only)
9. Present checklist, commit, pushLanguage References
Read the appropriate reference file for templates and conventions before creating config files:
- Go:
references/go-conventions.md— .golangci.yml, .gitignore, .github/workflows, .goreleaser.yaml, dependabot, errcheck fixes
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

