feat: add GitHub Actions CI/CD pipeline and PR templates
- Add comprehensive CI/CD workflow for Flutter and .NET Core - Include security scanning with Trivy - Add automated testing for both frontend and backend - Setup staging and production deployment pipelines - Create detailed PR template with checklists - Add bug report and feature request issue templates 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
c120d5125d
commit
9e92afb24b
|
|
@ -0,0 +1,58 @@
|
||||||
|
---
|
||||||
|
name: 🐛 Bug Report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: '[BUG] '
|
||||||
|
labels: ['bug', 'needs-triage']
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 Bug Description
|
||||||
|
<!-- A clear and concise description of what the bug is -->
|
||||||
|
|
||||||
|
## 🔄 Steps to Reproduce
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
## ✅ Expected Behavior
|
||||||
|
<!-- A clear and concise description of what you expected to happen -->
|
||||||
|
|
||||||
|
## ❌ Actual Behavior
|
||||||
|
<!-- A clear and concise description of what actually happened -->
|
||||||
|
|
||||||
|
## 📱 Environment
|
||||||
|
### Mobile App (Flutter)
|
||||||
|
- **Platform**: iOS / Android
|
||||||
|
- **Device**: [e.g. iPhone 12, Samsung Galaxy S21]
|
||||||
|
- **OS Version**: [e.g. iOS 15.0, Android 12]
|
||||||
|
- **App Version**: [e.g. 1.2.0]
|
||||||
|
|
||||||
|
### Backend (.NET Core)
|
||||||
|
- **Environment**: Development / Staging / Production
|
||||||
|
- **Server OS**: [if known]
|
||||||
|
- **Database**: [PostgreSQL version]
|
||||||
|
|
||||||
|
## 📸 Screenshots
|
||||||
|
<!-- If applicable, add screenshots to help explain your problem -->
|
||||||
|
|
||||||
|
## 📋 Additional Context
|
||||||
|
<!-- Add any other context about the problem here -->
|
||||||
|
|
||||||
|
## 🔍 Error Logs
|
||||||
|
<!-- If available, add any relevant error logs or stack traces -->
|
||||||
|
|
||||||
|
```
|
||||||
|
Paste error logs here
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 Priority
|
||||||
|
<!-- Mark the priority level -->
|
||||||
|
- [ ] 🔴 Critical (System down, data loss)
|
||||||
|
- [ ] 🟠 High (Major feature broken)
|
||||||
|
- [ ] 🟡 Medium (Minor feature issue)
|
||||||
|
- [ ] 🟢 Low (Cosmetic issue)
|
||||||
|
|
||||||
|
## 🏷️ Labels
|
||||||
|
<!-- The following labels will be automatically applied -->
|
||||||
|
<!-- bug, needs-triage -->
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
---
|
||||||
|
name: ✨ Feature Request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: '[FEATURE] '
|
||||||
|
labels: ['enhancement', 'needs-triage']
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Feature Description
|
||||||
|
<!-- A clear and concise description of the feature you want to see -->
|
||||||
|
|
||||||
|
## 🎯 Problem Statement
|
||||||
|
<!-- What problem does this feature solve? -->
|
||||||
|
**Is your feature request related to a problem?**
|
||||||
|
A clear description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
## 🛠 Proposed Solution
|
||||||
|
<!-- Describe the solution you'd like to see -->
|
||||||
|
|
||||||
|
## 🔄 User Stories
|
||||||
|
<!-- Describe how users would interact with this feature -->
|
||||||
|
- As a [user type], I want [goal] so that [benefit]
|
||||||
|
- As a [user type], I want [goal] so that [benefit]
|
||||||
|
|
||||||
|
## 📱 Platform
|
||||||
|
<!-- Which parts of the system would be affected? -->
|
||||||
|
- [ ] 📱 Mobile App (Flutter)
|
||||||
|
- [ ] 🔧 Backend API (.NET Core)
|
||||||
|
- [ ] 🗄️ Database Schema
|
||||||
|
- [ ] 🎮 Gamification System
|
||||||
|
- [ ] 🤖 AI Analysis Engine
|
||||||
|
- [ ] 📊 Analytics/Reporting
|
||||||
|
- [ ] 🔐 Authentication/Security
|
||||||
|
|
||||||
|
## 🎨 UI/UX Considerations
|
||||||
|
<!-- If this affects the UI, describe the expected user experience -->
|
||||||
|
|
||||||
|
## 🔧 Technical Considerations
|
||||||
|
<!-- Any technical implementation details or constraints -->
|
||||||
|
|
||||||
|
## 📈 Success Metrics
|
||||||
|
<!-- How would we measure the success of this feature? -->
|
||||||
|
|
||||||
|
## 🚧 Alternative Solutions
|
||||||
|
<!-- Describe alternatives you've considered -->
|
||||||
|
|
||||||
|
## 📋 Additional Context
|
||||||
|
<!-- Add any other context, mockups, or examples -->
|
||||||
|
|
||||||
|
## 🎯 Priority
|
||||||
|
<!-- Mark the priority level -->
|
||||||
|
- [ ] 🔴 Critical (Essential for launch)
|
||||||
|
- [ ] 🟠 High (Important for user experience)
|
||||||
|
- [ ] 🟡 Medium (Nice to have)
|
||||||
|
- [ ] 🟢 Low (Future consideration)
|
||||||
|
|
||||||
|
## 📅 Timeline
|
||||||
|
<!-- When would you like to see this feature? -->
|
||||||
|
- [ ] Next release
|
||||||
|
- [ ] Within 3 months
|
||||||
|
- [ ] Within 6 months
|
||||||
|
- [ ] Future roadmap
|
||||||
|
|
||||||
|
## 🏷️ Labels
|
||||||
|
<!-- The following labels will be automatically applied -->
|
||||||
|
<!-- enhancement, needs-triage -->
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
# Pull Request
|
||||||
|
|
||||||
|
## 📋 Summary
|
||||||
|
<!-- Provide a brief description of the changes in this PR -->
|
||||||
|
|
||||||
|
## 🎯 Type of Change
|
||||||
|
<!-- Mark the relevant option with an 'x' -->
|
||||||
|
- [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
|
||||||
|
- [ ] ✨ New feature (non-breaking change which adds functionality)
|
||||||
|
- [ ] 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||||
|
- [ ] 📚 Documentation update
|
||||||
|
- [ ] 🏗️ Infrastructure/build changes
|
||||||
|
- [ ] 🧹 Code cleanup/refactoring
|
||||||
|
- [ ] 🧪 Tests only
|
||||||
|
|
||||||
|
## 🔗 Related Issues
|
||||||
|
<!-- Link any related issues using "Fixes #123" or "Related to #123" -->
|
||||||
|
|
||||||
|
## 🛠 Changes Made
|
||||||
|
<!-- Describe the changes made in detail -->
|
||||||
|
|
||||||
|
### Frontend (Flutter)
|
||||||
|
- [ ] UI components updated
|
||||||
|
- [ ] State management changes
|
||||||
|
- [ ] Navigation changes
|
||||||
|
- [ ] New screens/widgets added
|
||||||
|
|
||||||
|
### Backend (.NET Core)
|
||||||
|
- [ ] API endpoints added/modified
|
||||||
|
- [ ] Database schema changes
|
||||||
|
- [ ] Business logic updates
|
||||||
|
- [ ] Authentication/authorization changes
|
||||||
|
|
||||||
|
## 🧪 Testing
|
||||||
|
<!-- Describe the testing done for this change -->
|
||||||
|
|
||||||
|
### Flutter Testing
|
||||||
|
- [ ] Unit tests added/updated
|
||||||
|
- [ ] Widget tests added/updated
|
||||||
|
- [ ] Integration tests added/updated
|
||||||
|
- [ ] Manual testing completed on iOS
|
||||||
|
- [ ] Manual testing completed on Android
|
||||||
|
|
||||||
|
### .NET Testing
|
||||||
|
- [ ] Unit tests added/updated
|
||||||
|
- [ ] Integration tests added/updated
|
||||||
|
- [ ] API testing completed
|
||||||
|
- [ ] Database migration tested
|
||||||
|
|
||||||
|
## 📱 Screenshots/Videos
|
||||||
|
<!-- Add screenshots or videos if applicable -->
|
||||||
|
|
||||||
|
## 📝 Additional Notes
|
||||||
|
<!-- Any additional context, warnings, or notes for reviewers -->
|
||||||
|
|
||||||
|
## ✅ Checklist
|
||||||
|
<!-- Mark completed items with an 'x' -->
|
||||||
|
|
||||||
|
### Code Quality
|
||||||
|
- [ ] Code follows the established coding standards
|
||||||
|
- [ ] Self-review of the code completed
|
||||||
|
- [ ] Code is properly commented (especially complex logic)
|
||||||
|
- [ ] No debugging code or console logs left in
|
||||||
|
- [ ] Error handling is appropriate
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
- [ ] Documentation updated (if needed)
|
||||||
|
- [ ] API documentation updated (if applicable)
|
||||||
|
- [ ] README updated (if needed)
|
||||||
|
|
||||||
|
### Security & Performance
|
||||||
|
- [ ] No sensitive data exposed in code
|
||||||
|
- [ ] Performance impact considered
|
||||||
|
- [ ] Security implications reviewed
|
||||||
|
- [ ] Accessibility guidelines followed (for UI changes)
|
||||||
|
|
||||||
|
### Testing & Deployment
|
||||||
|
- [ ] All tests pass locally
|
||||||
|
- [ ] CI/CD pipeline passes
|
||||||
|
- [ ] Database migrations work (if applicable)
|
||||||
|
- [ ] Feature works in staging environment
|
||||||
|
|
||||||
|
## 👥 Reviewers
|
||||||
|
<!-- Tag specific people if needed -->
|
||||||
|
@team-leads @senior-developers
|
||||||
|
|
||||||
|
---
|
||||||
|
**Note**: Please ensure all checkboxes are marked before requesting review.
|
||||||
|
|
@ -0,0 +1,137 @@
|
||||||
|
name: CI/CD Pipeline
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main, develop ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main, develop ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# Flutter Mobile App CI
|
||||||
|
flutter-test:
|
||||||
|
name: Flutter Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: ./mobile
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Flutter
|
||||||
|
uses: subosito/flutter-action@v2
|
||||||
|
with:
|
||||||
|
flutter-version: '3.16.0'
|
||||||
|
channel: 'stable'
|
||||||
|
|
||||||
|
- name: Get dependencies
|
||||||
|
run: flutter pub get
|
||||||
|
|
||||||
|
- name: Analyze code
|
||||||
|
run: flutter analyze
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: flutter test
|
||||||
|
|
||||||
|
- name: Generate coverage
|
||||||
|
run: flutter test --coverage
|
||||||
|
|
||||||
|
- name: Upload coverage to Codecov
|
||||||
|
uses: codecov/codecov-action@v3
|
||||||
|
with:
|
||||||
|
file: ./mobile/coverage/lcov.info
|
||||||
|
|
||||||
|
# .NET Backend API CI
|
||||||
|
dotnet-test:
|
||||||
|
name: .NET Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: ./backend
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup .NET
|
||||||
|
uses: actions/setup-dotnet@v3
|
||||||
|
with:
|
||||||
|
dotnet-version: '8.0.x'
|
||||||
|
|
||||||
|
- name: Restore dependencies
|
||||||
|
run: dotnet restore
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: dotnet build --no-restore --configuration Release
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage"
|
||||||
|
|
||||||
|
- name: Upload coverage to Codecov
|
||||||
|
uses: codecov/codecov-action@v3
|
||||||
|
with:
|
||||||
|
file: ./backend/TestResults/*/coverage.cobertura.xml
|
||||||
|
|
||||||
|
# Security and Quality Checks
|
||||||
|
security-scan:
|
||||||
|
name: Security Scan
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Run Trivy vulnerability scanner
|
||||||
|
uses: aquasecurity/trivy-action@master
|
||||||
|
with:
|
||||||
|
scan-type: 'fs'
|
||||||
|
scan-ref: '.'
|
||||||
|
format: 'sarif'
|
||||||
|
output: 'trivy-results.sarif'
|
||||||
|
|
||||||
|
- name: Upload Trivy scan results to GitHub Security tab
|
||||||
|
uses: github/codeql-action/upload-sarif@v2
|
||||||
|
with:
|
||||||
|
sarif_file: 'trivy-results.sarif'
|
||||||
|
|
||||||
|
# Build and Deploy to Staging (develop branch only)
|
||||||
|
deploy-staging:
|
||||||
|
name: Deploy to Staging
|
||||||
|
needs: [flutter-test, dotnet-test]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref == 'refs/heads/develop' && github.event_name == 'push'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Configure AWS credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v2
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
aws-region: us-west-2
|
||||||
|
|
||||||
|
- name: Deploy to staging
|
||||||
|
run: |
|
||||||
|
echo "Deploying to staging environment"
|
||||||
|
# Add actual deployment commands here
|
||||||
|
|
||||||
|
# Build and Deploy to Production (main branch only)
|
||||||
|
deploy-production:
|
||||||
|
name: Deploy to Production
|
||||||
|
needs: [flutter-test, dotnet-test, security-scan]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
||||||
|
environment: production
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Configure AWS credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v2
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
aws-region: us-west-2
|
||||||
|
|
||||||
|
- name: Deploy to production
|
||||||
|
run: |
|
||||||
|
echo "Deploying to production environment"
|
||||||
|
# Add actual deployment commands here
|
||||||
Loading…
Reference in New Issue