forked from Hithomelabs/CFTunnels
190 lines
5.5 KiB
Markdown
190 lines
5.5 KiB
Markdown
# OpenRewrite Monthly Rolling Updates Plan for CFTunnels
|
|
|
|
## Overview
|
|
Configuration for OpenRewrite to provide automatic monthly rolling updates for the CFTunnels Spring Boot application with safety-first approach.
|
|
|
|
## 1. Core Configuration Files to Create/Modify
|
|
|
|
### build.gradle modifications:
|
|
- Add OpenRewrite plugin
|
|
- Configure safe update recipes
|
|
- Add dependency management
|
|
- Set up monthly scheduling hook
|
|
|
|
### rewrite.yml (new file):
|
|
- Custom safety recipes for CFTunnels
|
|
- Spring Boot specific update rules
|
|
- OAuth2 and OpenAPI compatibility checks
|
|
|
|
### .gitea/workflows/rewrite-updates.yml (new workflow):
|
|
- Monthly trigger (1st of each month)
|
|
- Safe update execution
|
|
- Test validation
|
|
- Rollback mechanisms
|
|
|
|
## 2. Safety-First Update Strategy
|
|
|
|
### Monthly Update Process:
|
|
1. **Dry Run Mode** - Preview all changes without applying
|
|
2. **Compatibility Checks** - Verify Spring Boot alignment
|
|
3. **Test Suite Validation** - Run all tests before applying
|
|
4. **Staged Application** - Apply in phases with verification
|
|
5. **Automatic Rollback** - Revert if any test fails
|
|
|
|
### Update Scope (Monthly):
|
|
- ✅ Security patches (immediate priority)
|
|
- ✅ Minor version updates (Spring Boot 3.4.x → 3.5.x)
|
|
- ✅ Dependency alignment (Spring ecosystem)
|
|
- ❌ Major version updates (manual review required)
|
|
- ❌ Experimental features (disabled)
|
|
|
|
## 3. Specific Recipes for CFTunnels
|
|
|
|
### Core Recipes:
|
|
```yaml
|
|
recipeList:
|
|
- org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_5
|
|
- org.openrewrite.maven.spring.UpgradeExplicitSpringBootDependencies
|
|
- org.openrewrite.java.dependencies.UpgradeDependencyVersion:
|
|
groupId: org.springdoc
|
|
newVersion: latest.release
|
|
- org.openrewrite.java.dependencies.UpgradeDependencyVersion:
|
|
groupId: org.springframework.boot
|
|
newVersion: 3.5.x
|
|
```
|
|
|
|
### Safety Exclusions:
|
|
- Experimental Spring Boot features
|
|
- Breaking Jakarta EE changes
|
|
- Database schema migrations
|
|
- OAuth2 provider configuration changes
|
|
|
|
## 4. CI/CD Integration Plan
|
|
|
|
### New Workflow: `.gitea/workflows/rewrite-updates.yml`
|
|
- **Schedule**: Cron for monthly execution (1st of month, 2 AM UTC)
|
|
- **Triggers**: Manual dispatch for urgent security updates
|
|
- **Steps**:
|
|
1. Run `rewriteDryRun` to preview changes
|
|
2. Execute test suite with current dependencies
|
|
3. Apply updates with `rewriteRun`
|
|
4. Run full test suite again
|
|
5. Create PR with changes for review
|
|
6. Auto-merge if all tests pass
|
|
|
|
### Rollback Mechanism:
|
|
- Automatic revert if any test fails
|
|
- Previous version tagging before updates
|
|
- Deployment rollback capability
|
|
|
|
## 5. Configuration Specifics
|
|
|
|
### Critical Dependencies to Update:
|
|
- Spring Boot (3.4.5 → latest 3.5.x)
|
|
- SpringDoc OpenAPI (2.8.5 → latest compatible)
|
|
- PostgreSQL Driver (latest compatible)
|
|
- Hibernate Validator
|
|
- OAuth2 Client
|
|
|
|
### Protected Configurations:
|
|
- Cloudflare API integration
|
|
- Database connection settings
|
|
- OAuth2 provider endpoints
|
|
- Custom security configurations
|
|
|
|
## 6. Monitoring & Notification Strategy
|
|
|
|
### Pre-Update Notifications:
|
|
- 3 days before monthly update
|
|
- Preview of planned changes
|
|
- Security vulnerability summary
|
|
|
|
### Post-Update Reports:
|
|
- List of applied updates
|
|
- Test results summary
|
|
- Performance impact assessment
|
|
- Any manual intervention required
|
|
|
|
## 7. Implementation Files Summary
|
|
|
|
### Files to create:
|
|
- `rewrite.yml` - Custom recipe configuration
|
|
- `.gitea/workflows/rewrite-updates.yml` - Monthly automation
|
|
- `scripts/rewrite-safety-check.sh` - Safety validation script
|
|
|
|
### Files to modify:
|
|
- `build.gradle` - Add OpenRewrite plugin and configuration
|
|
- `docker-compose.yaml` - Add safety environment variables
|
|
|
|
### Files to create for monitoring:
|
|
- `.github/ISSUE_TEMPLATE/rollback-request.md` - Emergency rollback
|
|
- `docs/UPDATE-PROCESS.md` - Documentation
|
|
|
|
## 8. Current Project Analysis
|
|
- **Project Type**: Spring Boot 3.4.5 with Gradle build system
|
|
- **Java Version**: 17 (with toolchain)
|
|
- **CI/CD**: Gitea workflows (similar to GitHub Actions)
|
|
- **Current Dependencies**: Spring Boot starter, OAuth2, PostgreSQL, SpringDoc OpenAPI
|
|
|
|
## 9. Pending Configuration Decisions
|
|
|
|
### Security Patch Priority:
|
|
Should security patches be applied immediately (outside monthly schedule) or wait for the monthly cycle?
|
|
|
|
### Pull Request Strategy:
|
|
- Auto-merge successful updates?
|
|
- Always create PR for manual review?
|
|
- Auto-merge only for patch versions?
|
|
|
|
### Notification Method:
|
|
- Gitea notifications?
|
|
- Email summary?
|
|
- Slack/Discord integration?
|
|
|
|
### Test Validation:
|
|
- Full test suite required?
|
|
- Skip integration tests for dependency-only changes?
|
|
- Performance baseline validation?
|
|
|
|
### Backup Strategy:
|
|
- Tag before each update?
|
|
- Keep rolling history of last 3 versions?
|
|
|
|
## 10. Next Steps
|
|
|
|
Once the above decisions are made, proceed with:
|
|
1. Create all configuration files
|
|
2. Update build.gradle with OpenRewrite plugin
|
|
3. Set up monthly workflow
|
|
4. Configure safety mechanisms
|
|
5. Test dry-run execution
|
|
6. Monitor first automated update
|
|
|
|
## 11. Rollback Procedures
|
|
|
|
### Emergency Rollback:
|
|
1. Identify last working tag
|
|
2. Revert to previous version
|
|
3. Update docker-compose with rollback image tag
|
|
4. Restart services
|
|
5. Verify functionality
|
|
|
|
### Manual Override:
|
|
- Disable automatic updates temporarily
|
|
- Manual version pinning in build.gradle
|
|
- Custom update execution as needed
|
|
|
|
## 12. Success Metrics
|
|
|
|
### Metrics to Track:
|
|
- Number of successful automated updates
|
|
- Failed update rate
|
|
- Time to recovery from failed updates
|
|
- Security vulnerability reduction
|
|
- Dependency currency score
|
|
|
|
### Monitoring Alerts:
|
|
- Failed update notifications
|
|
- Security patch availability
|
|
- Breaking change warnings
|
|
- Performance regression alerts |