| name | GitHub Publish Workflow |
| version | 1.1.0 |
| description | Полный цикл публикации open-source проекта на GitHub — от инициализации до релиза v1.0.0. Включает создание логотипа, проверку валидности SVG, шаблон README, MIT лицензию, pre-commit hooks, тесты, версионирование x.5, и публикацию релиза. |
| summary | Полный цикл публикации open-source проекта на GitHub — от инициализации до релиза v1.0.0. Включает создание логотипа, проверку валидности SVG, шаблон README, MIT лицензию, pre-commit hooks, тесты, версионирование x.5, и публикацию релиза. |
| audience | Разработчики, публикующие инструменты на GitHub |
| tags | ["github","open-source","release","semver","monetization","documentation","branding","harvest"] |
| trigger | ["выложить на гитхаб","сделать релиз","опубликовать проект","подготовить к публикации","версионирование","донаты","shields.io","README","gitignore","pre-commit","тесты","чистка кода","v0.5.0","LLM extraction","stealth","rate limiter","cache"] |
Цель
Опубликовать open-source проект на GitHub так, чтобы:
- Работал из коробки
- Не содержал личной информации и секретов
- Имел качественную документацию и примеры
- Поддерживал монетизацию через криптовалюты
- SemVer 0.0.1 step: 0.6.2 → 0.6.3 → 0.6.4 → 0.7.0. v1.0.0 = full product readiness.
Шаги
1. Инициализация репозитория
git init
echo '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path d="M50 10 L60 30 L80 30 L65 45 L70 65 L50 55 L30 65 L35 45 L20 30 L40 30 Z" fill="#F5D76E"/></svg>' > logo.svg
cat << 'EOF' > .gitignore
.harvest/
.env
*.log
*.pyc
__pycache__/
.DS_Store
*.swp
*.swo
*.db
*.sqlite
*.sqlite3
*.db-journal
*.bak
*.tmp
*.temp
*.orig
*.rej
*.egg-info/
dist/
build/
*.egg
*.whl
*.tar.gz
*.zip
EOF
2. README.md
Bilingual (Russian + English): All public repos use bilingual READMEs with anchor-based language switcher. See references/bilingual-readme.md for the template.
Structure:
# 🌾 Harvest
<p align="center">
<a href="#russian">🇷🇺 Русский</a> | <a href="#english">🇬🇧 English</a>
</p>
[](https://github.com/zad111ak-ai/harvest)
[](https://python.org)
[](LICENSE)
<a id="russian"></a>
## 🇷🇺 О проекте
... (Russian content first) ...
---
<a id="english"></a>
## 🇬🇧 About
... (English content second) ...
## 💖 Donate / Донаты
[](https://blockchain.info/address/bc1qd8sa7e4f696wmcyszuxh9snqt2n66zrhz9g80j)
[](https://etherscan.io/address/0xD26f0efE6A8F11e127c3Af3D6163BD458a1693c3)
[](https://tonviewer.com/UQAoI2i8P9-JeZhvGSUwKnymVyY5cb-1Rg7pdqoWMNena7DP)
[](https://solscan.io/address/99EtqBVTeF5UNp9a1oPi18iVXbXptTG7YQ6JeJvXMUJK)
## 📜 License / Лицензия
MIT
Pitfalls:
- Bilingual mandatory: Every public repo MUST have Russian + English sections. Russian goes first (primary audience).
- Language switcher: Use
<a id="..."> anchors + <p align="center"> nav bar at the very top, before badges.
- Donation table format: For repos with less content, use a simple table instead of shields.io badges — both formats are acceptable.
- Comparison table: Always include competitors relevant to the project
- Live examples: Always show real code snippets with output
- Donate badges: Always verify block explorer URLs (see references/donate-badges.md)
- Logo: Always use
logo.svg (not PNG, not GIF)
- Multi-repo batch updates: When updating multiple repos, commit each separately, then push all. Verify
git log -1 --oneline before pushing.
3. Версионирование
- SemVer 0.0.1 step: 0.6.2 → 0.6.3 → 0.6.4 → 0.7.0
- Теги:
git tag v0.6.3 && git push --tags
- Релиз:
gh release create v0.6.3 --notes "## v0.6.3 — ..."
4. Чистка перед публикацией
- Удалить:
- Личные конфиги (
config.yaml → config.example.yaml)
- Артефакты (GIF, лого старых версий, временные файлы)
- Секреты (API ключи, прокси, OAuth токены)
- Проверить:
git grep -i "proxy|secret|token|password" -- ".py" ".yaml" "*.md"
scripts/audit-secrets.sh
### 5. Тесты и хуки
- **Pre-commit:** ruff, black, pyright
- **Тесты:** `pytest tests/test_all.py` (минимум 75 тестов для v0.5.0)
- **Линтинг:** `ruff check .`
### 6. Публикация
```bash
gh repo create zad111ak-ai/harvest --public --source=. --remote=origin --push
git push origin main --tags
gh release create v0.5.0 --title "v0.5.0" --notes "## v0.5.0 — LLM Extraction + Enhanced Stealth..."
Post-Publication Profile & Repo Polish
After initial publish, batch-polish all repos for discoverability:
1. Shields.io Badges (README)
Add at the top of each README, after the H1:
[](https://github.com/OWNER/REPO)
[](https://github.com/OWNER/REPO)
[](https://github.com/OWNER/REPO)
[](https://github.com/OWNER/REPO)
[](LICENSE)
For repos with CI: add [](...).
Batch workflow: update README → git add -A && git commit → push. Do all repos, then push all.
2. Enable GitHub Discussions
gh api repos/OWNER/REPO --method PATCH -f has_discussions=true
Works via REST API. Do for all repos in one pass.
3. Good First Issues
Create beginner-friendly issues to attract contributors:
gh issue create --repo OWNER/REPO --title "Title" --label "good first issue" --body "Description..."
Pick issues that are real features/fixes, not manufactured busywork. Keep descriptions clear and scoped.
4. Pinned Repos (Profile) — MANUAL ONLY
⚠️ GitHub does NOT allow pinning repos via API (REST or GraphQL). No mutation exists — tested updateUserPinnedItems, updatePinnedItems, pinStarredRepository — all undefined on Mutation type. The addStar mutation works for starring but does not pin.
Only the web UI works: go to profile → "Customize your pins" → select up to 6 repos.
Always flag this as a manual step for the user at the end of a batch setup.
Pitfalls
Release Cadence
User preference: increment by 0.0.1 per release. v1.0.0 = full product readiness.
- 0.6.2 → 0.6.3 → 0.6.4 → 0.7.0
- No breaking changes until v1.0.0
Release checklist:
python3 -m pytest tests/test_all.py -x -q
ruff check harvest/
git add -A && git commit -m "v0.6.X — description"
git tag v0.6.X
git push origin main --tags
gh release create v0.6.X --generate-notes
References