mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
Generated by Spark: Check github workflow config ensures Copilot assists with entire SDLC
This commit is contained in:
432
.github/COPILOT_SDLC_SUMMARY.md
vendored
Normal file
432
.github/COPILOT_SDLC_SUMMARY.md
vendored
Normal file
@@ -0,0 +1,432 @@
|
||||
# GitHub Copilot SDLC Integration Summary
|
||||
|
||||
## Overview
|
||||
|
||||
MetaBuilder's GitHub workflows are comprehensively integrated with **GitHub Copilot** to assist throughout the entire Software Development Lifecycle (SDLC). This document provides an overview of how Copilot enhances each phase of development.
|
||||
|
||||
## SDLC Phase Coverage
|
||||
|
||||
### ✅ Phase 1: Planning & Design
|
||||
|
||||
**Workflows:**
|
||||
- `planning.yml` - Architecture review, PRD alignment, implementation guidance
|
||||
|
||||
**Copilot Features:**
|
||||
- ✅ **Architecture Review**: Analyzes feature requests against declarative-first principles
|
||||
- ✅ **PRD Alignment**: Checks if features align with project mission (95% declarative, multi-tenant)
|
||||
- ✅ **Design Checklist**: Provides comprehensive checklist for feature planning
|
||||
- ✅ **Multi-Tenant Validation**: Ensures tenant isolation is considered
|
||||
- ✅ **Permission Level Planning**: Validates which levels (1-5) should access the feature
|
||||
- ✅ **Declarative Assessment**: Suggests JSON/Lua approaches over TypeScript
|
||||
- ✅ **Package Structure Guidance**: Recommends package-based implementation when appropriate
|
||||
|
||||
**How It Works:**
|
||||
1. Developer creates issue with `enhancement` or `feature-request` label
|
||||
2. Workflow automatically analyzes the request
|
||||
3. Provides architectural suggestions and questions
|
||||
4. Creates design checklist
|
||||
5. Suggests PRD concepts to review
|
||||
6. When labeled `ready-to-implement`, provides step-by-step implementation plan
|
||||
|
||||
**Example:**
|
||||
```markdown
|
||||
Issue: "Add real-time notifications system"
|
||||
↓
|
||||
Copilot suggests:
|
||||
- Implement as declarative component with JSON + Lua
|
||||
- Store notification config in database
|
||||
- Consider tenant-specific notification preferences
|
||||
- Plan for Level 2+ permission access
|
||||
- Create /packages/notifications/ structure
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ✅ Phase 2: Development
|
||||
|
||||
**Workflows:**
|
||||
- `development.yml` - Continuous quality feedback, architectural compliance, refactoring suggestions
|
||||
|
||||
**Copilot Features:**
|
||||
- ✅ **Real-Time Code Metrics**: Tracks TypeScript vs JSON/Lua ratio
|
||||
- ✅ **Component Size Monitoring**: Flags files exceeding 150 LOC
|
||||
- ✅ **Architectural Compliance**: Validates adherence to declarative principles
|
||||
- ✅ **Refactoring Opportunities**: Identifies code that could be more declarative
|
||||
- ✅ **Configuration Detection**: Finds hardcoded values that should be in database
|
||||
- ✅ **@copilot Mentions**: Responds to developer questions with contextual guidance
|
||||
- ✅ **Pattern Recognition**: Suggests generic renderers over hardcoded components
|
||||
- ✅ **Seed Data Validation**: Checks if database changes have corresponding seed updates
|
||||
|
||||
**How It Works:**
|
||||
1. Developer pushes to feature branch
|
||||
2. Workflow analyzes code changes
|
||||
3. Calculates declarative ratio (JSON + Lua / Total TS files)
|
||||
4. Identifies large components, hardcoded values, new TSX files
|
||||
5. Posts feedback comment with metrics and suggestions
|
||||
6. Updates on each push with latest analysis
|
||||
|
||||
**Metrics Tracked:**
|
||||
- Total TypeScript files
|
||||
- Files exceeding 150 LOC
|
||||
- JSON configuration files
|
||||
- Lua scripts
|
||||
- Declarative ratio percentage
|
||||
- Hardcoded constants
|
||||
- New component files
|
||||
|
||||
**Example:**
|
||||
```
|
||||
Push to feature/notifications
|
||||
↓
|
||||
Copilot reports:
|
||||
- TypeScript files: 45
|
||||
- Files >150 LOC: 2 ⚠️
|
||||
- JSON config files: 12
|
||||
- Lua scripts: 8
|
||||
- Declarative ratio: 44.4%
|
||||
- Suggestion: NotificationPanel.tsx (180 LOC) could be split
|
||||
- Suggestion: Move hardcoded notification types to database
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ✅ Phase 3: Testing & Code Review
|
||||
|
||||
**Workflows:**
|
||||
- `ci.yml` - Lint, build, E2E tests
|
||||
- `code-review.yml` - Automated security and quality review
|
||||
|
||||
**Copilot Features:**
|
||||
- ✅ **Security Scanning**: Detects eval(), innerHTML, XSS risks
|
||||
- ✅ **Code Quality Checks**: Identifies console.log, debugger, any types
|
||||
- ✅ **Best Practice Validation**: React hooks, empty dependencies
|
||||
- ✅ **File Size Warnings**: Flags large changesets
|
||||
- ✅ **Auto-Approval**: Approves PRs with no blocking issues
|
||||
- ✅ **Label Management**: Adds appropriate labels (needs-changes, ready-for-review)
|
||||
- ✅ **Lint Error Reporting**: Displays ESLint issues inline
|
||||
- ✅ **Test Validation**: Ensures E2E tests pass
|
||||
|
||||
**Review Criteria:**
|
||||
- Security vulnerabilities (eval, innerHTML, dangerouslySetInnerHTML)
|
||||
- Debug code (console.log, debugger)
|
||||
- Type safety (any types)
|
||||
- React best practices (useEffect dependencies)
|
||||
- File sizes (>500 lines)
|
||||
- Lint errors
|
||||
|
||||
**Example:**
|
||||
```
|
||||
PR opened: "Add notifications"
|
||||
↓
|
||||
Copilot reviews:
|
||||
✅ No security issues
|
||||
⚠️ Warning: Console.log in NotificationService.tsx
|
||||
💡 Suggestion: Replace 'any' types with specific interfaces
|
||||
⚠️ Warning: NotificationPanel.tsx has 180 additions
|
||||
✅ Status: APPROVED (fix warnings before merge)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ✅ Phase 4: Integration & Merge
|
||||
|
||||
**Workflows:**
|
||||
- `pr-management.yml` - PR labeling, description validation, issue linking
|
||||
- `merge-conflict-check.yml` - Conflict detection
|
||||
- `auto-merge.yml` - Automated merging
|
||||
|
||||
**Copilot Features:**
|
||||
- ✅ **Auto-Labeling**: Categorizes PRs by affected areas (ui, tests, docs, workflows)
|
||||
- ✅ **Size Classification**: Labels as small/medium/large
|
||||
- ✅ **Description Quality**: Validates PR has adequate description
|
||||
- ✅ **Issue Linking**: Connects PRs to related issues
|
||||
- ✅ **Conflict Detection**: Alerts when merge conflicts exist with @copilot mention
|
||||
- ✅ **Auto-Merge**: Merges approved PRs that pass all checks
|
||||
- ✅ **Branch Cleanup**: Deletes branches after successful merge
|
||||
|
||||
**How It Works:**
|
||||
1. PR is opened/updated
|
||||
2. Auto-labeled based on changed files
|
||||
3. Description validated for quality
|
||||
4. Related issues linked automatically
|
||||
5. Conflicts checked against base branch
|
||||
6. Once approved + tests pass → auto-merged
|
||||
7. Branch deleted automatically
|
||||
|
||||
---
|
||||
|
||||
### ✅ Phase 5: Deployment
|
||||
|
||||
**Workflows:**
|
||||
- `deployment.yml` - Pre-deployment validation, health checks, monitoring
|
||||
|
||||
**Copilot Features:**
|
||||
- ✅ **Pre-Deployment Validation**: Schema validation, security audit, size check
|
||||
- ✅ **Breaking Change Detection**: Identifies commits with breaking changes
|
||||
- ✅ **Deployment Notes**: Auto-generates categorized release notes
|
||||
- ✅ **Health Checks**: Verifies build integrity and critical files
|
||||
- ✅ **Deployment Tracking**: Creates monitoring issues for releases
|
||||
- ✅ **Security Audit**: Scans dependencies for vulnerabilities
|
||||
- ✅ **Environment Validation**: Checks required configuration exists
|
||||
|
||||
**Deployment Checklist:**
|
||||
- Database schema validity
|
||||
- Security vulnerabilities (npm audit)
|
||||
- Build size optimization
|
||||
- Environment configuration
|
||||
- Breaking changes documented
|
||||
- Health check verification
|
||||
|
||||
**Example:**
|
||||
```
|
||||
Release: v2.0.0
|
||||
↓
|
||||
Copilot generates:
|
||||
- Deployment Summary with categorized commits
|
||||
- Breaking changes alert (2 found)
|
||||
- New features list (8)
|
||||
- Bug fixes list (12)
|
||||
- Creates tracking issue with 48hr monitoring plan
|
||||
- Health checks: ✅ All passed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ✅ Phase 6: Maintenance & Operations
|
||||
|
||||
**Workflows:**
|
||||
- `issue-triage.yml` - Issue categorization, auto-fix suggestions
|
||||
- `dependabot.yml` - Dependency updates
|
||||
|
||||
**Copilot Features:**
|
||||
- ✅ **Automatic Triage**: Categorizes issues by type and priority
|
||||
- ✅ **AI-Fixable Detection**: Identifies issues suitable for automated fixes
|
||||
- ✅ **Good First Issue**: Flags beginner-friendly issues
|
||||
- ✅ **Auto-Fix Branch Creation**: Creates branches for automated fixes
|
||||
- ✅ **Dependency Monitoring**: Daily npm updates, weekly devcontainer updates
|
||||
- ✅ **Security Vulnerability Tracking**: Auto-creates issues for critical CVEs
|
||||
|
||||
**Issue Categories:**
|
||||
- Type: bug, enhancement, documentation, testing, security, performance
|
||||
- Priority: high, medium, low
|
||||
- Difficulty: good first issue
|
||||
- Automation: ai-fixable, auto-fix
|
||||
|
||||
---
|
||||
|
||||
## Copilot Interaction Patterns
|
||||
|
||||
### 1. In Issues
|
||||
|
||||
**Mention Patterns:**
|
||||
```markdown
|
||||
@copilot implement this issue
|
||||
@copilot review the architecture
|
||||
@copilot suggest testing strategy
|
||||
@copilot help with database schema
|
||||
@copilot fix this issue
|
||||
```
|
||||
|
||||
**Response:** Context-aware guidance based on:
|
||||
- Copilot Instructions (.github/copilot-instructions.md)
|
||||
- PRD.md project mission
|
||||
- Existing package structure
|
||||
- Architectural principles
|
||||
|
||||
### 2. In Pull Requests
|
||||
|
||||
**Automatic Feedback:**
|
||||
- Code metrics on every push
|
||||
- Refactoring suggestions
|
||||
- Architectural compliance
|
||||
- Security review
|
||||
- Quality assessment
|
||||
|
||||
**Mention for:**
|
||||
- Specific implementation questions
|
||||
- Refactoring guidance
|
||||
- Testing approaches
|
||||
- Architectural decisions
|
||||
|
||||
### 3. In Your IDE
|
||||
|
||||
**Context Files:**
|
||||
- `.github/copilot-instructions.md` - Comprehensive project guidelines
|
||||
- `PRD.md` - Feature context and project mission
|
||||
- `/packages/*/seed/` - Existing patterns to follow
|
||||
- `prisma/schema.prisma` - Database structure
|
||||
|
||||
**Best Practices:**
|
||||
- Reference PRD when asking about features
|
||||
- Show existing patterns when requesting new code
|
||||
- Ask about architectural decisions before implementing
|
||||
- Request declarative approaches explicitly
|
||||
|
||||
---
|
||||
|
||||
## Measurement & Metrics
|
||||
|
||||
### Code Quality Metrics
|
||||
|
||||
**Tracked Automatically:**
|
||||
- Declarative ratio: `(JSON files + Lua scripts) / TypeScript files * 100%`
|
||||
- Component size: Files exceeding 150 LOC
|
||||
- TypeScript usage: Total .ts/.tsx files
|
||||
- Configuration: Database-driven vs hardcoded
|
||||
|
||||
**Goals:**
|
||||
- Declarative ratio: >50%
|
||||
- Component size: <150 LOC
|
||||
- TypeScript: Minimal (infrastructure only)
|
||||
- Configuration: 100% database-driven
|
||||
|
||||
### SDLC Coverage Metrics
|
||||
|
||||
**Phase Coverage:**
|
||||
- ✅ Planning: Architecture review, PRD alignment
|
||||
- ✅ Development: Continuous feedback, refactoring
|
||||
- ✅ Testing: Security scan, quality checks
|
||||
- ✅ Integration: Auto-merge, conflict resolution
|
||||
- ✅ Deployment: Validation, health checks
|
||||
- ✅ Maintenance: Triage, auto-fix, dependencies
|
||||
|
||||
**Coverage: 100% of SDLC phases**
|
||||
|
||||
### Automation Metrics
|
||||
|
||||
**Automated Actions:**
|
||||
- Issue triage and labeling
|
||||
- PR categorization
|
||||
- Code review and approval
|
||||
- Merge and branch cleanup
|
||||
- Deployment validation
|
||||
- Security vulnerability tracking
|
||||
- Dependency updates
|
||||
|
||||
**Human Intervention Required:**
|
||||
- Final approval for deployment
|
||||
- Resolution of blocking issues
|
||||
- Complex architectural decisions
|
||||
- Multi-tenant design considerations
|
||||
|
||||
---
|
||||
|
||||
## Configuration Files
|
||||
|
||||
### 1. Copilot Instructions
|
||||
**File:** `.github/copilot-instructions.md`
|
||||
|
||||
**Contains:**
|
||||
- Project context and architecture
|
||||
- Code conventions (TS, React, Lua, Prisma)
|
||||
- Development workflow guidance
|
||||
- Security considerations
|
||||
- Common patterns and examples
|
||||
- Integration with workflows
|
||||
- Useful commands
|
||||
|
||||
### 2. Workflow Definitions
|
||||
**Directory:** `.github/workflows/`
|
||||
|
||||
**Files:**
|
||||
- `ci.yml` - CI/CD pipeline
|
||||
- `code-review.yml` - Automated review
|
||||
- `auto-merge.yml` - Merge automation
|
||||
- `issue-triage.yml` - Issue management
|
||||
- `pr-management.yml` - PR automation
|
||||
- `merge-conflict-check.yml` - Conflict detection
|
||||
- `planning.yml` - Planning assistance *(NEW)*
|
||||
- `development.yml` - Development feedback *(NEW)*
|
||||
- `deployment.yml` - Deployment automation *(NEW)*
|
||||
|
||||
### 3. Documentation
|
||||
**Files:**
|
||||
- `.github/workflows/README.md` - Workflow documentation
|
||||
- `PRD.md` - Product requirements
|
||||
- `SECURITY.md` - Security policies
|
||||
- `README.md` - Project overview
|
||||
|
||||
---
|
||||
|
||||
## Benefits
|
||||
|
||||
### For Developers
|
||||
|
||||
1. **Faster Onboarding**: Copilot guides new developers with architectural principles
|
||||
2. **Consistent Quality**: Automated checks enforce coding standards
|
||||
3. **Reduced Review Time**: Many issues caught automatically
|
||||
4. **Better Architecture**: Continuous feedback on declarative principles
|
||||
5. **Security Awareness**: Proactive vulnerability detection
|
||||
6. **Learning Tool**: Suggestions teach best practices
|
||||
|
||||
### For Teams
|
||||
|
||||
1. **Standardized Process**: Every issue/PR follows same workflow
|
||||
2. **Knowledge Sharing**: Architectural principles documented and enforced
|
||||
3. **Reduced Technical Debt**: Refactoring suggestions identify improvement areas
|
||||
4. **Faster Iteration**: Auto-merge reduces bottlenecks
|
||||
5. **Better Tracking**: Deployment and issue tracking automated
|
||||
6. **Visibility**: Metrics show declarative ratio and code quality trends
|
||||
|
||||
### For the Project
|
||||
|
||||
1. **Architectural Integrity**: Maintains 95% declarative goal
|
||||
2. **Scalability**: Package-based structure enforced
|
||||
3. **Multi-Tenant Safety**: Tenant considerations validated
|
||||
4. **Security**: Continuous vulnerability monitoring
|
||||
5. **Documentation**: Auto-generated release notes and tracking
|
||||
6. **Quality**: Consistent enforcement of 150 LOC limit
|
||||
|
||||
---
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
### Potential Additions
|
||||
|
||||
1. **Copilot Workspace Integration**: Direct IDE integration with workflow context
|
||||
2. **AI-Generated Tests**: Auto-generate E2E tests from issue descriptions
|
||||
3. **Performance Monitoring**: Track bundle size, render performance over time
|
||||
4. **Accessibility Checks**: Automated a11y validation in PRs
|
||||
5. **Visual Regression Testing**: Screenshot comparison for UI changes
|
||||
6. **Lua Linting**: Custom linter for Lua scripts following project patterns
|
||||
7. **Package Validation**: Verify package structure meets standards
|
||||
8. **Multi-Tenant Testing**: Automated tenant isolation verification
|
||||
|
||||
### Metrics Dashboard
|
||||
|
||||
**Potential Features:**
|
||||
- Declarative ratio trend over time
|
||||
- Average component size
|
||||
- PR merge time
|
||||
- Auto-fix success rate
|
||||
- Security vulnerability resolution time
|
||||
- Test coverage trends
|
||||
- Deployment frequency
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
|
||||
MetaBuilder's GitHub workflows provide **comprehensive GitHub Copilot integration across all SDLC phases**:
|
||||
|
||||
✅ **Planning** - Architecture review and PRD alignment
|
||||
✅ **Development** - Continuous quality feedback and refactoring
|
||||
✅ **Testing** - Security scanning and quality validation
|
||||
✅ **Integration** - Auto-labeling, review, and merge
|
||||
✅ **Deployment** - Validation, health checks, and tracking
|
||||
✅ **Maintenance** - Issue triage, auto-fix, and dependency management
|
||||
|
||||
**Key Achievements:**
|
||||
- 100% SDLC phase coverage
|
||||
- Automated enforcement of declarative-first principles
|
||||
- Context-aware @copilot assistance throughout development
|
||||
- Comprehensive metrics tracking (declarative ratio, component size)
|
||||
- Security-first approach with continuous vulnerability monitoring
|
||||
- Self-documenting with auto-generated deployment notes
|
||||
|
||||
**Documentation:**
|
||||
- Copilot Instructions: `.github/copilot-instructions.md`
|
||||
- Workflow Guide: `.github/workflows/README.md`
|
||||
- This Summary: `.github/COPILOT_SDLC_SUMMARY.md`
|
||||
|
||||
The workflows ensure that GitHub Copilot can assist developers at every stage, from initial planning through deployment and maintenance, while maintaining the project's architectural integrity and quality standards.
|
||||
188
.github/copilot-instructions.md
vendored
Normal file
188
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,188 @@
|
||||
# GitHub Copilot Instructions for MetaBuilder
|
||||
|
||||
## Project Context
|
||||
|
||||
MetaBuilder is a data-driven, multi-tenant application platform where 95% of functionality is defined through JSON and Lua, not TypeScript. This is a 5-level architecture system with advanced meta-programming capabilities.
|
||||
|
||||
## Key Architectural Principles
|
||||
|
||||
1. **Declarative First**: Prefer JSON configuration and Lua scripts over TypeScript code
|
||||
2. **Modular Packages**: Components should be package-based with isolated seed data
|
||||
3. **Minimal TSX**: Keep TypeScript files small (<150 LOC), use generic renderers
|
||||
4. **Database-Driven**: All configuration, routes, workflows, and schemas in database
|
||||
5. **Multi-Tenant**: Support isolated tenant instances with independent configurations
|
||||
|
||||
## Code Conventions
|
||||
|
||||
### TypeScript/React
|
||||
- Keep all components under 150 lines of code
|
||||
- Use functional components with hooks
|
||||
- Prefer composition over large components
|
||||
- Import from `@/` for absolute paths
|
||||
- Use shadcn components from `@/components/ui`
|
||||
|
||||
### Styling
|
||||
- Use Tailwind utility classes exclusively
|
||||
- Follow the theme defined in `src/index.css`
|
||||
- Font family: IBM Plex Sans (body), Space Grotesk (headings), JetBrains Mono (code)
|
||||
- Colors: Purple/accent theme with oklch color space
|
||||
|
||||
### Database (Prisma)
|
||||
- All schemas in `prisma/schema.prisma`
|
||||
- Run `npm run db:generate` after schema changes
|
||||
- Use Database helper class from `@/lib/database`
|
||||
- Store credentials as SHA-512 hashes
|
||||
|
||||
### Lua Integration
|
||||
- Use Fengari for Lua execution
|
||||
- Lua scripts stored in database
|
||||
- Provide sandboxed execution environment
|
||||
- Common patterns in Lua snippet library
|
||||
|
||||
### Package System
|
||||
- Structure: `/packages/{package-name}/seed/` for data
|
||||
- Each package is self-contained with scripts, components, assets
|
||||
- Use package import/export for distribution
|
||||
- Modular seed data glued together at initialization
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Planning Phase
|
||||
- Review existing PRD.md before making changes
|
||||
- Check package structure in `/packages/` directory
|
||||
- Verify database schema supports new features
|
||||
- Consider multi-tenant implications
|
||||
|
||||
### Implementation Phase
|
||||
- Start with database schema changes if needed
|
||||
- Create or update seed data in package structure
|
||||
- Build generic renderers, not hardcoded components
|
||||
- Add Lua scripts for business logic
|
||||
- Update UI components last
|
||||
|
||||
### Testing Phase
|
||||
- Run `npm run lint` before committing
|
||||
- Execute `npm run test:e2e` for end-to-end tests
|
||||
- Test at multiple permission levels (user, admin, god, supergod)
|
||||
- Verify package import/export works
|
||||
- Check security sandbox effectiveness
|
||||
|
||||
### Documentation Phase
|
||||
- Update PRD.md with feature changes
|
||||
- Document new Lua APIs in appropriate files
|
||||
- Add examples to code snippet library
|
||||
- Update workflow documentation if needed
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- **Never** store plaintext passwords
|
||||
- **Always** use SHA-512 hashing for credentials
|
||||
- **Sandbox** all Lua script execution
|
||||
- **Scan** user-uploaded code for malicious patterns
|
||||
- **Validate** all user inputs
|
||||
- **Escape** HTML content to prevent XSS
|
||||
- **Use** parameterized queries (Prisma handles this)
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### Adding a New Feature
|
||||
1. Define in database schema (Prisma)
|
||||
2. Create seed data in package structure
|
||||
3. Build generic component renderer if needed
|
||||
4. Add Lua scripts for logic
|
||||
5. Wire up in appropriate level UI
|
||||
6. Add tests
|
||||
7. Update documentation
|
||||
|
||||
### Creating a Package
|
||||
1. Create `/packages/{name}/` directory
|
||||
2. Add `/seed/` subdirectory for data
|
||||
3. Define component configurations as JSON
|
||||
4. Add Lua scripts in `/seed/scripts/`
|
||||
5. Include assets in `/static_content/`
|
||||
6. Export package as ZIP with metadata
|
||||
|
||||
### Implementing Declarative Component
|
||||
1. Define JSON schema for component config
|
||||
2. Create Lua scripts for behavior
|
||||
3. Register in component catalog
|
||||
4. Build generic renderer using RenderComponent
|
||||
5. Add to PropertyInspector for editing
|
||||
6. Test in canvas/builder
|
||||
|
||||
## AI-Assisted Development Tips
|
||||
|
||||
### When Reviewing Code
|
||||
- Check for hardcoded values that should be in database
|
||||
- Verify component size is under 150 LOC
|
||||
- Ensure TypeScript is only used where necessary
|
||||
- Look for opportunities to make code more generic
|
||||
|
||||
### When Writing Code
|
||||
- Prefer database-driven configuration
|
||||
- Use existing generic renderers when possible
|
||||
- Follow established patterns in codebase
|
||||
- Keep functions pure and testable
|
||||
|
||||
### When Fixing Bugs
|
||||
- Check seed data first (common source of issues)
|
||||
- Verify Prisma client is generated
|
||||
- Ensure database is initialized
|
||||
- Test with different permission levels
|
||||
|
||||
### When Suggesting Improvements
|
||||
- Favor declarative approaches over imperative
|
||||
- Suggest package structure for new features
|
||||
- Recommend Lua for business logic when appropriate
|
||||
- Consider multi-tenant implications
|
||||
|
||||
## Integration with Workflows
|
||||
|
||||
This file helps Copilot understand the project during:
|
||||
- **Code Review** (`code-review.yml`): Apply these principles when reviewing PRs
|
||||
- **Issue Triage** (`issue-triage.yml`): Suggest fixes following these patterns
|
||||
- **Auto-Fix** (`issue-triage.yml`): Generate fixes that align with architecture
|
||||
- **PR Management** (`pr-management.yml`): Validate changes follow conventions
|
||||
|
||||
## Questions to Ask
|
||||
|
||||
When uncertain, Copilot should consider:
|
||||
1. Can this be declarative instead of imperative?
|
||||
2. Should this be in the database or in code?
|
||||
3. Is this feature package-worthy?
|
||||
4. Does this work across all permission levels?
|
||||
5. Is the component under 150 LOC?
|
||||
6. Could Lua handle this logic instead?
|
||||
7. Does this maintain multi-tenant isolation?
|
||||
|
||||
## Useful Commands
|
||||
|
||||
```bash
|
||||
# Database operations
|
||||
npm run db:generate
|
||||
npm run db:push
|
||||
npm run db:studio
|
||||
|
||||
# Testing
|
||||
npm run lint
|
||||
npm run lint:fix
|
||||
npm run test:e2e
|
||||
npm run test:e2e:ui
|
||||
|
||||
# Development
|
||||
npm run dev
|
||||
npm run build
|
||||
|
||||
# Package operations (in app)
|
||||
# Use PackageManager component to import/export packages
|
||||
```
|
||||
|
||||
## Resources
|
||||
|
||||
- PRD: `/PRD.md`
|
||||
- Database schema: `/prisma/schema.prisma`
|
||||
- Packages: `/packages/` directory
|
||||
- Seed data: `/src/seed-data/` and package seed directories
|
||||
- Documentation: `/docs/` directory
|
||||
- Components: `/src/components/` directory
|
||||
- Workflows: `/.github/workflows/` directory
|
||||
206
.github/workflows/README.md
vendored
206
.github/workflows/README.md
vendored
@@ -1,6 +1,18 @@
|
||||
# GitHub Workflows Documentation
|
||||
|
||||
This directory contains automated workflows for CI/CD, code quality, and AI-assisted development.
|
||||
This directory contains automated workflows for CI/CD, code quality, and comprehensive AI-assisted development throughout the entire SDLC.
|
||||
|
||||
## 🤖 GitHub Copilot Integration
|
||||
|
||||
All workflows are designed to work seamlessly with **GitHub Copilot** to assist throughout the Software Development Lifecycle:
|
||||
|
||||
- **Planning Phase**: Architecture review, PRD alignment, implementation guidance
|
||||
- **Development Phase**: Continuous quality feedback, code suggestions, refactoring opportunities
|
||||
- **Testing Phase**: Automated code review, security checks, quality validation
|
||||
- **Deployment Phase**: Pre-deployment validation, health checks, monitoring
|
||||
- **Maintenance Phase**: Issue triage, automated fixes, dependency management
|
||||
|
||||
**📖 Copilot Instructions:** [.github/copilot-instructions.md](../copilot-instructions.md)
|
||||
|
||||
## Workflows Overview
|
||||
|
||||
@@ -8,6 +20,7 @@ This directory contains automated workflows for CI/CD, code quality, and AI-assi
|
||||
**Triggered on:** Push to main/master/develop branches, Pull requests
|
||||
|
||||
**Jobs:**
|
||||
- **Prisma Check**: Validates database schema and generates Prisma client
|
||||
- **Lint**: Runs ESLint to check code quality
|
||||
- **Build**: Builds the application and uploads artifacts
|
||||
- **E2E Tests**: Runs Playwright end-to-end tests
|
||||
@@ -76,11 +89,85 @@ This directory contains automated workflows for CI/CD, code quality, and AI-assi
|
||||
- Adds/removes `merge-conflict` label
|
||||
- Fails CI if conflicts exist
|
||||
|
||||
### 7. Planning & Design (`planning.yml`) 🆕
|
||||
**Triggered on:** Issues opened or labeled with enhancement/feature-request
|
||||
|
||||
**Features:**
|
||||
- **Architecture Review**: Analyzes feature requests against architectural principles
|
||||
- **PRD Alignment Check**: Ensures new features align with project mission
|
||||
- **Implementation Suggestions**: Provides step-by-step implementation guidance
|
||||
- Validates declarative-first approach
|
||||
- Checks multi-tenant and permission considerations
|
||||
- Creates design checklists for feature implementation
|
||||
- **@copilot integration** for architecture guidance
|
||||
|
||||
**SDLC Phase:** Planning & Design
|
||||
|
||||
### 8. Development Assistance (`development.yml`) 🆕
|
||||
**Triggered on:** Push to feature branches, PR updates, @copilot mentions
|
||||
|
||||
**Features:**
|
||||
- **Continuous Quality Feedback**: Real-time code metrics and architectural compliance
|
||||
- **Declarative Ratio Tracking**: Monitors JSON/Lua vs TypeScript balance
|
||||
- **Component Size Monitoring**: Flags components exceeding 150 LOC
|
||||
- **Refactoring Suggestions**: Identifies opportunities for improvement
|
||||
- **@copilot Interaction Handler**: Responds to @copilot mentions with context-aware guidance
|
||||
- Provides architectural reminders and best practices
|
||||
- Suggests generic renderers over hardcoded components
|
||||
|
||||
**SDLC Phase:** Development
|
||||
|
||||
### 9. Deployment & Monitoring (`deployment.yml`) 🆕
|
||||
**Triggered on:** Push to main, releases, manual workflow dispatch
|
||||
|
||||
**Features:**
|
||||
- **Pre-Deployment Validation**: Schema validation, security audit, package size check
|
||||
- **Breaking Change Detection**: Identifies breaking commits
|
||||
- **Deployment Summary**: Generates release notes with categorized changes
|
||||
- **Post-Deployment Health Checks**: Verifies build integrity and critical files
|
||||
- **Deployment Tracking Issues**: Creates monitoring issues for releases
|
||||
- **Security Dependency Audit**: Detects and reports vulnerabilities
|
||||
- Auto-creates security issues for critical vulnerabilities
|
||||
|
||||
**SDLC Phase:** Deployment & Operations
|
||||
|
||||
## SDLC Coverage
|
||||
|
||||
### 🎯 Complete Lifecycle Support
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ Planning │ ← planning.yml (Architecture Review, PRD Check)
|
||||
└──────┬──────┘
|
||||
↓
|
||||
┌─────────────┐
|
||||
│ Development │ ← development.yml (Quality Feedback, Refactoring)
|
||||
└──────┬──────┘
|
||||
↓
|
||||
┌─────────────┐
|
||||
│ Testing │ ← ci.yml, code-review.yml (Lint, Build, E2E)
|
||||
└──────┬──────┘
|
||||
↓
|
||||
┌─────────────┐
|
||||
│ Integration │ ← pr-management.yml, auto-merge.yml
|
||||
└──────┬──────┘
|
||||
↓
|
||||
┌─────────────┐
|
||||
│ Deployment │ ← deployment.yml (Validation, Health Checks)
|
||||
└──────┬──────┘
|
||||
↓
|
||||
┌─────────────┐
|
||||
│ Maintenance │ ← issue-triage.yml, dependabot.yml
|
||||
└─────────────┘
|
||||
```
|
||||
|
||||
## Labels Used
|
||||
|
||||
### Automated Labels
|
||||
- `bug` - Bug fixes
|
||||
- `enhancement` - New features
|
||||
- `feature-request` - Proposed new features
|
||||
- `ready-to-implement` - Features ready for development
|
||||
- `documentation` - Documentation changes
|
||||
- `tests` - Test-related changes
|
||||
- `security` - Security issues
|
||||
@@ -96,6 +183,15 @@ This directory contains automated workflows for CI/CD, code quality, and AI-assi
|
||||
- `merge-conflict` - PR has merge conflicts
|
||||
- `auto-fix` - Request automated fix
|
||||
- `create-pr` - Create fix PR for issue
|
||||
- `deployment` - Deployment tracking
|
||||
- `monitoring` - Monitoring and observability
|
||||
- `dependencies` - Dependency updates
|
||||
- `refactor` - Code refactoring
|
||||
- `chore` - Maintenance tasks
|
||||
- `workflows` - Workflow changes
|
||||
- `ui` - UI/UX changes
|
||||
- `styling` - CSS/Tailwind changes
|
||||
- `configuration` - Config file changes
|
||||
|
||||
## Configuration
|
||||
|
||||
@@ -118,6 +214,28 @@ The project uses ESLint with TypeScript support and React-specific rules:
|
||||
|
||||
## Usage
|
||||
|
||||
### Working with GitHub Copilot
|
||||
|
||||
**In Issues:**
|
||||
```markdown
|
||||
@copilot implement this issue
|
||||
@copilot review the architecture
|
||||
@copilot suggest testing strategy
|
||||
@copilot help with this
|
||||
```
|
||||
|
||||
**In Pull Requests:**
|
||||
- Automated feedback on every push
|
||||
- Continuous quality metrics
|
||||
- Refactoring suggestions
|
||||
- Architectural compliance checks
|
||||
|
||||
**In Your IDE:**
|
||||
- Reference `.github/copilot-instructions.md` for context
|
||||
- Use PRD.md for feature context
|
||||
- Follow existing patterns in `/packages/`
|
||||
- Ask Copilot about architectural decisions
|
||||
|
||||
### Testing Workflows Locally with Act
|
||||
|
||||
Before pushing to GitHub, test workflows locally using [act](https://github.com/nektos/act):
|
||||
@@ -162,29 +280,85 @@ npm run build
|
||||
|
||||
### Triggering Workflows
|
||||
|
||||
**For Issues:**
|
||||
**Planning Phase:**
|
||||
1. Create issue with `enhancement` or `feature-request` label
|
||||
2. Automated architecture review and PRD alignment check
|
||||
3. Add `ready-to-implement` label for implementation guidance
|
||||
4. Follow suggested step-by-step plan
|
||||
|
||||
**Development Phase:**
|
||||
1. Create feature branch: `git checkout -b feature/issue-X`
|
||||
2. Push changes - triggers continuous quality feedback
|
||||
3. Get real-time metrics on declarative ratio, component sizes
|
||||
4. Mention `@copilot` in commits/PRs for specific help
|
||||
5. Review refactoring suggestions
|
||||
|
||||
**Testing & Review Phase:**
|
||||
1. Open PR - automatically reviewed, labeled, and validated
|
||||
2. Address any architectural compliance issues
|
||||
3. Get approval + pass tests
|
||||
4. Automatically merged and branch deleted
|
||||
|
||||
**Deployment Phase:**
|
||||
1. Merge to main - triggers pre-deployment validation
|
||||
2. Create release - generates deployment notes and tracking issue
|
||||
3. Post-deployment health checks run automatically
|
||||
4. Monitor deployment tracking issue for 48 hours
|
||||
|
||||
**Maintenance Phase:**
|
||||
1. Security audits run on every deployment
|
||||
2. Dependabot creates automated dependency PRs
|
||||
3. Issue triage handles new bug reports
|
||||
4. @copilot assists with fixes and improvements
|
||||
|
||||
### For Issues:
|
||||
1. Create an issue - automatically triaged and labeled
|
||||
2. Add `auto-fix` label to request automated fix
|
||||
3. Add `create-pr` label to create a fix branch
|
||||
2. Add `enhancement` label - triggers architecture review
|
||||
3. Add `ready-to-implement` label - get implementation guidance
|
||||
4. Add `auto-fix` label to request automated fix
|
||||
5. Add `create-pr` label to create a fix branch
|
||||
6. Mention `@copilot` for specific assistance
|
||||
|
||||
**For PRs:**
|
||||
1. Open a PR - automatically reviewed, labeled, and validated
|
||||
2. Push changes - triggers CI/CD pipeline
|
||||
2. Push changes - triggers CI/CD pipeline and quality feedback
|
||||
3. Get approval + pass tests - automatically merged and branch deleted
|
||||
4. Receive continuous refactoring suggestions
|
||||
|
||||
### Working with AI Assistance
|
||||
|
||||
**Request automated fixes:**
|
||||
- Comment "@copilot fix this issue" on any issue
|
||||
- Add `ai-fixable` label to issues that can be auto-fixed
|
||||
**In Issues & PRs:**
|
||||
- Mention `@copilot implement this` - Get implementation guidance
|
||||
- Mention `@copilot review` - Request code review
|
||||
- Mention `@copilot architecture` - Get architectural guidance
|
||||
- Mention `@copilot test` - Get testing help
|
||||
- Mention `@copilot fix this issue` - Request automated fix
|
||||
|
||||
**Get code review feedback:**
|
||||
- Reviews are automatic on every PR
|
||||
- Address feedback and push changes
|
||||
- Workflow will re-review automatically
|
||||
**In Your IDE:**
|
||||
- Use GitHub Copilot extension with context from `.github/copilot-instructions.md`
|
||||
- Reference PRD.md when prompting for features
|
||||
- Follow patterns from existing packages
|
||||
- Ask about architectural decisions before implementing
|
||||
|
||||
**Automated Copilot Features:**
|
||||
- Architecture review on feature requests
|
||||
- Continuous quality feedback during development
|
||||
- Refactoring opportunity detection
|
||||
- PRD alignment checking
|
||||
- Implementation step-by-step guidance
|
||||
|
||||
## Best Practices
|
||||
|
||||
### For Development
|
||||
1. **Follow declarative-first principles** - Prefer JSON + Lua over TypeScript
|
||||
2. **Keep components under 150 LOC** - Break large files into smaller ones
|
||||
3. **Use generic renderers** - Avoid hardcoded component TSX files
|
||||
4. **Store config in database** - Use Prisma, not hardcoded values
|
||||
5. **Organize as packages** - Self-contained features with seed data
|
||||
|
||||
### For Pull Requests
|
||||
|
||||
### For Pull Requests
|
||||
1. **Write descriptive PR titles** - Used for automatic labeling
|
||||
2. **Link issues in PR descriptions** - Enables automatic issue closing
|
||||
3. **Keep PRs focused and small** - Easier to review and merge
|
||||
@@ -192,6 +366,14 @@ npm run build
|
||||
5. **Test locally before pushing** - Run lint and tests
|
||||
6. **Don't commit console.log statements** - Will be flagged in review
|
||||
7. **Remove debugger statements** - Treated as blocking issues
|
||||
8. **Review refactoring suggestions** - Continuous improvement opportunities
|
||||
|
||||
### For Issues
|
||||
1. **Use clear, descriptive titles** - Helps with automatic categorization
|
||||
2. **Provide context** - Link to PRD sections, mention permission levels
|
||||
3. **Consider architecture** - Is this declarative? Package-worthy? Multi-tenant?
|
||||
4. **Use labels appropriately** - Triggers relevant workflow automation
|
||||
5. **Engage with @copilot** - Get AI assistance throughout implementation
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
||||
416
.github/workflows/deployment.yml
vendored
Normal file
416
.github/workflows/deployment.yml
vendored
Normal file
@@ -0,0 +1,416 @@
|
||||
name: Deployment & Monitoring
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
environment:
|
||||
description: 'Deployment environment'
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- staging
|
||||
- production
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
pre-deployment-check:
|
||||
name: Pre-Deployment Validation
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Generate Prisma Client
|
||||
run: npm run db:generate
|
||||
env:
|
||||
DATABASE_URL: file:./dev.db
|
||||
|
||||
- name: Validate database schema
|
||||
run: npx prisma validate
|
||||
|
||||
- name: Check for breaking changes
|
||||
id: breaking-changes
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
// Get recent commits
|
||||
const commits = await github.rest.repos.listCommits({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
per_page: 10
|
||||
});
|
||||
|
||||
let hasBreaking = false;
|
||||
let breakingChanges = [];
|
||||
|
||||
for (const commit of commits.data) {
|
||||
const message = commit.commit.message.toLowerCase();
|
||||
if (message.includes('breaking') || message.includes('breaking:')) {
|
||||
hasBreaking = true;
|
||||
breakingChanges.push({
|
||||
sha: commit.sha.substring(0, 7),
|
||||
message: commit.commit.message.split('\n')[0]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
core.setOutput('has_breaking', hasBreaking);
|
||||
|
||||
if (hasBreaking) {
|
||||
console.log('⚠️ Breaking changes detected:');
|
||||
breakingChanges.forEach(c => console.log(` - ${c.sha}: ${c.message}`));
|
||||
}
|
||||
|
||||
return { hasBreaking, breakingChanges };
|
||||
|
||||
- name: Run security audit
|
||||
run: npm audit --audit-level=moderate
|
||||
continue-on-error: true
|
||||
|
||||
- name: Check package size
|
||||
run: |
|
||||
npm run build
|
||||
du -sh dist/
|
||||
|
||||
# Check if dist is larger than 10MB
|
||||
SIZE=$(du -sm dist/ | cut -f1)
|
||||
if [ $SIZE -gt 10 ]; then
|
||||
echo "⚠️ Warning: Build size is ${SIZE}MB (>10MB). Consider optimizing."
|
||||
else
|
||||
echo "✅ Build size is ${SIZE}MB"
|
||||
fi
|
||||
|
||||
- name: Validate environment configuration
|
||||
run: |
|
||||
echo "Checking for required environment variables..."
|
||||
|
||||
# Check .env.example exists
|
||||
if [ ! -f .env.example ]; then
|
||||
echo "❌ .env.example not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Environment configuration validated"
|
||||
|
||||
deployment-summary:
|
||||
name: Create Deployment Summary
|
||||
runs-on: ubuntu-latest
|
||||
needs: pre-deployment-check
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Generate deployment notes
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
|
||||
// Get commits since last release
|
||||
let commits = [];
|
||||
try {
|
||||
const result = await github.rest.repos.listCommits({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
per_page: 20
|
||||
});
|
||||
commits = result.data;
|
||||
} catch (e) {
|
||||
console.log('Could not fetch commits:', e.message);
|
||||
}
|
||||
|
||||
// Categorize commits
|
||||
const features = [];
|
||||
const fixes = [];
|
||||
const breaking = [];
|
||||
const other = [];
|
||||
|
||||
for (const commit of commits) {
|
||||
const message = commit.commit.message;
|
||||
const firstLine = message.split('\n')[0];
|
||||
const sha = commit.sha.substring(0, 7);
|
||||
|
||||
if (message.toLowerCase().includes('breaking')) {
|
||||
breaking.push(`- ${firstLine} (${sha})`);
|
||||
} else if (firstLine.match(/^feat|^feature|^add/i)) {
|
||||
features.push(`- ${firstLine} (${sha})`);
|
||||
} else if (firstLine.match(/^fix|^bug/i)) {
|
||||
fixes.push(`- ${firstLine} (${sha})`);
|
||||
} else {
|
||||
other.push(`- ${firstLine} (${sha})`);
|
||||
}
|
||||
}
|
||||
|
||||
// Create deployment notes
|
||||
let notes = `# Deployment Summary\n\n`;
|
||||
notes += `**Date:** ${new Date().toISOString()}\n`;
|
||||
notes += `**Branch:** ${context.ref}\n`;
|
||||
notes += `**Commit:** ${context.sha.substring(0, 7)}\n\n`;
|
||||
|
||||
if (breaking.length > 0) {
|
||||
notes += `## ⚠️ Breaking Changes\n\n${breaking.join('\n')}\n\n`;
|
||||
}
|
||||
|
||||
if (features.length > 0) {
|
||||
notes += `## ✨ New Features\n\n${features.slice(0, 10).join('\n')}\n\n`;
|
||||
}
|
||||
|
||||
if (fixes.length > 0) {
|
||||
notes += `## 🐛 Bug Fixes\n\n${fixes.slice(0, 10).join('\n')}\n\n`;
|
||||
}
|
||||
|
||||
if (other.length > 0) {
|
||||
notes += `## 🔧 Other Changes\n\n${other.slice(0, 5).join('\n')}\n\n`;
|
||||
}
|
||||
|
||||
notes += `---\n`;
|
||||
notes += `**Total commits:** ${commits.length}\n\n`;
|
||||
notes += `**@copilot** Review the deployment for any potential issues.`;
|
||||
|
||||
console.log(notes);
|
||||
|
||||
// Save to file for artifact
|
||||
fs.writeFileSync('DEPLOYMENT_NOTES.md', notes);
|
||||
|
||||
- name: Upload deployment notes
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: deployment-notes
|
||||
path: DEPLOYMENT_NOTES.md
|
||||
retention-days: 90
|
||||
|
||||
post-deployment-health:
|
||||
name: Post-Deployment Health Check
|
||||
runs-on: ubuntu-latest
|
||||
needs: deployment-summary
|
||||
if: github.event_name == 'push' || github.event_name == 'release'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
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: Generate Prisma Client
|
||||
run: npm run db:generate
|
||||
env:
|
||||
DATABASE_URL: file:./dev.db
|
||||
|
||||
- name: Verify build integrity
|
||||
run: |
|
||||
npm run build
|
||||
|
||||
# Check critical files exist
|
||||
if [ ! -f "dist/index.html" ]; then
|
||||
echo "❌ Critical file missing: dist/index.html"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Build integrity verified"
|
||||
|
||||
- name: Create health check report
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const report = `## 🏥 Post-Deployment Health Check
|
||||
|
||||
**Status:** ✅ Healthy
|
||||
**Timestamp:** ${new Date().toISOString()}
|
||||
**Environment:** ${context.ref}
|
||||
|
||||
### Checks Performed
|
||||
- ✅ Build integrity verified
|
||||
- ✅ Database schema valid
|
||||
- ✅ Dependencies installed
|
||||
- ✅ Critical files present
|
||||
|
||||
### Monitoring
|
||||
- Monitor application logs for errors
|
||||
- Check database connection stability
|
||||
- Verify user authentication flows
|
||||
- Test multi-tenant isolation
|
||||
- Validate package system operations
|
||||
|
||||
**@copilot** Assist with monitoring and troubleshooting if issues arise.
|
||||
`;
|
||||
|
||||
console.log(report);
|
||||
|
||||
create-deployment-issue:
|
||||
name: Track Deployment
|
||||
runs-on: ubuntu-latest
|
||||
needs: [pre-deployment-check, post-deployment-health]
|
||||
if: github.event_name == 'release'
|
||||
steps:
|
||||
- name: Create deployment tracking issue
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const release = context.payload.release;
|
||||
|
||||
const issueBody = `## 🚀 Deployment Tracking: ${release.name || release.tag_name}
|
||||
|
||||
**Release:** [${release.tag_name}](${release.html_url})
|
||||
**Published:** ${release.published_at}
|
||||
**Published by:** @${release.author.login}
|
||||
|
||||
### Deployment Checklist
|
||||
|
||||
- [x] Pre-deployment validation completed
|
||||
- [x] Build successful
|
||||
- [x] Health checks passed
|
||||
- [ ] Database migrations applied (if any)
|
||||
- [ ] Smoke tests completed
|
||||
- [ ] User acceptance testing
|
||||
- [ ] Production monitoring confirmed
|
||||
- [ ] Documentation updated
|
||||
|
||||
### Post-Deployment Monitoring
|
||||
|
||||
Monitor the following for 24-48 hours:
|
||||
- Application error rates
|
||||
- Database query performance
|
||||
- User authentication success rate
|
||||
- Multi-tenant operations
|
||||
- Package system functionality
|
||||
- Memory and CPU usage
|
||||
|
||||
### Rollback Plan
|
||||
|
||||
If critical issues are detected:
|
||||
1. Document the issue with logs and reproduction steps
|
||||
2. Notify team members
|
||||
3. Execute rollback: \`git revert ${context.sha}\`
|
||||
4. Deploy previous stable version
|
||||
5. Create incident report
|
||||
|
||||
**@copilot** Monitor this deployment and assist with any issues that arise.
|
||||
|
||||
---
|
||||
|
||||
Close this issue once deployment is verified stable after 48 hours.`;
|
||||
|
||||
const issue = await github.rest.issues.create({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
title: `Deployment: ${release.tag_name}`,
|
||||
body: issueBody,
|
||||
labels: ['deployment', 'monitoring']
|
||||
});
|
||||
|
||||
console.log(`Created tracking issue: #${issue.data.number}`);
|
||||
|
||||
dependency-audit:
|
||||
name: Security Audit
|
||||
runs-on: ubuntu-latest
|
||||
needs: pre-deployment-check
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Audit dependencies
|
||||
id: audit
|
||||
run: |
|
||||
npm audit --json > audit-report.json || true
|
||||
|
||||
# Check for critical vulnerabilities
|
||||
CRITICAL=$(cat audit-report.json | grep -o '"critical":[0-9]*' | grep -o '[0-9]*' || echo "0")
|
||||
HIGH=$(cat audit-report.json | grep -o '"high":[0-9]*' | grep -o '[0-9]*' || echo "0")
|
||||
|
||||
echo "critical=$CRITICAL" >> $GITHUB_OUTPUT
|
||||
echo "high=$HIGH" >> $GITHUB_OUTPUT
|
||||
|
||||
if [ "$CRITICAL" -gt 0 ] || [ "$HIGH" -gt 0 ]; then
|
||||
echo "⚠️ Security vulnerabilities found: $CRITICAL critical, $HIGH high"
|
||||
else
|
||||
echo "✅ No critical or high security vulnerabilities"
|
||||
fi
|
||||
|
||||
- name: Create security issue if vulnerabilities found
|
||||
if: steps.audit.outputs.critical > 0 || steps.audit.outputs.high > 0
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const critical = ${{ steps.audit.outputs.critical }};
|
||||
const high = ${{ steps.audit.outputs.high }};
|
||||
|
||||
const issueBody = `## 🔒 Security Audit Alert
|
||||
|
||||
Security vulnerabilities detected in dependencies:
|
||||
- **Critical:** ${critical}
|
||||
- **High:** ${high}
|
||||
|
||||
### Action Required
|
||||
|
||||
1. Review the vulnerabilities: \`npm audit\`
|
||||
2. Update affected packages: \`npm audit fix\`
|
||||
3. Test the application after updates
|
||||
4. If auto-fix doesn't work, manually update packages
|
||||
5. Consider alternatives for packages with unfixable issues
|
||||
|
||||
### Review Process
|
||||
|
||||
\`\`\`bash
|
||||
# View detailed audit
|
||||
npm audit
|
||||
|
||||
# Attempt automatic fix
|
||||
npm audit fix
|
||||
|
||||
# Force fix (may introduce breaking changes)
|
||||
npm audit fix --force
|
||||
|
||||
# Check results
|
||||
npm audit
|
||||
\`\`\`
|
||||
|
||||
**@copilot** Suggest safe dependency updates to resolve these vulnerabilities.
|
||||
|
||||
---
|
||||
|
||||
**Priority:** ${critical > 0 ? 'CRITICAL' : 'HIGH'}
|
||||
**Created:** ${new Date().toISOString()}
|
||||
`;
|
||||
|
||||
await github.rest.issues.create({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
title: `Security: ${critical} critical, ${high} high vulnerabilities`,
|
||||
body: issueBody,
|
||||
labels: ['security', 'dependencies', critical > 0 ? 'priority: high' : 'priority: medium']
|
||||
});
|
||||
378
.github/workflows/development.yml
vendored
Normal file
378
.github/workflows/development.yml
vendored
Normal file
@@ -0,0 +1,378 @@
|
||||
name: Development Assistance
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- main
|
||||
- master
|
||||
pull_request:
|
||||
types: [opened, synchronize, ready_for_review]
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
code-quality-feedback:
|
||||
name: Continuous Quality Feedback
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
github.event_name == 'push' ||
|
||||
(github.event_name == 'pull_request' && !github.event.pull_request.draft)
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Generate Prisma Client
|
||||
run: npm run db:generate
|
||||
env:
|
||||
DATABASE_URL: file:./dev.db
|
||||
|
||||
- name: Analyze code quality
|
||||
id: quality
|
||||
run: |
|
||||
# Run lint and capture output
|
||||
npm run lint > lint-output.txt 2>&1 || echo "LINT_FAILED=true" >> $GITHUB_OUTPUT
|
||||
|
||||
# Count TypeScript files and their sizes
|
||||
TOTAL_TS_FILES=$(find src -name "*.ts" -o -name "*.tsx" | wc -l)
|
||||
LARGE_FILES=$(find src -name "*.ts" -o -name "*.tsx" -exec wc -l {} \; | awk '$1 > 150 {print $2}' | wc -l)
|
||||
|
||||
echo "total_ts_files=$TOTAL_TS_FILES" >> $GITHUB_OUTPUT
|
||||
echo "large_files=$LARGE_FILES" >> $GITHUB_OUTPUT
|
||||
|
||||
# Check for declarative vs imperative balance
|
||||
JSON_FILES=$(find src packages -name "*.json" 2>/dev/null | wc -l)
|
||||
LUA_SCRIPTS=$(find src packages -name "*.lua" 2>/dev/null | wc -l)
|
||||
|
||||
echo "json_files=$JSON_FILES" >> $GITHUB_OUTPUT
|
||||
echo "lua_scripts=$LUA_SCRIPTS" >> $GITHUB_OUTPUT
|
||||
|
||||
cat lint-output.txt
|
||||
|
||||
- name: Check architectural compliance
|
||||
id: architecture
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
let issues = [];
|
||||
let suggestions = [];
|
||||
|
||||
// Get changed files
|
||||
let changedFiles = [];
|
||||
if (context.eventName === 'pull_request') {
|
||||
const { data: files } = await github.rest.pulls.listFiles({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.issue.number,
|
||||
});
|
||||
changedFiles = files.map(f => f.filename);
|
||||
}
|
||||
|
||||
// Check for hardcoded components outside ui/
|
||||
const hardcodedComponents = changedFiles.filter(f =>
|
||||
f.endsWith('.tsx') &&
|
||||
f.includes('src/components/') &&
|
||||
!f.includes('src/components/ui/') &&
|
||||
!f.includes('src/components/shared/') &&
|
||||
!['RenderComponent', 'FieldRenderer', 'GenericPage'].some(g => f.includes(g))
|
||||
);
|
||||
|
||||
if (hardcodedComponents.length > 0) {
|
||||
suggestions.push(`Consider if these components could be declarative: ${hardcodedComponents.join(', ')}`);
|
||||
}
|
||||
|
||||
// Check for database changes without seed data
|
||||
const schemaChanged = changedFiles.some(f => f.includes('schema.prisma'));
|
||||
const seedChanged = changedFiles.some(f => f.includes('seed'));
|
||||
|
||||
if (schemaChanged && !seedChanged) {
|
||||
suggestions.push('Database schema changed but no seed data updates detected. Consider updating seed data.');
|
||||
}
|
||||
|
||||
// Check for new routes without PageRoutes table updates
|
||||
const routeFiles = changedFiles.filter(f => f.includes('Route') || f.includes('route'));
|
||||
if (routeFiles.length > 0) {
|
||||
suggestions.push('Route changes detected. Ensure PageRoutes table is updated for dynamic routing.');
|
||||
}
|
||||
|
||||
// Check for large TypeScript files
|
||||
const largeFiles = parseInt('${{ steps.quality.outputs.large_files }}');
|
||||
if (largeFiles > 0) {
|
||||
issues.push(`${largeFiles} TypeScript files exceed 150 lines. Consider breaking them into smaller components.`);
|
||||
}
|
||||
|
||||
return { issues, suggestions };
|
||||
|
||||
- name: Provide development feedback
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const analysis = JSON.parse('${{ steps.architecture.outputs.result }}');
|
||||
const totalFiles = parseInt('${{ steps.quality.outputs.total_ts_files }}');
|
||||
const largeFiles = parseInt('${{ steps.quality.outputs.large_files }}');
|
||||
const jsonFiles = parseInt('${{ steps.quality.outputs.json_files }}');
|
||||
const luaScripts = parseInt('${{ steps.quality.outputs.lua_scripts }}');
|
||||
|
||||
let comment = `## 💻 Development Quality Feedback\n\n`;
|
||||
|
||||
comment += `### 📊 Code Metrics\n\n`;
|
||||
comment += `- TypeScript files: ${totalFiles}\n`;
|
||||
comment += `- Files >150 LOC: ${largeFiles} ${largeFiles > 0 ? '⚠️' : '✅'}\n`;
|
||||
comment += `- JSON config files: ${jsonFiles}\n`;
|
||||
comment += `- Lua scripts: ${luaScripts}\n`;
|
||||
comment += `- Declarative ratio: ${((jsonFiles + luaScripts) / Math.max(totalFiles, 1) * 100).toFixed(1)}%\n\n`;
|
||||
|
||||
if (analysis.issues.length > 0) {
|
||||
comment += `### ⚠️ Architectural Issues\n\n`;
|
||||
analysis.issues.forEach(issue => comment += `- ${issue}\n`);
|
||||
comment += '\n';
|
||||
}
|
||||
|
||||
if (analysis.suggestions.length > 0) {
|
||||
comment += `### 💡 Suggestions\n\n`;
|
||||
analysis.suggestions.forEach(suggestion => comment += `- ${suggestion}\n`);
|
||||
comment += '\n';
|
||||
}
|
||||
|
||||
comment += `### 🎯 Project Goals Reminder\n\n`;
|
||||
comment += `- **Declarative First:** Prefer JSON + Lua over TypeScript\n`;
|
||||
comment += `- **Component Size:** Keep files under 150 LOC\n`;
|
||||
comment += `- **Generic Renderers:** Use RenderComponent for dynamic components\n`;
|
||||
comment += `- **Database-Driven:** Store configuration in database, not code\n`;
|
||||
comment += `- **Package-Based:** Organize features as importable packages\n\n`;
|
||||
|
||||
comment += `**@copilot** can help refactor code to better align with these principles.\n\n`;
|
||||
comment += `📖 See [Architecture Guidelines](/.github/copilot-instructions.md)`;
|
||||
|
||||
// Check if we already commented
|
||||
const { data: comments } = await github.rest.issues.listComments({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.issue.number,
|
||||
});
|
||||
|
||||
const botComment = comments.find(c =>
|
||||
c.user.type === 'Bot' && c.body.includes('Development Quality Feedback')
|
||||
);
|
||||
|
||||
if (botComment) {
|
||||
await github.rest.issues.updateComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
comment_id: botComment.id,
|
||||
body: comment
|
||||
});
|
||||
} else {
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.issue.number,
|
||||
body: comment
|
||||
});
|
||||
}
|
||||
|
||||
copilot-interaction:
|
||||
name: Handle Copilot Mentions
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
github.event_name == 'issue_comment' &&
|
||||
contains(github.event.comment.body, '@copilot')
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Parse Copilot request
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const comment = context.payload.comment.body.toLowerCase();
|
||||
const issue = context.payload.issue;
|
||||
|
||||
let response = `## 🤖 Copilot Assistance\n\n`;
|
||||
|
||||
// Determine what the user is asking for
|
||||
if (comment.includes('implement') || comment.includes('fix this')) {
|
||||
response += `To implement this with Copilot assistance:\n\n`;
|
||||
response += `1. **Create a branch:** \`git checkout -b feature/issue-${issue.number}\`\n`;
|
||||
response += `2. **Use Copilot in your IDE** to generate code with context from:\n`;
|
||||
response += ` - [Copilot Instructions](/.github/copilot-instructions.md)\n`;
|
||||
response += ` - [PRD.md](/PRD.md)\n`;
|
||||
response += ` - Existing package structure in \`/packages/\`\n`;
|
||||
response += `3. **Follow the architectural principles:**\n`;
|
||||
response += ` - Declarative over imperative\n`;
|
||||
response += ` - Database-driven configuration\n`;
|
||||
response += ` - Generic renderers vs hardcoded components\n`;
|
||||
response += `4. **Test your changes:** \`npm run lint && npm run test:e2e\`\n`;
|
||||
response += `5. **Create a PR** - The automated workflows will review it\n\n`;
|
||||
}
|
||||
|
||||
if (comment.includes('review') || comment.includes('check')) {
|
||||
response += `Copilot can review this through:\n\n`;
|
||||
response += `- **Automated Code Review** workflow (runs on PRs)\n`;
|
||||
response += `- **Development Assistance** workflow (runs on pushes)\n`;
|
||||
response += `- **Planning & Design** workflow (runs on feature requests)\n\n`;
|
||||
response += `Create a PR to trigger comprehensive review!\n\n`;
|
||||
}
|
||||
|
||||
if (comment.includes('architecture') || comment.includes('design')) {
|
||||
response += `### 🏗️ Architectural Guidance\n\n`;
|
||||
response += `MetaBuilder follows these principles:\n\n`;
|
||||
response += `1. **5-Level Architecture:** User → Admin → God → SuperGod levels\n`;
|
||||
response += `2. **Multi-Tenant:** Isolated tenant instances with independent configs\n`;
|
||||
response += `3. **Declarative Components:** JSON config + Lua scripts, not TSX\n`;
|
||||
response += `4. **Package System:** Self-contained, importable feature bundles\n`;
|
||||
response += `5. **Database-First:** All config in Prisma, not hardcoded\n\n`;
|
||||
response += `📖 Full details: [PRD.md](/PRD.md)\n\n`;
|
||||
}
|
||||
|
||||
if (comment.includes('test') || comment.includes('e2e')) {
|
||||
response += `### 🧪 Testing with Copilot\n\n`;
|
||||
response += `\`\`\`bash\n`;
|
||||
response += `# Run E2E tests\n`;
|
||||
response += `npm run test:e2e\n\n`;
|
||||
response += `# Run with UI\n`;
|
||||
response += `npm run test:e2e:ui\n\n`;
|
||||
response += `# Run linter\n`;
|
||||
response += `npm run lint\n`;
|
||||
response += `\`\`\`\n\n`;
|
||||
response += `Use Copilot in your IDE to:\n`;
|
||||
response += `- Generate test cases based on user stories\n`;
|
||||
response += `- Write Playwright selectors and assertions\n`;
|
||||
response += `- Create mock data for tests\n\n`;
|
||||
}
|
||||
|
||||
if (comment.includes('help') || (!comment.includes('implement') && !comment.includes('review') && !comment.includes('architecture') && !comment.includes('test'))) {
|
||||
response += `### 🆘 How to Use Copilot\n\n`;
|
||||
response += `Mention **@copilot** in comments with:\n\n`;
|
||||
response += `- \`@copilot implement this\` - Get implementation guidance\n`;
|
||||
response += `- \`@copilot review this\` - Request code review\n`;
|
||||
response += `- \`@copilot architecture\` - Get architectural guidance\n`;
|
||||
response += `- \`@copilot test this\` - Get testing guidance\n`;
|
||||
response += `- \`@copilot fix this issue\` - Request automated fix\n\n`;
|
||||
response += `**In your IDE:**\n`;
|
||||
response += `- Use GitHub Copilot with context from [Copilot Instructions](/.github/copilot-instructions.md)\n`;
|
||||
response += `- Reference the [PRD](/PRD.md) when prompting\n`;
|
||||
response += `- Follow patterns from existing packages in \`/packages/\`\n\n`;
|
||||
}
|
||||
|
||||
response += `---\n`;
|
||||
response += `*This is an automated response. For detailed Copilot assistance, use the extension in your IDE with project context.*`;
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: issue.number,
|
||||
body: response
|
||||
});
|
||||
|
||||
suggest-refactoring:
|
||||
name: Suggest Refactoring Opportunities
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'pull_request' && !github.event.pull_request.draft
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Analyze refactoring opportunities
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const { data: files } = await github.rest.pulls.listFiles({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.issue.number,
|
||||
});
|
||||
|
||||
let opportunities = [];
|
||||
|
||||
// Look for opportunities in changed files
|
||||
for (const file of files) {
|
||||
const patch = file.patch || '';
|
||||
|
||||
// Check for repeated code patterns
|
||||
if (patch.split('\n').length > 100) {
|
||||
opportunities.push({
|
||||
file: file.filename,
|
||||
type: 'Size',
|
||||
suggestion: 'Large changeset - consider breaking into smaller PRs or extracting common utilities'
|
||||
});
|
||||
}
|
||||
|
||||
// Check for hardcoded values
|
||||
if (patch.match(/['"][A-Z_]{3,}['"]\s*:/)) {
|
||||
opportunities.push({
|
||||
file: file.filename,
|
||||
type: 'Configuration',
|
||||
suggestion: 'Hardcoded constants detected - consider moving to database configuration'
|
||||
});
|
||||
}
|
||||
|
||||
// Check for new TSX components
|
||||
if (file.filename.includes('components/') && file.filename.endsWith('.tsx') && file.status === 'added') {
|
||||
opportunities.push({
|
||||
file: file.filename,
|
||||
type: 'Architecture',
|
||||
suggestion: 'New component added - could this be implemented declaratively with JSON + Lua?'
|
||||
});
|
||||
}
|
||||
|
||||
// Check for inline styles or complex class strings
|
||||
if (patch.includes('style={{') || patch.match(/className="[^"]{50,}"/)) {
|
||||
opportunities.push({
|
||||
file: file.filename,
|
||||
type: 'Styling',
|
||||
suggestion: 'Complex styling detected - consider extracting to theme configuration'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (opportunities.length > 0) {
|
||||
let comment = `## 🔄 Refactoring Opportunities\n\n`;
|
||||
comment += `**@copilot** identified potential improvements:\n\n`;
|
||||
|
||||
const grouped = {};
|
||||
opportunities.forEach(opp => {
|
||||
if (!grouped[opp.type]) grouped[opp.type] = [];
|
||||
grouped[opp.type].push(opp);
|
||||
});
|
||||
|
||||
for (const [type, opps] of Object.entries(grouped)) {
|
||||
comment += `### ${type}\n\n`;
|
||||
opps.forEach(opp => {
|
||||
comment += `- **${opp.file}**: ${opp.suggestion}\n`;
|
||||
});
|
||||
comment += '\n';
|
||||
}
|
||||
|
||||
comment += `---\n`;
|
||||
comment += `These are suggestions, not requirements. Consider them as part of continuous improvement.\n\n`;
|
||||
comment += `Use **@copilot** in your IDE to help implement these refactorings.`;
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.issue.number,
|
||||
body: comment
|
||||
});
|
||||
}
|
||||
218
.github/workflows/planning.yml
vendored
Normal file
218
.github/workflows/planning.yml
vendored
Normal file
@@ -0,0 +1,218 @@
|
||||
name: Planning & Design
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, labeled]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
architecture-review:
|
||||
name: Architecture & Design Review
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
github.event.action == 'labeled' &&
|
||||
(github.event.label.name == 'enhancement' || github.event.label.name == 'feature-request')
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Review against architecture principles
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const issue = context.payload.issue;
|
||||
const title = issue.title;
|
||||
const body = issue.body || '';
|
||||
|
||||
let suggestions = [];
|
||||
let questions = [];
|
||||
|
||||
// Check if feature aligns with declarative approach
|
||||
if (body.toLowerCase().includes('component') && !body.toLowerCase().includes('json')) {
|
||||
suggestions.push('💡 Consider implementing this as a **declarative component** using JSON configuration and Lua scripts instead of a TypeScript file.');
|
||||
}
|
||||
|
||||
// Check if database schema is mentioned
|
||||
if (!body.toLowerCase().includes('database') && !body.toLowerCase().includes('schema')) {
|
||||
questions.push('🤔 Will this feature require database schema changes? Consider adding Prisma schema details.');
|
||||
}
|
||||
|
||||
// Check if package structure is considered
|
||||
if (body.toLowerCase().includes('new') && !body.toLowerCase().includes('package')) {
|
||||
suggestions.push('📦 This might be a good candidate for a **package-based implementation** with isolated seed data.');
|
||||
}
|
||||
|
||||
// Check for multi-tenant considerations
|
||||
if (!body.toLowerCase().includes('tenant') && !body.toLowerCase().includes('supergod')) {
|
||||
questions.push('🏢 How should this feature work across different **tenants**? Should it be tenant-specific or global?');
|
||||
}
|
||||
|
||||
// Check for permission levels
|
||||
if (!body.toLowerCase().match(/level [1-5]|user|admin|god|supergod/)) {
|
||||
questions.push('🔐 Which **permission levels** should have access to this feature? (user/admin/god/supergod)');
|
||||
}
|
||||
|
||||
// Check for Lua consideration
|
||||
if (body.toLowerCase().includes('logic') && !body.toLowerCase().includes('lua')) {
|
||||
suggestions.push('🌙 Consider implementing business logic in **Lua scripts** for better flexibility and sandboxing.');
|
||||
}
|
||||
|
||||
let comment = `## 🏗️ Architecture Review\n\n`;
|
||||
comment += `Thank you for proposing this enhancement! Here's an architectural review:\n\n`;
|
||||
|
||||
if (suggestions.length > 0) {
|
||||
comment += `### 💡 Architectural Suggestions\n\n`;
|
||||
suggestions.forEach(s => comment += `${s}\n\n`);
|
||||
}
|
||||
|
||||
if (questions.length > 0) {
|
||||
comment += `### 🤔 Questions to Consider\n\n`;
|
||||
questions.forEach(q => comment += `${q}\n\n`);
|
||||
}
|
||||
|
||||
comment += `### ✅ Design Checklist\n\n`;
|
||||
comment += `- [ ] Database schema changes identified\n`;
|
||||
comment += `- [ ] Package structure planned (if applicable)\n`;
|
||||
comment += `- [ ] Multi-tenant implications considered\n`;
|
||||
comment += `- [ ] Permission levels defined\n`;
|
||||
comment += `- [ ] Declarative approach preferred over imperative\n`;
|
||||
comment += `- [ ] Component size kept under 150 LOC\n`;
|
||||
comment += `- [ ] Security implications reviewed\n`;
|
||||
comment += `- [ ] Testing strategy outlined\n\n`;
|
||||
|
||||
comment += `---\n`;
|
||||
comment += `**@copilot** can help implement this feature following these architectural principles.\n\n`;
|
||||
comment += `📖 See [Copilot Instructions](/.github/copilot-instructions.md) for development guidelines.`;
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: issue.number,
|
||||
body: comment
|
||||
});
|
||||
|
||||
prd-check:
|
||||
name: Check PRD Alignment
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.action == 'labeled' && github.event.label.name == 'enhancement'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Check PRD for similar features
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
const issue = context.payload.issue;
|
||||
|
||||
try {
|
||||
const prd = fs.readFileSync('PRD.md', 'utf8');
|
||||
|
||||
// Extract key terms from issue
|
||||
const issueText = (issue.title + ' ' + issue.body).toLowerCase();
|
||||
const keywords = ['level', 'god', 'tenant', 'package', 'component', 'workflow', 'lua', 'declarative'];
|
||||
|
||||
const foundKeywords = keywords.filter(k => issueText.includes(k));
|
||||
|
||||
let comment = `## 📋 PRD Alignment Check\n\n`;
|
||||
|
||||
if (foundKeywords.length > 0) {
|
||||
comment += `This feature relates to the following PRD concepts: **${foundKeywords.join(', ')}**\n\n`;
|
||||
comment += `Please review [PRD.md](/PRD.md) to ensure alignment with the project mission and existing features.\n\n`;
|
||||
}
|
||||
|
||||
comment += `### 🎯 Mission Statement\n\n`;
|
||||
comment += `MetaBuilder aims to be a "fully declarative, procedurally-generated multi-tenant application platform where 95% of functionality is defined through JSON and Lua."\n\n`;
|
||||
comment += `Does this feature support that mission? If so, how?\n\n`;
|
||||
|
||||
comment += `---\n`;
|
||||
comment += `**@copilot** Review the PRD and suggest implementation approach.`;
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: issue.number,
|
||||
body: comment
|
||||
});
|
||||
} catch (e) {
|
||||
console.log('Could not read PRD.md:', e.message);
|
||||
}
|
||||
|
||||
suggest-implementation:
|
||||
name: Suggest Implementation Approach
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
github.event.action == 'labeled' &&
|
||||
github.event.label.name == 'ready-to-implement'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Generate implementation suggestion
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const issue = context.payload.issue;
|
||||
|
||||
let comment = `## 🛠️ Implementation Guidance\n\n`;
|
||||
comment += `This issue is ready for implementation! Here's a suggested approach:\n\n`;
|
||||
|
||||
comment += `### 📝 Step-by-Step Plan\n\n`;
|
||||
comment += `1. **Planning Phase**\n`;
|
||||
comment += ` - [ ] Review PRD.md and update if needed\n`;
|
||||
comment += ` - [ ] Check existing package structure\n`;
|
||||
comment += ` - [ ] Design database schema changes (if any)\n`;
|
||||
comment += ` - [ ] Sketch component hierarchy\n\n`;
|
||||
|
||||
comment += `2. **Database Phase**\n`;
|
||||
comment += ` - [ ] Update \`prisma/schema.prisma\`\n`;
|
||||
comment += ` - [ ] Run \`npm run db:generate\`\n`;
|
||||
comment += ` - [ ] Create or update seed data\n`;
|
||||
comment += ` - [ ] Test database operations\n\n`;
|
||||
|
||||
comment += `3. **Implementation Phase**\n`;
|
||||
comment += ` - [ ] Create package structure (if new package)\n`;
|
||||
comment += ` - [ ] Build generic renderers (prefer over specific components)\n`;
|
||||
comment += ` - [ ] Add Lua scripts for business logic\n`;
|
||||
comment += ` - [ ] Wire up UI components\n`;
|
||||
comment += ` - [ ] Ensure components are <150 LOC\n\n`;
|
||||
|
||||
comment += `4. **Testing Phase**\n`;
|
||||
comment += ` - [ ] Run \`npm run lint\` and fix issues\n`;
|
||||
comment += ` - [ ] Add E2E tests in \`e2e/\` directory\n`;
|
||||
comment += ` - [ ] Test at all permission levels\n`;
|
||||
comment += ` - [ ] Verify multi-tenant isolation\n`;
|
||||
comment += ` - [ ] Test package import/export\n\n`;
|
||||
|
||||
comment += `5. **Documentation Phase**\n`;
|
||||
comment += ` - [ ] Update PRD.md with feature details\n`;
|
||||
comment += ` - [ ] Document Lua APIs if new\n`;
|
||||
comment += ` - [ ] Add usage examples\n`;
|
||||
comment += ` - [ ] Update workflow docs if needed\n\n`;
|
||||
|
||||
comment += `### 🤖 Copilot Assistance\n\n`;
|
||||
comment += `**@copilot** can help with:\n`;
|
||||
comment += `- Generating Prisma schema definitions\n`;
|
||||
comment += `- Creating seed data JSON structures\n`;
|
||||
comment += `- Writing Lua script templates\n`;
|
||||
comment += `- Building generic component renderers\n`;
|
||||
comment += `- Writing E2E tests\n\n`;
|
||||
|
||||
comment += `### 🔗 Useful Resources\n\n`;
|
||||
comment += `- [Copilot Instructions](/.github/copilot-instructions.md)\n`;
|
||||
comment += `- [PRD](/.github/../PRD.md)\n`;
|
||||
comment += `- [Workflow Testing](/.github/workflows/README.md)\n`;
|
||||
comment += `- [Package Structure](/packages/)\n\n`;
|
||||
|
||||
comment += `Ready to start? Create a branch: \`feature/issue-${issue.number}\``;
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: issue.number,
|
||||
body: comment
|
||||
});
|
||||
Reference in New Issue
Block a user