Open Source Release
by @jini92
Convert a private repository to public open-source. Use when making a repo public, sanitizing personal info from code/docs/git history, or preparing a projec...
clawhub install opensource-releaseπ About This Skill
name: opensource-release description: Convert a private repository to public open-source. Use when making a repo public, sanitizing personal info from code/docs/git history, or preparing a project for open-source release. Triggers on "open source", "make public", "public release", "sanitize repo".
Open Source Release
Safely convert a private repo to public by sanitizing personal data and cleaning history.
Pre-flight Checklist
1. Scan source code β search for:
- Absolute paths: C:\Users\, home directory references
- Usernames: OS-specific account names
- Internal hostnames / port names
- API keys / tokens: .env, hardcoded secrets
- Email / phone numbers in commit author config
2. Check cached artifacts β ensure .gitignore covers:
- Binary caches (.pkl, .db, checksums.json)
- __pycache__/, node_modules/, .env, *.egg-info/
- Project-specific cache directories
Sanitization Steps
Step 1: Code Scan
# Find hardcoded paths and usernames
Get-ChildItem -Recurse -Include "*.py","*.ps1","*.js","*.ts" |
Select-String -Pattern "C:\\Users|/home/|your-username" -SimpleMatch |
Where-Object { $_.Path -notmatch "__pycache__|node_modules|\.git" }
Fix: replace with environment variables (os.environ.get / process.env) and add a .env.example.
Step 2: Docs Scan
Get-ChildItem -Recurse -Include "*.md","*.txt","*.yaml","*.yml" |
Select-String -Pattern "C:\\Users|/home/|your-username" -SimpleMatch |
Where-Object { $_.Path -notmatch "node_modules|\.git" }
Replace personal paths with generic placeholders ($VAULT_PATH, ~/vault, etc.).
Step 3: Git History Analysis
git log --all -p | Select-String -Pattern "SENSITIVE_TERM" | Select-Object -First 50
git log --all --diff-filter=A -- "cache/*"
Choose a strategy:
Step 4: Clean Push (Option B)
git checkout --orphan clean-main
git add -A
git commit -m "feat: initial public release"
git remote set-url origin https://github.com/{owner}/{repo}.git # verify no token in URL!
git branch -M main
git push origin main --force
git push origin --delete {old-branch}
Step 5: Make Public
gh repo edit {owner}/{repo} --visibility public --accept-visibility-change-consequences --description "Short description"
Step 6: Verify
# Final scan for sensitive strings
Get-ChildItem -Recurse -Include "*.py","*.md","*.yaml","*.js","*.ts" |
Select-String -Pattern "SENSITIVE_TERM" -SimpleMatch |
Where-Object { $_.Path -notmatch "__pycache__|node_modules|\.git" }Confirm remote URL has no token
git remote -vConfirm visibility
gh repo view {owner}/{repo} --json visibility
Step 7: Post-Release Housekeeping (Optional)
Gotchas
.gitignore may already be in history β check carefully.env files β add to .gitignore if not already there