|
|
@@ -0,0 +1,327 @@
|
|
|
+# CI/CD Workflow Guide - Build Validation System
|
|
|
+
|
|
|
+## Overview
|
|
|
+
|
|
|
+The build validation system has **two workflows** that handle different scenarios:
|
|
|
+
|
|
|
+1. **PR Workflow** - Validates and blocks merge if registry is invalid
|
|
|
+2. **Direct Push Workflow** - Auto-updates registry on direct pushes to main
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Workflow 1: Pull Request Validation
|
|
|
+
|
|
|
+**File:** `.github/workflows/validate-registry.yml`
|
|
|
+
|
|
|
+**Triggers:**
|
|
|
+- Pull requests to `main` or `dev` branches
|
|
|
+- Changes to `.opencode/**`, `registry.json`, or validation scripts
|
|
|
+
|
|
|
+**What It Does:**
|
|
|
+
|
|
|
+```
|
|
|
+Developer creates PR
|
|
|
+ ↓
|
|
|
+GitHub Action runs automatically
|
|
|
+ ↓
|
|
|
+1. Auto-detect new components
|
|
|
+ - Scans .opencode/ directory
|
|
|
+ - Finds files not in registry
|
|
|
+ ↓
|
|
|
+2. Add to registry (if found)
|
|
|
+ - Extracts metadata
|
|
|
+ - Adds to registry.json
|
|
|
+ - Commits to PR branch
|
|
|
+ ↓
|
|
|
+3. Validate registry
|
|
|
+ - Checks all paths exist
|
|
|
+ - Verifies JSON is valid
|
|
|
+ ↓
|
|
|
+4. Decision
|
|
|
+ ├─ ✅ Valid → PR can merge
|
|
|
+ └─ ❌ Invalid → PR BLOCKED
|
|
|
+```
|
|
|
+
|
|
|
+**Key Features:**
|
|
|
+- ✅ **Blocks merge** if validation fails
|
|
|
+- ✅ **Auto-commits** registry updates to PR branch
|
|
|
+- ✅ **Detailed feedback** in PR checks
|
|
|
+- ✅ **Prevents 404 errors** before they reach main
|
|
|
+
|
|
|
+**Example Output:**
|
|
|
+```
|
|
|
+🔍 Auto-Detection Results
|
|
|
+⚠️ New command: my-new-command
|
|
|
+ Path: .opencode/command/my-new-command.md
|
|
|
+
|
|
|
+📝 Adding New Components
|
|
|
+✓ Added command: my-new-command
|
|
|
+
|
|
|
+✅ Registry Validation
|
|
|
+All registry paths are valid!
|
|
|
+Total paths: 51
|
|
|
+Valid: 51
|
|
|
+Missing: 0
|
|
|
+
|
|
|
+✅ Validation Passed
|
|
|
+This PR is ready for review!
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Workflow 2: Direct Push to Main
|
|
|
+
|
|
|
+**File:** `.github/workflows/update-registry.yml`
|
|
|
+
|
|
|
+**Triggers:**
|
|
|
+- Direct pushes to `main` branch
|
|
|
+- Changes to `.opencode/**` (excluding registry.json)
|
|
|
+- Manual workflow dispatch
|
|
|
+
|
|
|
+**What It Does:**
|
|
|
+
|
|
|
+```
|
|
|
+Developer pushes directly to main
|
|
|
+ ↓
|
|
|
+GitHub Action runs automatically
|
|
|
+ ↓
|
|
|
+1. Auto-detect new components
|
|
|
+ - Scans .opencode/ directory
|
|
|
+ - Finds files not in registry
|
|
|
+ ↓
|
|
|
+2. Add to registry (if found)
|
|
|
+ - Extracts metadata
|
|
|
+ - Adds to registry.json
|
|
|
+ - Commits to main
|
|
|
+ ↓
|
|
|
+3. Validate registry
|
|
|
+ - Checks all paths exist
|
|
|
+ - Verifies JSON is valid
|
|
|
+ ↓
|
|
|
+4. Report results
|
|
|
+ ├─ ✅ Valid → Success
|
|
|
+ └─ ⚠️ Invalid → Warning (doesn't block)
|
|
|
+```
|
|
|
+
|
|
|
+**Key Differences from PR Workflow:**
|
|
|
+- ⚠️ **Does NOT block** - push already happened
|
|
|
+- ⚠️ **Shows warning** if validation fails
|
|
|
+- ✅ **Auto-commits** registry updates
|
|
|
+- ✅ **Validates** but doesn't prevent push
|
|
|
+
|
|
|
+**Why No Blocking?**
|
|
|
+Since the push already happened, we can't block it. Instead:
|
|
|
+- Shows clear warning in Actions summary
|
|
|
+- Alerts team to fix registry
|
|
|
+- Prevents future installation errors
|
|
|
+
|
|
|
+**Example Output:**
|
|
|
+```
|
|
|
+🔍 Auto-Detection Results
|
|
|
+✅ No new components found
|
|
|
+
|
|
|
+✅ Registry Validation
|
|
|
+All registry paths are valid!
|
|
|
+
|
|
|
+Registry Statistics
|
|
|
+- Agents: 4
|
|
|
+- Commands: 12
|
|
|
+- Contexts: 15
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Comparison Table
|
|
|
+
|
|
|
+| Feature | PR Workflow | Direct Push Workflow |
|
|
|
+|---------|-------------|---------------------|
|
|
|
+| **Triggers** | Pull requests | Direct push to main |
|
|
|
+| **Auto-detect** | ✅ Yes | ✅ Yes |
|
|
|
+| **Auto-add** | ✅ Yes | ✅ Yes |
|
|
|
+| **Validate** | ✅ Yes | ✅ Yes |
|
|
|
+| **Block on failure** | ✅ Yes | ❌ No (warns only) |
|
|
|
+| **Auto-commit** | ✅ To PR branch | ✅ To main |
|
|
|
+| **Use case** | Normal development | Emergency fixes, maintainers |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Recommended Workflow
|
|
|
+
|
|
|
+### For Contributors (Recommended)
|
|
|
+
|
|
|
+```bash
|
|
|
+# 1. Create feature branch
|
|
|
+git checkout -b feature/my-new-component
|
|
|
+
|
|
|
+# 2. Add your component
|
|
|
+echo "---
|
|
|
+description: My awesome component
|
|
|
+---
|
|
|
+# My Component" > .opencode/command/my-component.md
|
|
|
+
|
|
|
+# 3. Commit and push
|
|
|
+git add .opencode/command/my-component.md
|
|
|
+git commit -m "feat: add my-component"
|
|
|
+git push origin feature/my-new-component
|
|
|
+
|
|
|
+# 4. Create PR to dev
|
|
|
+gh pr create --base dev --title "Add my-component"
|
|
|
+
|
|
|
+# 5. GitHub Actions will:
|
|
|
+# - Auto-detect your component
|
|
|
+# - Add to registry.json
|
|
|
+# - Validate all paths
|
|
|
+# - Commit to your PR branch
|
|
|
+# - Block merge if invalid
|
|
|
+
|
|
|
+# 6. Review and merge
|
|
|
+# Your component is now in registry!
|
|
|
+```
|
|
|
+
|
|
|
+### For Maintainers (Direct Push)
|
|
|
+
|
|
|
+```bash
|
|
|
+# 1. Add component directly to main
|
|
|
+git checkout main
|
|
|
+echo "---
|
|
|
+description: Urgent fix
|
|
|
+---
|
|
|
+# Fix" > .opencode/command/urgent-fix.md
|
|
|
+
|
|
|
+# 2. Commit and push
|
|
|
+git add .opencode/command/urgent-fix.md
|
|
|
+git commit -m "fix: urgent component"
|
|
|
+git push origin main
|
|
|
+
|
|
|
+# 3. GitHub Actions will:
|
|
|
+# - Auto-detect your component
|
|
|
+# - Add to registry.json
|
|
|
+# - Validate all paths
|
|
|
+# - Commit registry update to main
|
|
|
+# - Warn if validation fails (but doesn't block)
|
|
|
+
|
|
|
+# 4. Check Actions tab for results
|
|
|
+# If warning, fix registry and push correction
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Manual Validation (Local)
|
|
|
+
|
|
|
+Before pushing, you can validate locally:
|
|
|
+
|
|
|
+```bash
|
|
|
+# Check for new components
|
|
|
+./scripts/auto-detect-components.sh --dry-run
|
|
|
+
|
|
|
+# Add new components
|
|
|
+./scripts/auto-detect-components.sh --auto-add
|
|
|
+
|
|
|
+# Validate registry
|
|
|
+./scripts/validate-registry.sh -v
|
|
|
+
|
|
|
+# Get fix suggestions
|
|
|
+./scripts/validate-registry.sh --fix
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Troubleshooting
|
|
|
+
|
|
|
+### PR Blocked - Validation Failed
|
|
|
+
|
|
|
+**Problem:** PR shows validation failure
|
|
|
+
|
|
|
+**Solution:**
|
|
|
+```bash
|
|
|
+# 1. Check the error in PR checks
|
|
|
+# 2. Run validator locally
|
|
|
+./scripts/validate-registry.sh --fix
|
|
|
+
|
|
|
+# 3. Fix the issues (usually path typos)
|
|
|
+# 4. Commit and push
|
|
|
+git add registry.json
|
|
|
+git commit -m "fix: correct registry paths"
|
|
|
+git push
|
|
|
+
|
|
|
+# 5. PR checks will re-run automatically
|
|
|
+```
|
|
|
+
|
|
|
+### Direct Push - Validation Warning
|
|
|
+
|
|
|
+**Problem:** Push succeeded but Actions shows warning
|
|
|
+
|
|
|
+**Solution:**
|
|
|
+```bash
|
|
|
+# 1. Check Actions tab for details
|
|
|
+# 2. Run validator locally
|
|
|
+./scripts/validate-registry.sh --fix
|
|
|
+
|
|
|
+# 3. Fix registry.json
|
|
|
+# 4. Push correction
|
|
|
+git add registry.json
|
|
|
+git commit -m "fix: correct registry after direct push"
|
|
|
+git push origin main
|
|
|
+```
|
|
|
+
|
|
|
+### Component Not Auto-Detected
|
|
|
+
|
|
|
+**Problem:** Added file but not detected
|
|
|
+
|
|
|
+**Possible causes:**
|
|
|
+- File in excluded directory (tests/, docs/, node_modules/)
|
|
|
+- File is README.md or index.md (excluded)
|
|
|
+- File doesn't have .md extension
|
|
|
+- File in wrong location (not in .opencode/)
|
|
|
+
|
|
|
+**Solution:**
|
|
|
+```bash
|
|
|
+# Check if file would be detected
|
|
|
+./scripts/auto-detect-components.sh --dry-run
|
|
|
+
|
|
|
+# If not detected, check file location and name
|
|
|
+# Move to correct location:
|
|
|
+# - Agents: .opencode/agent/
|
|
|
+# - Commands: .opencode/command/
|
|
|
+# - Tools: .opencode/tool/
|
|
|
+# - Plugins: .opencode/plugin/
|
|
|
+# - Contexts: .opencode/context/
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Best Practices
|
|
|
+
|
|
|
+### ✅ DO
|
|
|
+
|
|
|
+- **Use PRs** for normal development (recommended)
|
|
|
+- **Add frontmatter** to components with description
|
|
|
+- **Test locally** before pushing
|
|
|
+- **Review auto-commits** in PR before merging
|
|
|
+- **Keep registry.json** in sync with files
|
|
|
+
|
|
|
+### ❌ DON'T
|
|
|
+
|
|
|
+- **Don't bypass PRs** unless emergency
|
|
|
+- **Don't manually edit** registry.json (let automation handle it)
|
|
|
+- **Don't ignore** validation warnings
|
|
|
+- **Don't commit** broken registry paths
|
|
|
+- **Don't skip** local validation
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Summary
|
|
|
+
|
|
|
+**For 99% of cases:** Use PR workflow
|
|
|
+- Creates PR → Auto-detect → Validate → Block if invalid → Merge
|
|
|
+
|
|
|
+**For emergencies:** Direct push works
|
|
|
+- Push to main → Auto-detect → Validate → Warn if invalid
|
|
|
+
|
|
|
+**Both workflows:**
|
|
|
+- ✅ Auto-detect new components
|
|
|
+- ✅ Update registry automatically
|
|
|
+- ✅ Validate all paths
|
|
|
+- ✅ Prevent installation 404 errors
|
|
|
+
|
|
|
+**The system ensures registry accuracy whether you use PRs or direct pushes!**
|