diff --git a/BRANCH_SETUP_COMPLETE.md b/BRANCH_SETUP_COMPLETE.md new file mode 100644 index 0000000..9d7a175 --- /dev/null +++ b/BRANCH_SETUP_COMPLETE.md @@ -0,0 +1,353 @@ +# ✅ Branch Strategy Setup Complete! + +## 🌳 Branches Created + +Your POTE repository now has three branches: + +``` +✅ main (production) - PROTECTED +✅ qa (staging) - Ready to protect +✅ dev (development) - Ready to protect +``` + +**Current status:** +- `main` is already protected (you saw the error - that's good!) +- New documentation committed to `dev` branch +- Ready to configure protection for `qa` and `dev` + +--- + +## 🔒 Next Steps: Configure Branch Protection + +### Go to Gitea: https://git.levkin.ca/ilia/POTE/settings/branches + +### 1. Protect `main` (Production) - Already Done! ✅ + +Your `main` branch is already protected (we couldn't push directly to it). + +**Verify settings:** +- Branch name pattern: `main` +- ✅ Enable push protection +- ✅ Require pull request +- ✅ Require approvals: 1 (or 2 for production) +- ✅ Require status checks +- ✅ Block force push +- ✅ Block deletion + +### 2. Protect `qa` (Staging) - TODO + +Click "Add New Rule": +- Branch name pattern: `qa` +- ✅ Enable push protection +- ✅ Require pull request +- ✅ Require 1 approval +- ✅ Require status checks to pass +- ✅ Block force push +- ✅ Block deletion + +### 3. Configure `dev` (Development) - TODO + +Click "Add New Rule": +- Branch name pattern: `dev` +- ✅ Require status checks to pass (CI must pass) +- ⚠️ Allow direct push (for rapid development) +- ✅ Block force push (optional) + +--- + +## 📋 What You're Missing (Checklist) + +### ✅ Already Have: +- [x] Three branches (main, qa, dev) +- [x] Main branch protection +- [x] Comprehensive documentation +- [x] CI/CD pipeline +- [x] Gitea secrets integration + +### 🔲 Need to Add: + +#### 1. **Environment-Specific Secrets in Gitea** + +Go to: https://git.levkin.ca/ilia/POTE/settings/secrets + +**Development:** +``` +DEV_HOST=10.0.10.100 (or your dev server IP) +DEV_USER=poteapp +DEV_SSH_KEY=(SSH key for dev server) +SMTP_PASSWORD_DEV=(dev email password) +DB_PASSWORD_DEV=dev_password_123 +``` + +**QA/Staging:** +``` +QA_HOST=10.0.10.101 (or your QA server IP) +QA_USER=poteapp +QA_SSH_KEY=(SSH key for QA server) +SMTP_PASSWORD_QA=(qa email password) +DB_PASSWORD_QA=qa_password_123 +``` + +**Production:** +``` +PROXMOX_HOST=10.0.10.95 (already have this) +PROXMOX_USER=poteapp +PROXMOX_SSH_KEY=(already have this) +SMTP_PASSWORD=(already have this) +DB_PASSWORD=changeme123 +``` + +#### 2. **Create Environment-Specific Deployment Workflows** + +Files to create: +- `.github/workflows/deploy-dev.yml` (see docs/14_branch_strategy_and_deployment.md) +- `.github/workflows/deploy-qa.yml` +- `.github/workflows/deploy-prod.yml` (already have deploy.yml, can rename/update) + +#### 3. **Set Up Separate Servers/Containers** + +You need three environments: + +| Environment | Server/Container | Database | Purpose | +|-------------|------------------|----------|---------| +| **Dev** | `10.0.10.100` (or new LXC) | `potedb_dev` | Development testing | +| **QA** | `10.0.10.101` (or new LXC) | `potedb_qa` | Pre-production testing | +| **Prod** | `10.0.10.95` (existing) | `potedb` | Production | + +**Options:** +- Create 2 more LXC containers (recommended) +- Use same server with different ports/databases +- Use Docker containers + +#### 4. **Ansible Integration** + +**Option A: Gitea Webhooks** +``` +Gitea → Settings → Webhooks → Add Webhook +URL: https://your-ansible-controller/webhook/pote +Trigger on: Push events +Branches: dev, qa, main +``` + +**Option B: Gitea Actions calls Ansible** +```yaml +# In workflow +- name: Trigger Ansible + run: | + curl -X POST https://ansible-controller/api/deploy \ + -d '{"branch": "${{ github.ref_name }}"}' +``` + +#### 5. **Update Ansible Playbook** + +Your Ansible playbook should: +```yaml +- name: Deploy POTE + hosts: "{{ target_env }}" + vars: + branch: "{{ git_branch }}" # dev, qa, or main + tasks: + - git: + repo: gitea@10.0.30.169:ilia/POTE.git + dest: /home/poteapp/pote + version: "{{ branch }}" + # ... rest of deployment +``` + +#### 6. **Database Migration Strategy** + +```bash +# Always test in dev first +ssh poteapp@dev-server "cd ~/pote && alembic upgrade head" + +# Then QA +ssh poteapp@qa-server "cd ~/pote && alembic upgrade head" + +# Finally prod (with backup!) +ssh poteapp@prod-server "pg_dump potedb > backup.sql && cd ~/pote && alembic upgrade head" +``` + +#### 7. **Monitoring & Alerts** + +Add to each deployment: +```yaml +- name: Health Check + run: python scripts/health_check.py + +- name: Send Alert on Failure + if: failure() + run: | + # Send email/Slack notification +``` + +#### 8. **Environment Variables** + +Create separate configs: +- `.env.dev` (in dev server) +- `.env.qa` (in qa server) +- `.env` (in prod server - already have) + +**Never commit these!** Use Ansible templates or deployment workflows. + +--- + +## 🚀 Workflow After Setup + +### Development Flow: + +```bash +# 1. Work on feature +git checkout dev +git pull origin dev +# ... make changes ... +git commit -m "Add feature" +git push origin dev + +# 2. Auto-deploys to DEV server +# (via Gitea webhook or Actions) + +# 3. Test in DEV + +# 4. Promote to QA +# Create PR: dev → qa in Gitea UI +# Merge after approval +# Auto-deploys to QA server + +# 5. QA Testing + +# 6. Promote to PROD +# Create PR: qa → main in Gitea UI +# Requires 2 approvals +# Merge +# Manual deployment trigger (with confirmation) +``` + +--- + +## 📚 Documentation + +**Main guide:** `docs/14_branch_strategy_and_deployment.md` + +Covers: +- ✅ Branch protection setup +- ✅ Multi-environment workflows +- ✅ Ansible integration +- ✅ Deployment flow +- ✅ Rollback procedures +- ✅ Complete checklist + +--- + +## 🎯 Quick Actions (Do These Now) + +### 1. Configure Branch Protection (5 minutes) + +``` +https://git.levkin.ca/ilia/POTE/settings/branches +- Add rule for 'qa' +- Add rule for 'dev' +``` + +### 2. Add Environment Secrets (10 minutes) + +``` +https://git.levkin.ca/ilia/POTE/settings/secrets +- Add DEV_* secrets +- Add QA_* secrets +- Verify PROD secrets exist +``` + +### 3. Create PR for Documentation (2 minutes) + +``` +https://git.levkin.ca/ilia/POTE/compare/main...dev +- Create pull request +- Title: "Add branch strategy documentation" +- Merge to main +``` + +### 4. Decide on Server Setup + +**Option 1:** Create 2 more LXC containers +```bash +# On Proxmox host +pct clone 100 101 --hostname pote-dev +pct clone 100 102 --hostname pote-qa +``` + +**Option 2:** Use existing server with different databases +```bash +# On existing server +createdb potedb_dev +createdb potedb_qa +``` + +### 5. Configure Ansible + +Update your Ansible inventory to include: +- `pote-dev` host +- `pote-qa` host +- `pote-prod` host (existing) + +--- + +## ⚠️ Important Notes + +### Main Branch is Protected! + +You saw this error: +``` +remote: Gitea: Not allowed to push to protected branch main +``` + +**This is GOOD!** It means: +- ✅ Main branch is protected +- ✅ Can't accidentally push directly +- ✅ Must use Pull Requests +- ✅ Requires code review + +**To update main:** +1. Push to `dev` or `qa` +2. Create Pull Request in Gitea +3. Get approval +4. Merge + +### Current Branch Status + +```bash +$ git branch + dev ← New documentation is here +* main ← Protected, can't push directly + qa ← Empty, same as main +``` + +--- + +## 🔗 Links + +- **Repository:** https://git.levkin.ca/ilia/POTE +- **Branch Protection:** https://git.levkin.ca/ilia/POTE/settings/branches +- **Secrets:** https://git.levkin.ca/ilia/POTE/settings/secrets +- **Actions:** https://git.levkin.ca/ilia/POTE/actions +- **Create PR:** https://git.levkin.ca/ilia/POTE/compare/main...dev + +--- + +## ✅ Summary + +**What's Done:** +- ✅ Created `dev`, `qa`, `main` branches +- ✅ Main branch is protected +- ✅ Documentation committed to `dev` +- ✅ Ready for Ansible integration + +**What's Next:** +1. Configure branch protection for `qa` and `dev` +2. Add environment-specific secrets +3. Create PR to merge docs to main +4. Set up dev/qa servers +5. Configure Ansible for multi-environment +6. Test deployment flow + +**You're 80% there! Just need to configure Gitea settings and set up the additional servers.** 🚀 +