Rustelo/book/reference/feature-migration.md

473 lines
9.6 KiB
Markdown
Raw Normal View History

# Feature Migration Guide
This guide covers how to migrate features between different versions of Rustelo and how to add or remove features from your configuration.
## Overview
Feature migrations may be necessary when:
- Upgrading to a new version of Rustelo
- Adding new features to your application
- Removing unused features
- Changing feature configurations
- Moving between environments with different feature sets
## Migration Process
### 1. Backup Current Configuration
Always backup your current configuration before migrating:
```bash
./config/scripts/manage-config.sh backup prod
./config/scripts/manage-config.sh backup dev
```
### 2. Assess Current Features
List currently enabled features:
```bash
./config/scripts/debug-manage.sh list-features
./config/scripts/debug-manage.sh status
```
### 3. Plan Feature Changes
Document the changes needed:
- Features to enable
- Features to disable
- Feature configurations to update
- Dependencies to consider
### 4. Update Feature Configurations
Update individual feature configurations as needed.
### 5. Rebuild Configurations
Rebuild configurations for all environments:
```bash
./config/scripts/build-config.sh dev
./config/scripts/build-config.sh prod config.prod.toml
./config/scripts/build-config.sh example config.example.toml
```
### 6. Validate Changes
Validate the new configuration:
```bash
./config/scripts/debug-manage.sh test
```
## Feature Dependencies
Some features depend on others. The system handles these dependencies automatically:
### Core Dependencies
- **RBAC** requires **Authentication**
- **Content Management** requires **Authentication**
- **Advanced Email** may require **Authentication** for user-specific templates
### Optional Dependencies
- **Metrics** can integrate with any enabled feature
- **TLS** enhances security for all features
- **Caching** can improve performance for any feature
## Adding New Features
### Step 1: Create Feature Configuration
Use the template command to create a new feature:
```bash
./config/scripts/debug-manage.sh template my_new_feature
```
This creates:
- `config/features/my_new_feature/dev.toml`
- `config/features/my_new_feature/prod.toml`
- `config/features/my_new_feature/example.toml`
- `config/features/my_new_feature/README.md`
### Step 2: Configure Feature Settings
Edit each environment file with appropriate settings:
```toml
# config/features/my_new_feature/dev.toml
[features]
my_new_feature = true
[my_new_feature]
enabled = true
debug_mode = true
# Development-specific settings
```
```toml
# config/features/my_new_feature/prod.toml
[features]
my_new_feature = true
[my_new_feature]
enabled = true
debug_mode = false
# Production-specific settings
```
### Step 3: Update Documentation
Document your new feature:
- Update feature README
- Add to main documentation
- Update migration guides
### Step 4: Test Feature
Test the feature in all environments:
```bash
# Test development
./config/scripts/build-config.sh dev config.test.toml
# Test production
./config/scripts/build-config.sh prod config.test-prod.toml
```
## Removing Features
### Step 1: Assess Dependencies
Check if other features depend on the feature you want to remove:
```bash
# Review feature dependencies in documentation
grep -r "my_feature" config/features/
```
### Step 2: Disable Feature
Set the feature to disabled in all environments:
```toml
[features]
my_feature = false
[my_feature]
enabled = false
```
### Step 3: Remove Configuration Files (Optional)
If permanently removing:
```bash
rm -rf config/features/my_feature/
```
### Step 4: Update Dependencies
Update any features that depended on the removed feature.
## Feature Configuration Updates
### Updating Existing Features
When updating feature configurations:
1. **Review Changes**: Understand what's changing and why
2. **Update Gradually**: Start with development, then staging, then production
3. **Test Thoroughly**: Ensure the feature still works as expected
4. **Monitor Impact**: Watch for performance or functionality changes
### Example: Updating Authentication Feature
```toml
# Before
[auth.password]
min_length = 8
require_special_chars = false
# After
[auth.password]
min_length = 12
require_special_chars = true
require_uppercase = true
require_lowercase = true
```
## Environment-Specific Feature Management
### Development Environment
Development typically enables more features for testing:
```toml
[features]
auth = true
content = true
email = true
metrics = true
tls = false # Not needed in development
rbac = true # For testing
cache = true
debug_features = true # Development-only features
```
### Production Environment
Production focuses on essential, stable features:
```toml
[features]
auth = true
content = true
email = true
metrics = true
tls = true # Required for production
rbac = true
cache = true
debug_features = false # Disabled in production
```
## Feature Flag Management
### Runtime Feature Flags
Some features can be toggled at runtime:
```toml
[feature_flags]
auth_enabled = true
content_enabled = true
email_enabled = true
metrics_enabled = true
```
### Conditional Features
Features can be conditionally enabled:
```toml
[feature_flags.conditional]
oauth_enabled = false # Enable OAuth (requires auth)
two_factor_enabled = true # Enable 2FA (requires auth)
file_uploads_enabled = true # Enable file uploads (requires content)
```
## Migration Scripts
### Automated Feature Migration
Create scripts for common migrations:
```bash
#!/bin/bash
# migrate-to-v2.sh
# Update authentication feature
sed -i 's/min_length = 8/min_length = 12/' config/features/auth/*.toml
# Enable new security features
echo "csrf_protection = true" >> config/features/auth/prod.toml
# Rebuild configurations
./config/scripts/build-config.sh prod config.prod.toml
```
### Feature Validation Script
```bash
#!/bin/bash
# validate-features.sh
echo "Validating feature configurations..."
for env in dev prod example; do
echo "Testing $env environment..."
if ./config/scripts/build-config.sh "$env" "test_$env.toml"; then
echo "✓ $env configuration valid"
rm "test_$env.toml"
else
echo "✗ $env configuration invalid"
exit 1
fi
done
echo "All feature configurations valid!"
```
## Rollback Procedures
### Feature Rollback
If a feature migration fails:
1. **Disable the Feature**:
```toml
[features]
problematic_feature = false
```
2. **Restore Previous Configuration**:
```bash
./config/scripts/manage-config.sh restore backup_file.toml
```
3. **Rebuild and Deploy**:
```bash
./config/scripts/build-config.sh prod config.prod.toml
```
### Partial Rollback
Roll back specific feature settings:
```bash
# Restore specific feature from backup
cp backup/features/auth/prod.toml config/features/auth/prod.toml
# Rebuild configuration
./config/scripts/build-config.sh prod config.prod.toml
```
## Testing Feature Migrations
### Unit Testing
Test individual feature configurations:
```bash
# Test feature configuration loading
cargo test feature_config_tests
# Test feature initialization
cargo test feature_init_tests
```
### Integration Testing
Test feature interactions:
```bash
# Test feature dependencies
cargo test feature_dependency_tests
# Test feature combinations
cargo test feature_integration_tests
```
### End-to-End Testing
Test complete feature workflows:
```bash
# Test authentication flow
cargo test auth_e2e_tests
# Test content management flow
cargo test content_e2e_tests
```
## Monitoring Feature Changes
### Feature Usage Metrics
Monitor feature usage after migration:
```toml
[metrics.features]
track_feature_usage = true
track_feature_performance = true
track_feature_errors = true
```
### Health Checks
Add health checks for new features:
```toml
[health.features]
check_auth_status = true
check_email_connectivity = true
check_database_features = true
```
## Best Practices
### Planning
- Always plan feature changes in advance
- Consider impact on users and system performance
- Test changes in non-production environments first
### Documentation
- Document all feature changes
- Update user guides and API documentation
- Maintain feature compatibility matrices
### Communication
- Communicate feature changes to stakeholders
- Provide migration guides for users
- Announce deprecations well in advance
### Monitoring
- Monitor feature performance after changes
- Track error rates and user feedback
- Be prepared to rollback if necessary
## Troubleshooting
### Common Issues
1. **Feature Dependencies Not Met**
```bash
# Check feature dependencies
grep -r "requires.*auth" config/features/
```
2. **Configuration Conflicts**
```bash
# Validate configuration
./config/scripts/debug-manage.sh test
```
3. **Feature Not Loading**
```bash
# Check feature flag
grep "my_feature.*=.*true" config.toml
```
### Debug Commands
```bash
# List enabled features
./config/scripts/debug-manage.sh list-features
# Show feature status
./config/scripts/debug-manage.sh status
# Test specific feature
./config/scripts/build-config.sh dev --feature=my_feature
```
## Getting Help
For feature migration assistance:
- Review the [Features Configuration Guide](../configuration/features.md)
- Check the [Troubleshooting Guide](../troubleshooting/common.md)
- Consult feature-specific documentation
- Contact technical support
## Migration Checklist
- [ ] Backup current configurations
- [ ] Document planned changes
- [ ] Check feature dependencies
- [ ] Update feature configurations
- [ ] Test in development environment
- [ ] Validate in staging environment
- [ ] Deploy to production
- [ ] Monitor feature performance
- [ ] Update documentation
- [ ] Train team on changes