feat: add PR validation workflow and contribution checks

This commit is contained in:
Brian Madison
2025-08-31 20:30:52 -05:00
parent 05736fa069
commit fb70c20067
11 changed files with 154 additions and 16 deletions

View File

@@ -60,6 +60,7 @@ npm run build
### Pull Request CI ### Pull Request CI
When you open a Pull Request to the main repository: When you open a Pull Request to the main repository:
- All CI/CD workflows automatically run - All CI/CD workflows automatically run
- You get full validation of your changes - You get full validation of your changes
- No configuration needed - No configuration needed
@@ -67,6 +68,7 @@ When you open a Pull Request to the main repository:
### GitHub Codespaces ### GitHub Codespaces
Use GitHub Codespaces for a full development environment: Use GitHub Codespaces for a full development environment:
- All tools pre-configured - All tools pre-configured
- Same environment as CI/CD - Same environment as CI/CD
- No local setup required - No local setup required
@@ -101,4 +103,4 @@ Use GitHub Codespaces for a full development environment:
--- ---
> 💡 **Pro Tip**: This fork-friendly approach is particularly valuable for projects using AI/LLM tools that create many experimental commits, as it prevents unnecessary CI runs while maintaining code quality standards. > 💡 **Pro Tip**: This fork-friendly approach is particularly valuable for projects using AI/LLM tools that create many experimental commits, as it prevents unnecessary CI runs while maintaining code quality standards.

55
.github/workflows/pr-validation.yaml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: PR Validation
on:
pull_request:
branches: [main]
types: [opened, synchronize, reopened]
jobs:
validate:
runs-on: ubuntu-latest
if: github.event.repository.fork != true || vars.ENABLE_CI_IN_FORK == 'true'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
- name: Install dependencies
run: npm ci
- name: Run validation
run: npm run validate
- name: Check formatting
run: npm run format:check
- name: Run linter
run: npm run lint
- name: Run tests (if available)
run: npm test --if-present
- name: Comment on PR if checks fail
if: failure()
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `❌ **PR Validation Failed**
This PR has validation errors that must be fixed before merging:
- Run \`npm run validate\` to check agent/team configs
- Run \`npm run format:check\` to check formatting (fix with \`npm run format\`)
- Run \`npm run lint\` to check linting issues (fix with \`npm run lint:fix\`)
Please fix these issues and push the changes.`
})

View File

@@ -17,6 +17,47 @@ Also note, we use the discussions feature in GitHub to have a community to discu
By participating in this project, you agree to abide by our Code of Conduct. Please read it before participating. By participating in this project, you agree to abide by our Code of Conduct. Please read it before participating.
## Before Submitting a PR
**IMPORTANT**: All PRs must pass validation checks before they can be merged.
### Required Checks
Before submitting your PR, run these commands locally:
```bash
# Run all validation checks
npm run pre-release
# Or run them individually:
npm run validate # Validate agent/team configs
npm run format:check # Check code formatting
npm run lint # Check for linting issues
```
### Fixing Issues
If any checks fail, use these commands to fix them:
```bash
# Fix all issues automatically
npm run fix
# Or fix individually:
npm run format # Fix formatting issues
npm run lint:fix # Fix linting issues
```
### Setup Git Hooks (Optional but Recommended)
To catch issues before committing:
```bash
# Run this once after cloning
chmod +x tools/setup-hooks.sh
./tools/setup-hooks.sh
```
## How to Contribute ## How to Contribute
### Reporting Bugs ### Reporting Bugs

View File

@@ -160,7 +160,7 @@ workflow:
- Dev Agent (New Chat): Address remaining items - Dev Agent (New Chat): Address remaining items
- Return to QA for final approval - Return to QA for final approval
- repeat_development_cycle: - step: repeat_development_cycle
action: continue_for_all_stories action: continue_for_all_stories
notes: | notes: |
Repeat story cycle (SM → Dev → QA) for all epic stories Repeat story cycle (SM → Dev → QA) for all epic stories
@@ -177,7 +177,7 @@ workflow:
- Validate epic was completed correctly - Validate epic was completed correctly
- Document learnings and improvements - Document learnings and improvements
- workflow_end: - step: workflow_end
action: project_complete action: project_complete
notes: | notes: |
All stories implemented and reviewed! All stories implemented and reviewed!

View File

@@ -106,7 +106,7 @@ workflow:
- Dev Agent (New Chat): Address remaining items - Dev Agent (New Chat): Address remaining items
- Return to QA for final approval - Return to QA for final approval
- repeat_development_cycle: - step: repeat_development_cycle
action: continue_for_all_stories action: continue_for_all_stories
notes: | notes: |
Repeat story cycle (SM → Dev → QA) for all epic stories Repeat story cycle (SM → Dev → QA) for all epic stories
@@ -123,7 +123,7 @@ workflow:
- Validate epic was completed correctly - Validate epic was completed correctly
- Document learnings and improvements - Document learnings and improvements
- workflow_end: - step: workflow_end
action: project_complete action: project_complete
notes: | notes: |
All stories implemented and reviewed! All stories implemented and reviewed!

View File

@@ -113,7 +113,7 @@ workflow:
- Dev Agent (New Chat): Address remaining items - Dev Agent (New Chat): Address remaining items
- Return to QA for final approval - Return to QA for final approval
- repeat_development_cycle: - step: repeat_development_cycle
action: continue_for_all_stories action: continue_for_all_stories
notes: | notes: |
Repeat story cycle (SM → Dev → QA) for all epic stories Repeat story cycle (SM → Dev → QA) for all epic stories
@@ -130,7 +130,7 @@ workflow:
- Validate epic was completed correctly - Validate epic was completed correctly
- Document learnings and improvements - Document learnings and improvements
- workflow_end: - step: workflow_end
action: project_complete action: project_complete
notes: | notes: |
All stories implemented and reviewed! All stories implemented and reviewed!

View File

@@ -65,12 +65,12 @@ workflow:
condition: po_checklist_issues condition: po_checklist_issues
notes: "If PO finds issues, return to relevant agent to fix and re-export updated documents to docs/ folder." notes: "If PO finds issues, return to relevant agent to fix and re-export updated documents to docs/ folder."
- project_setup_guidance: - step: project_setup_guidance
action: guide_project_structure action: guide_project_structure
condition: user_has_generated_ui condition: user_has_generated_ui
notes: "If user generated UI with v0/Lovable: For polyrepo setup, place downloaded project in separate frontend repo alongside backend repo. For monorepo, place in apps/web or packages/frontend directory. Review architecture document for specific guidance." notes: "If user generated UI with v0/Lovable: For polyrepo setup, place downloaded project in separate frontend repo alongside backend repo. For monorepo, place in apps/web or packages/frontend directory. Review architecture document for specific guidance."
- development_order_guidance: - step: development_order_guidance
action: guide_development_sequence action: guide_development_sequence
notes: "Based on PRD stories: If stories are frontend-heavy, start with frontend project/directory first. If backend-heavy or API-first, start with backend. For tightly coupled features, follow story sequence in monorepo setup. Reference sharded PRD epics for development order." notes: "Based on PRD stories: If stories are frontend-heavy, start with frontend project/directory first. If backend-heavy or API-first, start with backend. For tightly coupled features, follow story sequence in monorepo setup. Reference sharded PRD epics for development order."
@@ -138,7 +138,7 @@ workflow:
- Dev Agent (New Chat): Address remaining items - Dev Agent (New Chat): Address remaining items
- Return to QA for final approval - Return to QA for final approval
- repeat_development_cycle: - step: repeat_development_cycle
action: continue_for_all_stories action: continue_for_all_stories
notes: | notes: |
Repeat story cycle (SM → Dev → QA) for all epic stories Repeat story cycle (SM → Dev → QA) for all epic stories
@@ -155,7 +155,7 @@ workflow:
- Validate epic was completed correctly - Validate epic was completed correctly
- Document learnings and improvements - Document learnings and improvements
- workflow_end: - step: workflow_end
action: project_complete action: project_complete
notes: | notes: |
All stories implemented and reviewed! All stories implemented and reviewed!

View File

@@ -114,7 +114,7 @@ workflow:
- Dev Agent (New Chat): Address remaining items - Dev Agent (New Chat): Address remaining items
- Return to QA for final approval - Return to QA for final approval
- repeat_development_cycle: - step: repeat_development_cycle
action: continue_for_all_stories action: continue_for_all_stories
notes: | notes: |
Repeat story cycle (SM → Dev → QA) for all epic stories Repeat story cycle (SM → Dev → QA) for all epic stories
@@ -131,7 +131,7 @@ workflow:
- Validate epic was completed correctly - Validate epic was completed correctly
- Document learnings and improvements - Document learnings and improvements
- workflow_end: - step: workflow_end
action: project_complete action: project_complete
notes: | notes: |
All stories implemented and reviewed! All stories implemented and reviewed!

View File

@@ -64,7 +64,7 @@ workflow:
condition: po_checklist_issues condition: po_checklist_issues
notes: "If PO finds issues, return to relevant agent to fix and re-export updated documents to docs/ folder." notes: "If PO finds issues, return to relevant agent to fix and re-export updated documents to docs/ folder."
- project_setup_guidance: - step: project_setup_guidance
action: guide_project_structure action: guide_project_structure
condition: user_has_generated_ui condition: user_has_generated_ui
notes: "If user generated UI with v0/Lovable: For polyrepo setup, place downloaded project in separate frontend repo. For monorepo, place in apps/web or frontend/ directory. Review architecture document for specific guidance." notes: "If user generated UI with v0/Lovable: For polyrepo setup, place downloaded project in separate frontend repo. For monorepo, place in apps/web or frontend/ directory. Review architecture document for specific guidance."
@@ -133,7 +133,7 @@ workflow:
- Dev Agent (New Chat): Address remaining items - Dev Agent (New Chat): Address remaining items
- Return to QA for final approval - Return to QA for final approval
- repeat_development_cycle: - step: repeat_development_cycle
action: continue_for_all_stories action: continue_for_all_stories
notes: | notes: |
Repeat story cycle (SM → Dev → QA) for all epic stories Repeat story cycle (SM → Dev → QA) for all epic stories
@@ -150,7 +150,7 @@ workflow:
- Validate epic was completed correctly - Validate epic was completed correctly
- Document learnings and improvements - Document learnings and improvements
- workflow_end: - step: workflow_end
action: project_complete action: project_complete
notes: | notes: |
All stories implemented and reviewed! All stories implemented and reviewed!

View File

@@ -27,6 +27,7 @@
"build": "node tools/cli.js build", "build": "node tools/cli.js build",
"build:agents": "node tools/cli.js build --agents-only", "build:agents": "node tools/cli.js build --agents-only",
"build:teams": "node tools/cli.js build --teams-only", "build:teams": "node tools/cli.js build --teams-only",
"fix": "npm run format && npm run lint:fix",
"flatten": "node tools/flattener/main.js", "flatten": "node tools/flattener/main.js",
"format": "prettier --write \"**/*.{js,cjs,mjs,json,md,yaml}\"", "format": "prettier --write \"**/*.{js,cjs,mjs,json,md,yaml}\"",
"format:check": "prettier --check \"**/*.{js,cjs,mjs,json,md,yaml}\"", "format:check": "prettier --check \"**/*.{js,cjs,mjs,json,md,yaml}\"",
@@ -34,12 +35,14 @@
"lint": "eslint . --ext .js,.cjs,.mjs,.yaml --max-warnings=0", "lint": "eslint . --ext .js,.cjs,.mjs,.yaml --max-warnings=0",
"lint:fix": "eslint . --ext .js,.cjs,.mjs,.yaml --fix", "lint:fix": "eslint . --ext .js,.cjs,.mjs,.yaml --fix",
"list:agents": "node tools/cli.js list:agents", "list:agents": "node tools/cli.js list:agents",
"pre-release": "npm run validate && npm run format:check && npm run lint",
"prepare": "husky", "prepare": "husky",
"preview:release": "node tools/preview-release-notes.js", "preview:release": "node tools/preview-release-notes.js",
"release:major": "gh workflow run \"Manual Release\" -f version_bump=major", "release:major": "gh workflow run \"Manual Release\" -f version_bump=major",
"release:minor": "gh workflow run \"Manual Release\" -f version_bump=minor", "release:minor": "gh workflow run \"Manual Release\" -f version_bump=minor",
"release:patch": "gh workflow run \"Manual Release\" -f version_bump=patch", "release:patch": "gh workflow run \"Manual Release\" -f version_bump=patch",
"release:watch": "gh run watch", "release:watch": "gh run watch",
"setup:hooks": "chmod +x tools/setup-hooks.sh && ./tools/setup-hooks.sh",
"validate": "node tools/cli.js validate", "validate": "node tools/cli.js validate",
"version:all": "node tools/bump-all-versions.js", "version:all": "node tools/bump-all-versions.js",
"version:all:major": "node tools/bump-all-versions.js major", "version:all:major": "node tools/bump-all-versions.js major",

37
tools/setup-hooks.sh Executable file
View File

@@ -0,0 +1,37 @@
#!/bin/bash
# Setup script for git hooks
echo "Setting up git hooks..."
# Install husky
npm install --save-dev husky
# Initialize husky
npx husky init
# Create pre-commit hook
cat > .husky/pre-commit << 'EOF'
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
# Run validation checks before commit
echo "Running pre-commit checks..."
npm run validate
npm run format:check
npm run lint
if [ $? -ne 0 ]; then
echo "❌ Pre-commit checks failed. Please fix the issues before committing."
echo " Run 'npm run format' to fix formatting issues"
echo " Run 'npm run lint:fix' to fix some lint issues"
exit 1
fi
echo "✅ Pre-commit checks passed!"
EOF
chmod +x .husky/pre-commit
echo "✅ Git hooks setup complete!"
echo "Now commits will be validated before they're created."