# Deployment Checklist **Project**: CA Grow Ops Manager **Status**: Ready for Deployment **Date**: 2025-12-08 --- ## ✅ Completed ### Project Initialization - [x] Constitution created and documented - [x] Project spec (spec.yml) defined - [x] 7 comprehensive feature specs written - [x] Architecture documented - [x] Compliance notes (California DCC) documented - [x] Phase 1 implementation plan created (6 weeks) - [x] Week 1 tasks defined (15 tasks) - [x] Backend README with setup instructions - [x] Frontend README with setup instructions - [x] Quick start guide created - [x] Project status tracker created ### CI/CD Setup - [x] Forgejo Actions workflows created - [x] Test workflow (runs on every push/PR) - [x] Deploy workflow (auto-deploys on push to main) - [x] Deployment guide for nexus-vector created - [x] CI/CD setup guide created ### Git Repository - [x] Git repository initialized - [x] All files committed - [x] Branch renamed to `main` --- ## ⏭️ Next Steps (Manual) ### 1. Create Forgejo Repository **Option A: Via Web UI** (Recommended) 1. Navigate to 2. Click **+** → **New Repository** 3. Organization: `runfoo` 4. Repository name: `ca-grow-ops-manager` 5. Description: "Production-grade web + mobile app for managing licensed California cannabis cultivation facilities" 6. Visibility: **Private** 7. **Uncheck** "Initialize repository" 8. Click **Create Repository** **Option B: Via API** (If you have a valid token) ```bash curl -X POST "https://git.runfoo.run/api/v1/org/runfoo/repos" \ -H "Authorization: token YOUR_TOKEN_HERE" \ -H "Content-Type: application/json" \ -d '{ "name": "ca-grow-ops-manager", "description": "Production-grade web + mobile app for managing licensed California cannabis cultivation facilities", "private": true, "auto_init": false, "default_branch": "main" }' ``` --- ### 2. Add Git Remote and Push After creating the repository in Forgejo: ```bash cd /Users/ten/ANTIGRAVITY/777wolfpack/ca-grow-ops-manager # Add Forgejo remote git remote add origin https://git.runfoo.run/runfoo/ca-grow-ops-manager.git # Push to Forgejo git push -u origin main ``` **Note**: You'll be prompted for credentials. Use your Forgejo username and password/token. --- ### 3. Set Up SSH Key for CI/CD #### 3.1 Generate SSH Key (if needed) ```bash # Generate a new SSH key for deployment ssh-keygen -t ed25519 -C "forgejo-deploy-ca-grow-ops" -f ~/.ssh/ca_grow_ops_deploy # Display the private key (you'll need this for Forgejo secrets) cat ~/.ssh/ca_grow_ops_deploy # Display the public key (you'll add this to nexus-vector) cat ~/.ssh/ca_grow_ops_deploy.pub ``` #### 3.2 Add Public Key to nexus-vector ```bash # Copy public key to nexus-vector ssh admin@nexus-vector "echo '$(cat ~/.ssh/ca_grow_ops_deploy.pub)' >> ~/.ssh/authorized_keys" # Test the connection ssh -i ~/.ssh/ca_grow_ops_deploy admin@nexus-vector "echo 'SSH connection successful'" ``` #### 3.3 Add Private Key to Forgejo Secrets 1. Go to: 2. Click **Add Secret** 3. Name: `SSH_PRIVATE_KEY` 4. Value: Paste the **entire contents** of `~/.ssh/ca_grow_ops_deploy` (the private key) 5. Click **Add Secret** --- ### 4. Enable Forgejo Actions 1. Go to: 2. Click **Actions** in the left sidebar 3. Ensure **Enable Repository Actions** is checked 4. Set **Default workflow permissions** to **Read and write permissions** 5. Click **Update Settings** --- ### 5. Prepare nexus-vector for Deployment ```bash # SSH to nexus-vector ssh admin@nexus-vector # Create service directory sudo mkdir -p /srv/containers/ca-grow-ops-manager sudo chown admin:admin /srv/containers/ca-grow-ops-manager # Clone the repository (after pushing to Forgejo) cd /srv/containers git clone https://git.runfoo.run/runfoo/ca-grow-ops-manager.git cd ca-grow-ops-manager # Create environment file cat > docker-compose.env << 'EOF' # Database DB_PASSWORD=$(openssl rand -base64 32) # JWT JWT_SECRET=$(openssl rand -base64 64) # Email (optional for v1) EMAIL_SERVICE=sendgrid EMAIL_API_KEY=your_api_key_here EMAIL_FROM=noreply@example.com EOF # Generate secure passwords echo "DB_PASSWORD=$(openssl rand -base64 32)" > docker-compose.env echo "JWT_SECRET=$(openssl rand -base64 64)" >> docker-compose.env echo "" >> docker-compose.env echo "# Email (optional for v1)" >> docker-compose.env echo "EMAIL_SERVICE=sendgrid" >> docker-compose.env echo "EMAIL_API_KEY=your_api_key_here" >> docker-compose.env echo "EMAIL_FROM=noreply@example.com" >> docker-compose.env # Show the generated passwords (save these!) cat docker-compose.env ``` --- ### 6. Trigger First Deployment #### Option A: Via CI/CD (Recommended) ```bash # From your local machine cd /Users/ten/ANTIGRAVITY/777wolfpack/ca-grow-ops-manager # Make a small change to trigger CI/CD echo "" >> README.md git add README.md git commit -m "chore: Trigger initial CI/CD deployment" git push origin main # Monitor the deployment # Go to: https://git.runfoo.run/runfoo/ca-grow-ops-manager/actions ``` #### Option B: Manual Deployment ```bash # SSH to nexus-vector ssh admin@nexus-vector cd /srv/containers/ca-grow-ops-manager # Build and start services docker compose build docker compose up -d # Check status docker compose ps # View logs docker compose logs -f ``` --- ### 7. Verify Deployment ```bash # Check service health curl http://localhost:8010/api/healthz # Or from outside nexus-vector (if configured) curl http://216.158.230.94:8010/api/healthz # Check container status ssh admin@nexus-vector "cd /srv/containers/ca-grow-ops-manager && docker compose ps" # View logs ssh admin@nexus-vector "cd /srv/containers/ca-grow-ops-manager && docker compose logs -f --tail=50" ``` --- ## 📊 Deployment Status ### Current State - ✅ Code ready and committed locally - ⏳ Forgejo repository needs to be created - ⏳ SSH key needs to be configured - ⏳ Code needs to be pushed to Forgejo - ⏳ CI/CD needs to be triggered ### Expected Timeline - **Step 1-2**: 5 minutes (Create repo and push) - **Step 3**: 10 minutes (SSH key setup) - **Step 4**: 2 minutes (Enable Actions) - **Step 5**: 5 minutes (Prepare nexus-vector) - **Step 6**: 3-5 minutes (First deployment) - **Step 7**: 2 minutes (Verification) **Total**: ~30 minutes --- ## 🚨 Troubleshooting ### "Repository already exists" The repository might already exist. Check: ### "Permission denied (publickey)" - Verify SSH key is added to nexus-vector: `ssh admin@nexus-vector "cat ~/.ssh/authorized_keys | grep ca_grow_ops"` - Verify secret is added to Forgejo: Settings → Secrets → SSH_PRIVATE_KEY ### "Port 8010 already in use" ```bash ssh admin@nexus-vector "sudo netstat -tlnp | grep 8010" # If in use, choose a different port in docker-compose.yml ``` ### "Health check failed" ```bash ssh admin@nexus-vector "cd /srv/containers/ca-grow-ops-manager && docker compose logs backend" # Check for errors in backend logs ``` --- ## 📝 Notes - The Forgejo API token in the onboarding docs appears to be invalid/expired - You'll need to create the repository via the web UI or get a new API token - Once the repository is created and SSH key is configured, CI/CD will handle all future deployments automatically --- ## ✅ Success Criteria Deployment is successful when: - [ ] Repository exists at - [ ] Code is pushed to Forgejo - [ ] CI/CD workflow runs successfully - [ ] Service is accessible at on nexus-vector - [ ] Health check returns 200 OK - [ ] All containers are running --- **Next Action**: Create the Forgejo repository via web UI and follow steps 2-7 above.