mvp-factory-openhands/phase3-quickstart.md

241 lines
5.6 KiB
Markdown

# Phase 3 Quick Start Guide
**Goal:** Transform 7-node workflow → 11-node autonomous CI/CD with retry logic
**Time:** 4-5 hours
**Workflow ID:** `j1MmXaRhDjvkRSLa`
---
## 🚀 5-MINUTE SETUP
### 1. Get Gitea Token (Required for Status Updates)
```bash
# UI Method (Easiest):
# 1. Go to https://git.oky.sh/user/settings/applications
# 2. Click "Generate Token"
# 3. Name: n8n-autonomous-build
# 4. Scopes: repo, admin:repo_hook
# 5. Copy token (format: gho_...)
```
### 2. Create Test Repository
```bash
# Via API:
curl -X POST https://git.oky.sh/api/v1/user/repos \
-H "X-Gitea-Token: {YOUR_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name":"autonomous-build-test","description":"Phase 3 test repo"}'
# Or via UI:
# https://git.oky.sh → + → New Repository
```
### 3. Configure Webhook
1. Go to: `https://git.oky.sh/gitadmin/autonomous-build-test/settings/hooks`
2. Add Webhook:
- URL: `https://n8n.oky.sh/webhook/openhands-autonomous-build`
- Trigger: Push events
- Active: ✓
---
## 📋 IMPLEMENTATION CHECKLIST
### Phase A: Add New Nodes (90 min)
- [ ] **Node 3:** Initialize Retry Counter
- Type: Code
- Code: See `phase3-code-snippets.md` → "Node 3"
- [ ] **Node 7:** Decision - Build OK?
- Type: IF
- Condition: `$json.build_success == true`
- [ ] **Node 8:** Update Gitea Success
- Type: HTTP
- URL: `https://git.oky.sh/api/v1/repos/{owner}/{repo}/statuses/{sha}`
- Token: `{YOUR_GITEA_API_TOKEN}`
- [ ] **Node 9:** Format Error for Retry
- Type: Code
- Code: See `phase3-code-snippets.md` → "Node 9"
- [ ] **Node 10:** Check Retry Count
- Type: IF
- Condition: `$json.can_retry == true`
### Phase B: Modify Existing Nodes (60 min)
- [ ] **Node 2:** Extract Repo Info
- Add: `repo_name`, `owner`, `branch`, `commit_sha`
- [ ] **Node 4:** Execute OpenHands Build
- Enhance command with error feedback
- Add data preservation pattern
- [ ] **Node 6:** Check Build Results
- Add: `build_success`, `error_details`
- [ ] **Node 11:** Final Response
- Support both success AND failure paths
### Phase C: Test (90 min)
- [ ] Test 1: Success Path (30 min)
- [ ] Test 2: Retry with Fixable Errors (30 min)
- [ ] Test 3: Max Retries (3 attempts) (30 min)
---
## 📚 KEY RESOURCES
| File | Purpose |
|------|---------|
| `phase3-implementation-plan.md` | Complete implementation guide (11 nodes) |
| `phase3-code-snippets.md` | Ready-to-copy code for each node |
| `phase3-quickstart.md` | This file - quick start guide |
| `phase3.md` | Original Phase 3 plan |
---
## 🔧 NODES BREAKDOWN
### Current Workflow (7 nodes)
```
[1] Gitea Webhook
[2] Extract Repo Info
[3] Start OpenHands Build
[4] Wait 10s
[5] Check Build Status
[6] Format Response
[7] Send Response
```
### Target Workflow (11 nodes)
```
[1] Gitea Webhook
[2] Extract Repo Info (MODIFY)
[3] Initialize Retry Counter (NEW)
[4] Start OpenHands Build (MODIFY)
[5] Wait 10s
[6] Check Build Results (MODIFY)
[7] Decision: Build OK? (NEW)
├─ YES → [8] Update Gitea Success → [11] Response
└─ NO → [9] Format Error Feedback
[10] Check Retry Count
├─ YES → Loop to [4]
└─ NO → [11] Final Response
```
---
## ⚠️ CRITICAL REMINDERS
### 1. Data Preservation Pattern
**ALWAYS use this in SSH nodes:**
```javascript
const sshOutput = $json;
const repoData = $node["Extract Repo Info"].json;
return {
...repoData, // ← PRESERVE INPUT DATA
code: sshOutput.code,
stdout: sshOutput.stdout,
stderr: sshOutput.stderr
};
```
### 2. Retry Counter Initialization
**MUST initialize in Node 3:**
```javascript
$workflow.staticData = $workflow.staticData || {};
$workflow.staticData.retry_count = ($workflow.staticData.retry_count || 0) + 1;
```
### 3. SSH Node Configuration
```
Host: localhost
User: bam
Private Key: /home/bam/.ssh/n8n_key
Timeout: 300000 (5 minutes)
```
---
## 🧪 QUICK TESTS
### Test 1: Manual Workflow Trigger
```bash
curl -X POST https://n8n.oky.sh/webhook/openhands-autonomous-build \
-H "Content-Type: application/json" \
-d '{
"repository": {
"name": "test-project",
"full_name": "gitadmin/test-project",
"owner": {"name": "gitadmin", "username": "gitadmin"}
},
"ref": "refs/heads/main",
"after": "abc123def456789012345678901234567890abcd"
}'
```
### Test 2: SSH Connectivity
```bash
ssh -i /home/bam/.ssh/n8n_key bam@localhost \
"sh /home/bam/openhands-sdk-wrapper-sh.sh 'Test connection'"
```
---
## 📊 SUCCESS CRITERIA
**End-to-end completes:** Push → Build → Response
**Retry works:** Max 3 attempts, then stop
**Gitea status:** Updates to success/failure
**Error feedback:** OpenHands receives previous errors
**Real projects:** Works with actual MVP project
---
## 🆘 TROUBLESHOOTING
| Problem | Quick Fix |
|---------|-----------|
| Retry count always 0 | Initialize `$workflow.staticData` |
| Gitea status not updating | Check token has "repo" scope |
| Workflow hangs | Increase SSH timeout to 5 min |
| Data lost in loop | Use `$node["Node Name"].json` pattern |
| Same errors on retry | Include error in task string |
---
## 📞 CURRENT STATUS
- ✅ Phase 2 Complete
- ✅ Workflow ID: `j1MmXaRhDjvkRSLa`
- ✅ OpenHands SDK: Working
- ✅ n8n + Gitea: Configured
- ⏳ Phase 3: Ready to implement
---
## 🎯 NEXT STEPS
1. **Now:** Read `phase3-implementation-plan.md`
2. **Then:** Generate Gitea token
3. **Then:** Start with Node 3 (Initialize Retry Counter)
4. **Follow:** `phase3-code-snippets.md` for exact code
**Total Time:** 4-5 hours
**Can start immediately! 🚀**
---
*Quick Start Guide - Last Updated: 2025-12-02*