united-tattoo/docs/CI-CD-PIPELINE.md

445 lines
11 KiB
Markdown

# CI/CD Pipeline Documentation
## Overview
This document describes the comprehensive CI/CD pipeline for the United Tattoo website, built with Next.js and deployed to Cloudflare Workers via Gitea Actions.
---
## 🚀 Pipeline Architecture
### Workflow Files
1. **`enhanced-ci.yaml`** - Main CI/CD pipeline with quality gates
2. **`deploy.yaml`** - Deployment pipeline with manual triggers
3. **`security.yaml`** - Security scanning and dependency checks
4. **`performance.yaml`** - Performance monitoring and Lighthouse audits
### Pipeline Stages
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Quality Gates │ │ Build & Test │ │ Deploy │
│ │ │ │ │ │
│ • Lint & Format │───▶│ • Build App │───▶│ • Preview │
│ • Security Scan │ │ • Unit Tests │ │ • Production │
│ • Type Check │ │ • Coverage │ │ • Health Check │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Post-Deploy │ │ Performance │ │ Monitoring │
│ │ │ │ │ │
│ • Lighthouse │ │ • Bundle Size │ │ • Core Web Vitals│
│ • SEO Check │ │ • Budget Check │ │ • Security Headers│
│ • Health Check │ │ • Performance │ │ • Uptime Monitor │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
---
## 📋 Workflow Details
### 1. Enhanced CI Pipeline (`enhanced-ci.yaml`)
**Triggers:**
- Push to `main`, `master`, or `ci-run-*` branches
- Pull requests to `main`/`master`
- Manual workflow dispatch
**Jobs:**
#### Quality Gates
- **Code Quality**: ESLint, TypeScript check, format validation
- **Security Scan**: Dependency audit, license check, outdated packages
- **Tests**: Unit tests with coverage reporting
#### Build & Deploy
- **Build**: Next.js build with OpenNext Cloudflare adapter
- **Deploy Preview**: Automatic deployment for PRs
- **Deploy Production**: Deployment to production environment
#### Post-Deployment
- **Lighthouse CI**: Performance audit
- **SEO Check**: Metadata validation
- **Security Headers**: Security configuration check
### 2. Deployment Pipeline (`deploy.yaml`)
**Features:**
- Manual deployment triggers
- Environment selection (preview/production)
- Emergency deployment options
- Rollback capability
- Health checks and verification
**Deployment Flow:**
1. Pre-deployment checks (optional)
2. Build application
3. Database migrations (production only)
4. Deploy to Cloudflare
5. Health check verification
6. Performance validation
7. SEO verification
### 3. Security Pipeline (`security.yaml`)
**Security Checks:**
- **Dependency Scan**: npm audit, license check, outdated packages
- **Code Security**: ESLint security rules, hardcoded secrets check
- **Container Security**: Dockerfile security analysis
- **Security Report**: Comprehensive security status report
**Scheduled Runs:**
- Daily security scans at 3 AM UTC
- Automatic vulnerability detection
- License compliance checking
### 4. Performance Pipeline (`performance.yaml`)
**Performance Monitoring:**
- **Lighthouse Audit**: Performance, accessibility, SEO scores
- **Bundle Analysis**: Bundle size monitoring, budget enforcement
- **Core Web Vitals**: LCP, FID, CLS monitoring
- **SEO Performance**: Meta tags, structured data validation
**Scheduled Runs:**
- Daily performance checks at 4 AM UTC
- Performance regression detection
- SEO compliance monitoring
---
## 🔧 Configuration
### Environment Variables
**Required:**
```bash
CLOUDFLARE_ACCOUNT_ID=5cee6a21cea282a9c89d5297964402e7
CLOUDFLARE_API_TOKEN=your-cloudflare-api-token
```
**Optional:**
```bash
TOTAL_STATIC_MAX_BYTES=3000000
MAX_ASSET_BYTES=1500000
LHCI_GITHUB_APP_TOKEN=your-lighthouse-ci-token
```
### Secrets
Configure these in your Gitea repository settings:
1. **`CLOUDFLARE_API_TOKEN`** - Cloudflare API token with Pages permissions
2. **`LHCI_GITHUB_APP_TOKEN`** - Lighthouse CI token (optional)
### Variables
Set these in your Gitea repository variables:
1. **`CLOUDFLARE_ACCOUNT_ID`** - Your Cloudflare account ID
2. **`TOTAL_STATIC_MAX_BYTES`** - Maximum total static assets size
3. **`MAX_ASSET_BYTES`** - Maximum individual asset size
---
## 📊 Quality Gates
### Code Quality
- ✅ ESLint passes with no errors
- ✅ TypeScript compilation successful
- ✅ Code formatting consistent
- ✅ No security vulnerabilities (critical/high)
### Performance
- ✅ Lighthouse Performance score ≥ 80
- ✅ Lighthouse SEO score ≥ 90
- ✅ Bundle size under budget limits
- ✅ Core Web Vitals within thresholds
### Security
- ✅ No critical dependency vulnerabilities
- ✅ Approved licenses only
- ✅ No hardcoded secrets
- ✅ Security headers present
---
## 🚀 Deployment Process
### Automatic Deployments
**Pull Requests:**
- Automatic preview deployment
- Quality gates must pass
- Performance checks run
- Security scan executed
**Main Branch:**
- Automatic production deployment
- All quality gates enforced
- Database migrations (if needed)
- Health checks performed
### Manual Deployments
**Via Gitea UI:**
1. Go to Actions → Deploy
2. Select environment (preview/production)
3. Choose deployment options
4. Monitor deployment progress
**Via CLI:**
```bash
# Deploy to preview
npm run deploy:preview
# Deploy to production
npm run deploy:production
```
### Emergency Deployments
**Skip Tests:**
- Use `skip_tests: true` option
- Bypasses quality gates
- Use only for critical fixes
**Force Deploy:**
- Use `force_deploy: true` option
- Deploys even if checks fail
- Use with extreme caution
---
## 📈 Monitoring & Reporting
### Performance Monitoring
**Lighthouse Scores:**
- Performance: Target ≥ 80
- Accessibility: Target ≥ 90
- Best Practices: Target ≥ 80
- SEO: Target ≥ 90
**Core Web Vitals:**
- LCP (Largest Contentful Paint): Target < 2.5s
- FID (First Input Delay): Target < 100ms
- CLS (Cumulative Layout Shift): Target < 0.1
**Bundle Size:**
- Total static assets: Target < 3MB
- Individual assets: Target < 1.5MB
### Security Monitoring
**Dependency Security:**
- Critical vulnerabilities: 0 allowed
- High vulnerabilities: Monitor closely
- Moderate vulnerabilities: Review regularly
**License Compliance:**
- Approved licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, Unlicense, CC0-1.0
- All other licenses: Manual review required
### SEO Monitoring
**Required Elements:**
- Open Graph tags present
- Twitter Card tags present
- JSON-LD structured data
- Canonical URLs
- Meta descriptions
**Performance:**
- Page load time < 2s
- Mobile-friendly
- HTTPS enabled
- Security headers present
---
## 🛠️ Local Development
### Pre-commit Hooks
Install pre-commit hooks:
```bash
npm install -g husky lint-staged
npx husky install
npx husky add .husky/pre-commit "npx lint-staged"
```
### Local Testing
**Run Quality Checks:**
```bash
npm run ci:lint # ESLint
npm run ci:typecheck # TypeScript
npm run ci:test # Unit tests
npm run ci:build # Build check
```
**Run Security Checks:**
```bash
npm run security:audit # Dependency audit
npm run security:outdated # Check outdated packages
```
**Run Performance Checks:**
```bash
npm run performance:bundle # Bundle analysis
npm run performance:lighthouse # Lighthouse audit
```
### Local Deployment
**Preview Deployment:**
```bash
npm run pages:build
npm run preview
```
**Production Deployment:**
```bash
CLOUDFLARE_ACCOUNT_ID=your-account-id npm run deploy:production
```
---
## 🔍 Troubleshooting
### Common Issues
**Build Failures:**
- Check Node.js version (requires 20.x)
- Verify all dependencies installed
- Check for TypeScript errors
- Review ESLint configuration
**Deployment Failures:**
- Verify Cloudflare credentials
- Check account ID configuration
- Review build artifacts
- Check network connectivity
**Performance Issues:**
- Review bundle size limits
- Check for large dependencies
- Optimize images and assets
- Review Lighthouse recommendations
**Security Issues:**
- Update vulnerable dependencies
- Review license compliance
- Check for hardcoded secrets
- Verify security headers
### Debug Commands
**Check Pipeline Status:**
```bash
# View recent workflow runs
gh run list
# View specific workflow
gh run view <run-id>
# Download artifacts
gh run download <run-id>
```
**Local Debugging:**
```bash
# Build with verbose output
npm run ci:build --verbose
# Run tests with coverage
npm run ci:test --coverage
# Check bundle size
npm run ci:budgets
```
---
## 📚 Best Practices
### Code Quality
- Write meaningful commit messages
- Keep PRs small and focused
- Add tests for new features
- Follow TypeScript best practices
- Use ESLint and Prettier consistently
### Security
- Regularly update dependencies
- Use environment variables for secrets
- Review security scan results
- Follow OWASP guidelines
- Implement proper access controls
### Performance
- Monitor bundle sizes
- Optimize images and assets
- Use lazy loading appropriately
- Implement proper caching
- Monitor Core Web Vitals
### Deployment
- Test in preview environment first
- Use feature flags for gradual rollouts
- Monitor deployment health
- Have rollback plan ready
- Document deployment procedures
---
## 🔄 Continuous Improvement
### Pipeline Optimization
- Monitor pipeline execution times
- Optimize build processes
- Reduce unnecessary steps
- Improve error handling
- Add more comprehensive tests
### Monitoring Enhancement
- Add more performance metrics
- Implement alerting systems
- Create dashboards
- Track deployment success rates
- Monitor user experience metrics
### Security Hardening
- Implement additional security scans
- Add compliance checks
- Enhance vulnerability detection
- Implement security policies
- Regular security reviews
---
## 📞 Support
### Getting Help
- Check workflow logs in Gitea Actions
- Review error messages carefully
- Consult this documentation
- Check GitHub Issues
- Contact development team
### Reporting Issues
- Use GitHub Issues for bugs
- Provide detailed error messages
- Include relevant logs
- Describe reproduction steps
- Suggest potential solutions
---
**Last Updated:** 2025-10-09
**Version:** 1.0.0
**Maintainer:** Development Team