mirror of
https://github.com/gogs/gogs.git
synced 2026-02-27 16:50:58 +01:00
659 lines
16 KiB
Markdown
659 lines
16 KiB
Markdown
# Flamego Migration Checklist
|
|
|
|
This checklist provides a step-by-step guide for executing the migration from Macaron to Flamego.
|
|
|
|
## Pre-Migration
|
|
|
|
### 1. Team Preparation
|
|
- [ ] Review migration guide with entire team
|
|
- [ ] Ensure all developers understand Flamego basics
|
|
- [ ] Allocate 3-4 weeks for migration effort
|
|
- [ ] Schedule regular sync meetings during migration
|
|
- [ ] Identify rollback champion
|
|
|
|
### 2. Documentation Review
|
|
- [ ] Read [Flamego documentation](https://flamego.dev/)
|
|
- [ ] Review [migration examples](./flamego_migration_examples.md)
|
|
- [ ] Review [middleware documentation](https://flamego.dev/middleware/)
|
|
- [ ] Understand Flamego's dependency injection
|
|
|
|
### 3. Environment Setup
|
|
- [ ] Create feature branch: `feature/flamego-migration`
|
|
- [ ] Set up local development environment
|
|
- [ ] Verify current tests pass: `go test ./...`
|
|
- [ ] Document current test coverage: `go test -cover ./...`
|
|
- [ ] Benchmark current performance (optional)
|
|
|
|
### 4. Backup and Safety
|
|
- [ ] Tag current stable version: `git tag v0.14.0-pre-flamego`
|
|
- [ ] Create backup branch: `git branch backup/before-flamego`
|
|
- [ ] Document current behavior (screenshots, videos)
|
|
- [ ] Ensure CI/CD can roll back quickly
|
|
|
|
## Phase 1: Dependencies (Day 1)
|
|
|
|
### 1.1 Update go.mod
|
|
|
|
- [ ] Add Flamego core
|
|
```bash
|
|
go get github.com/flamego/flamego@latest
|
|
```
|
|
|
|
- [ ] Add Flamego middleware
|
|
```bash
|
|
go get github.com/flamego/binding@latest
|
|
go get github.com/flamego/cache@latest
|
|
go get github.com/flamego/captcha@latest
|
|
go get github.com/flamego/csrf@latest
|
|
go get github.com/flamego/gzip@latest
|
|
go get github.com/flamego/i18n@latest
|
|
go get github.com/flamego/session@latest
|
|
go get github.com/flamego/template@latest
|
|
```
|
|
|
|
- [ ] Run `go mod tidy`
|
|
- [ ] Verify no conflicts
|
|
- [ ] Commit: `git commit -m "Add Flamego dependencies"`
|
|
|
|
### 1.2 Import Updates
|
|
|
|
- [ ] Create find-and-replace script
|
|
- [ ] Test script on sample file
|
|
- [ ] Document import mapping
|
|
|
|
## Phase 2: Core Framework (Days 2-3)
|
|
|
|
### 2.1 Main Application Setup
|
|
|
|
File: `internal/cmd/web.go`
|
|
|
|
- [ ] Update imports
|
|
```go
|
|
// Remove
|
|
"gopkg.in/macaron.v1"
|
|
"github.com/go-macaron/*"
|
|
|
|
// Add
|
|
"github.com/flamego/flamego"
|
|
"github.com/flamego/session"
|
|
"github.com/flamego/csrf"
|
|
// etc...
|
|
```
|
|
|
|
- [ ] Rename function: `newMacaron()` → `newFlamego()`
|
|
- [ ] Update initialization: `macaron.New()` → `flamego.New()`
|
|
- [ ] Update logger: `macaron.Logger()` → `flamego.Logger()`
|
|
- [ ] Update recovery: `macaron.Recovery()` → `flamego.Recovery()`
|
|
- [ ] Update gzip: Keep similar pattern
|
|
- [ ] Update static file serving
|
|
```go
|
|
// Change from macaron.Static() to flamego.Static()
|
|
f.Use(flamego.Static(...))
|
|
```
|
|
|
|
- [ ] Update renderer setup
|
|
```go
|
|
// Change from macaron.Renderer() to template.Templater()
|
|
f.Use(template.Templater(template.Options{...}))
|
|
```
|
|
|
|
- [ ] Test compilation: `go build`
|
|
- [ ] Fix any compilation errors
|
|
- [ ] Commit: `git commit -m "Migrate main app setup to Flamego"`
|
|
|
|
### 2.2 Middleware Configuration
|
|
|
|
Still in `internal/cmd/web.go`:
|
|
|
|
- [ ] Update i18n middleware
|
|
- Change `Langs` → `Languages`
|
|
- Change `DefaultLang` → `DefaultLanguage`
|
|
- Change `SubURL` → `URLPrefix`
|
|
|
|
- [ ] Update cache middleware
|
|
- Change from string adapter to config struct
|
|
- Update method calls: `Put()` → `Set()`
|
|
|
|
- [ ] Update captcha middleware
|
|
- Verify options compatibility
|
|
- Test captcha generation
|
|
|
|
- [ ] Update toolbox functionality
|
|
- Remove toolbox middleware
|
|
- Create custom health check endpoint
|
|
```go
|
|
f.Get("/-/health", func(c flamego.Context) {
|
|
if err := database.Ping(); err != nil {
|
|
c.ResponseWriter().WriteHeader(500)
|
|
return
|
|
}
|
|
c.ResponseWriter().WriteHeader(200)
|
|
})
|
|
```
|
|
|
|
- [ ] Update session middleware
|
|
- Change `Provider` → Use config structs
|
|
- Change interface: `session.Store` → `session.Session`
|
|
- Test session persistence
|
|
|
|
- [ ] Update CSRF middleware
|
|
- Verify options compatibility
|
|
- Test token generation
|
|
- Update method calls: `GetToken()` → `Token()`
|
|
|
|
- [ ] Test server starts: `go run gogs.go web`
|
|
- [ ] Verify middleware loads in correct order
|
|
- [ ] Commit: `git commit -m "Migrate middleware to Flamego"`
|
|
|
|
### 2.3 Route Definitions
|
|
|
|
Still in `internal/cmd/web.go`:
|
|
|
|
- [ ] Update basic routes: `:param` → `<param>`
|
|
- [ ] Update regex routes: `^:name(a|b)$` → `<name:a|b>`
|
|
- [ ] Test route compilation
|
|
- [ ] Verify route pattern matching
|
|
|
|
Routes to update:
|
|
- [ ] Home route: `/`
|
|
- [ ] Explore routes: `/explore/*`
|
|
- [ ] Install routes: `/install`
|
|
- [ ] User routes: `/user/*`
|
|
- [ ] Admin routes: `/admin/*`
|
|
- [ ] Org routes: `/org/*`
|
|
- [ ] Repo routes: `/:username/:reponame/*`
|
|
- [ ] API routes: `/api/*`
|
|
|
|
- [ ] Commit: `git commit -m "Update route syntax to Flamego"`
|
|
|
|
## Phase 3: Context System (Days 4-5)
|
|
|
|
### 3.1 Context Wrapper
|
|
|
|
File: `internal/context/context.go`
|
|
|
|
- [ ] Update imports
|
|
```go
|
|
"github.com/flamego/flamego"
|
|
"github.com/flamego/cache"
|
|
"github.com/flamego/csrf"
|
|
"github.com/flamego/session"
|
|
```
|
|
|
|
- [ ] Update Context struct
|
|
```go
|
|
type Context struct {
|
|
flamego.Context // Embedded interface
|
|
cache cache.Cache
|
|
csrf csrf.CSRF
|
|
flash *session.Flash
|
|
session session.Session
|
|
// ... other fields
|
|
}
|
|
```
|
|
|
|
- [ ] Add accessor methods
|
|
```go
|
|
func (c *Context) Cache() cache.Cache { return c.cache }
|
|
func (c *Context) CSRF() csrf.CSRF { return c.csrf }
|
|
func (c *Context) Session() session.Session { return c.session }
|
|
```
|
|
|
|
- [ ] Update Contexter middleware signature
|
|
```go
|
|
func Contexter(store Store) flamego.Handler {
|
|
return func(
|
|
ctx flamego.Context,
|
|
cache cache.Cache,
|
|
sess session.Session,
|
|
// ... other injectables
|
|
) {
|
|
// ...
|
|
}
|
|
}
|
|
```
|
|
|
|
- [ ] Update response methods
|
|
- `c.HTML()` - needs template parameter or stored reference
|
|
- `c.JSON()` - use ResponseWriter directly
|
|
- `c.Redirect()` - should work as-is
|
|
- `c.PlainText()` - use ResponseWriter
|
|
- `c.ServeContent()` - use ResponseWriter
|
|
|
|
- [ ] Update parameter access
|
|
- All `c.Params(":name")` → `c.Param("name")`
|
|
|
|
- [ ] Test compilation: `go build`
|
|
- [ ] Commit: `git commit -m "Migrate Context wrapper to Flamego"`
|
|
|
|
### 3.2 Other Context Files
|
|
|
|
Files in `internal/context/`:
|
|
|
|
- [ ] `auth.go` - Update handler signatures
|
|
- [ ] `api.go` - Update APIContext
|
|
- [ ] `user.go` - Update user context helpers
|
|
- [ ] `repo.go` - Update repository context
|
|
- Fix all `c.Params()` calls
|
|
- Update middleware signatures
|
|
- [ ] `org.go` - Update organization context
|
|
- [ ] `go_get.go` - Update go-get handler
|
|
|
|
For each file:
|
|
- [ ] Update imports
|
|
- [ ] Change `macaron.Handler` → `flamego.Handler`
|
|
- [ ] Change `*macaron.Context` → `flamego.Context` or `*Context`
|
|
- [ ] Update `c.Params(":name")` → `c.Param("name")`
|
|
- [ ] Fix compilation errors
|
|
|
|
- [ ] Commit after each file or group
|
|
- [ ] Final commit: `git commit -m "Complete context system migration"`
|
|
|
|
## Phase 4: Form Binding (Days 6-7)
|
|
|
|
### 4.1 Form Package
|
|
|
|
File: `internal/form/form.go`
|
|
|
|
- [ ] Update imports
|
|
```go
|
|
"github.com/flamego/binding"
|
|
```
|
|
|
|
- [ ] Update custom validators
|
|
```go
|
|
// Register custom validators with go-playground/validator
|
|
binding.RegisterValidation("alphaDashDot", validatorFunc)
|
|
```
|
|
|
|
- [ ] Update `SetNameMapper` if used
|
|
- [ ] Test validator registration
|
|
|
|
### 4.2 Form Structs
|
|
|
|
Files: `internal/form/*.go`
|
|
|
|
For each file:
|
|
- [ ] `auth.go` - Update auth forms
|
|
- [ ] `admin.go` - Update admin forms
|
|
- [ ] `user.go` - Update user forms
|
|
- [ ] `repo.go` - Update repo forms
|
|
- [ ] `org.go` - Update org forms
|
|
|
|
For each form:
|
|
- [ ] Change `binding:"Required"` → `validate:"required"`
|
|
- [ ] Change `binding:"MaxSize(100)"` → `validate:"max=100"`
|
|
- [ ] Change `binding:"MinSize(5)"` → `validate:"min=5"`
|
|
- [ ] Update custom validators
|
|
- [ ] Test form validation
|
|
|
|
Pattern replacements:
|
|
- `binding:"Required"` → `validate:"required"`
|
|
- `binding:"AlphaDashDot"` → `validate:"alphaDashDot"`
|
|
- `binding:"MaxSize(N)"` → `validate:"max=N"`
|
|
- `binding:"MinSize(N)"` → `validate:"min=N"`
|
|
- `binding:"Email"` → `validate:"email"`
|
|
- `binding:"Url"` → `validate:"url"`
|
|
|
|
- [ ] Commit: `git commit -m "Migrate form binding to Flamego"`
|
|
|
|
## Phase 5: Route Handlers (Days 8-14)
|
|
|
|
### 5.1 User Routes
|
|
|
|
Files: `internal/route/user/*.go`
|
|
|
|
- [ ] `user.go` - Basic user handlers
|
|
- Update handler signatures
|
|
- Add template parameters
|
|
- Fix parameter access
|
|
|
|
- [ ] `auth.go` - Login/logout handlers
|
|
- Update session access: `sess.Get()` etc.
|
|
- Fix CSRF token access
|
|
|
|
- [ ] `setting.go` - User settings
|
|
- Update form binding usage
|
|
- Fix template rendering
|
|
|
|
- [ ] Test user flows:
|
|
- [ ] User registration
|
|
- [ ] User login
|
|
- [ ] User logout
|
|
- [ ] Profile view
|
|
- [ ] Settings update
|
|
|
|
- [ ] Commit: `git commit -m "Migrate user routes to Flamego"`
|
|
|
|
### 5.2 Repository Routes
|
|
|
|
Files: `internal/route/repo/*.go`
|
|
|
|
Priority files:
|
|
- [ ] `repo.go` - Main repo handler
|
|
- [ ] `home.go` - Repository home
|
|
- [ ] `issue.go` - Issue management
|
|
- [ ] `pull.go` - Pull requests
|
|
- [ ] `release.go` - Releases
|
|
- [ ] `webhook.go` - Webhooks
|
|
- [ ] `setting.go` - Repo settings
|
|
- [ ] `http.go` - HTTP Git operations
|
|
|
|
For each file:
|
|
- [ ] Update imports
|
|
- [ ] Update handler signatures
|
|
- [ ] Add template parameters where needed
|
|
- [ ] Fix `c.Params()` calls
|
|
- [ ] Update form binding calls
|
|
|
|
- [ ] Test repository flows:
|
|
- [ ] Create repository
|
|
- [ ] View repository
|
|
- [ ] Create issue
|
|
- [ ] Create pull request
|
|
- [ ] Push via HTTP
|
|
|
|
- [ ] Commit: `git commit -m "Migrate repository routes to Flamego"`
|
|
|
|
### 5.3 Admin Routes
|
|
|
|
Files: `internal/route/admin/*.go`
|
|
|
|
- [ ] `admin.go` - Admin dashboard
|
|
- [ ] `user.go` - User management
|
|
- [ ] `org.go` - Organization management
|
|
- [ ] `repo.go` - Repository management
|
|
- [ ] `auth.go` - Auth source management
|
|
- [ ] `notice.go` - System notices
|
|
|
|
- [ ] Test admin flows:
|
|
- [ ] Admin dashboard
|
|
- [ ] Create user
|
|
- [ ] Delete user
|
|
- [ ] Manage auth sources
|
|
|
|
- [ ] Commit: `git commit -m "Migrate admin routes to Flamego"`
|
|
|
|
### 5.4 Organization Routes
|
|
|
|
Files: `internal/route/org/*.go`
|
|
|
|
- [ ] `org.go` - Organization handlers
|
|
- [ ] `team.go` - Team management
|
|
- [ ] `setting.go` - Org settings
|
|
|
|
- [ ] Test organization flows:
|
|
- [ ] Create organization
|
|
- [ ] Manage teams
|
|
- [ ] Org settings
|
|
|
|
- [ ] Commit: `git commit -m "Migrate organization routes to Flamego"`
|
|
|
|
### 5.5 API Routes
|
|
|
|
Files: `internal/route/api/v1/*.go`
|
|
|
|
- [ ] `api.go` - API router setup
|
|
- [ ] `user/*.go` - User API endpoints
|
|
- [ ] `repo/*.go` - Repository API endpoints
|
|
- [ ] `org/*.go` - Organization API endpoints
|
|
- [ ] `admin/*.go` - Admin API endpoints
|
|
|
|
For API handlers:
|
|
- [ ] Update JSON response methods
|
|
- [ ] Ensure authentication works
|
|
- [ ] Test error responses
|
|
|
|
- [ ] Test API endpoints:
|
|
- [ ] GET /api/v1/user
|
|
- [ ] GET /api/v1/users/:username
|
|
- [ ] GET /api/v1/repos/:owner/:repo
|
|
- [ ] Create/Update operations
|
|
|
|
- [ ] Commit: `git commit -m "Migrate API routes to Flamego"`
|
|
|
|
### 5.6 LFS Routes
|
|
|
|
Files: `internal/route/lfs/*.go`
|
|
|
|
- [ ] `route.go` - LFS router
|
|
- [ ] `basic.go` - Basic auth
|
|
- [ ] `batch.go` - Batch API
|
|
- [ ] Update tests in `*_test.go`
|
|
|
|
- [ ] Test LFS operations
|
|
- [ ] Commit: `git commit -m "Migrate LFS routes to Flamego"`
|
|
|
|
### 5.7 Other Routes
|
|
|
|
Files: `internal/route/*.go`
|
|
|
|
- [ ] `home.go` - Home page
|
|
- [ ] `install.go` - Installation
|
|
- [ ] `dev/*.go` - Development tools
|
|
|
|
- [ ] Commit: `git commit -m "Migrate remaining routes to Flamego"`
|
|
|
|
## Phase 6: Testing (Days 15-18)
|
|
|
|
### 6.1 Unit Tests
|
|
|
|
- [ ] Update test helpers
|
|
- Create mock flamego.Context
|
|
- Update test fixtures
|
|
|
|
- [ ] Run unit tests: `go test ./internal/context/...`
|
|
- [ ] Run unit tests: `go test ./internal/form/...`
|
|
- [ ] Run unit tests: `go test ./internal/route/...`
|
|
|
|
- [ ] Fix failing tests one by one
|
|
- [ ] Document test changes
|
|
- [ ] Commit: `git commit -m "Fix unit tests for Flamego"`
|
|
|
|
### 6.2 Integration Tests
|
|
|
|
- [ ] Update integration test setup
|
|
- [ ] Test complete user flows
|
|
- [ ] Registration → Login → Create Repo → Push → Pull
|
|
|
|
- [ ] Test admin flows
|
|
- [ ] Admin login → User management
|
|
|
|
- [ ] Test API flows
|
|
- [ ] Token auth → API calls
|
|
|
|
- [ ] Commit: `git commit -m "Fix integration tests for Flamego"`
|
|
|
|
### 6.3 Manual Testing
|
|
|
|
Create test plan document covering:
|
|
|
|
Web UI:
|
|
- [ ] Homepage loads
|
|
- [ ] User registration works
|
|
- [ ] User login works
|
|
- [ ] User logout works
|
|
- [ ] Profile viewing works
|
|
- [ ] Repository creation works
|
|
- [ ] Repository viewing works
|
|
- [ ] Issue creation works
|
|
- [ ] Issue commenting works
|
|
- [ ] Pull request creation works
|
|
- [ ] Pull request merging works
|
|
- [ ] Webhooks work
|
|
- [ ] LFS operations work
|
|
- [ ] File uploads work
|
|
- [ ] Avatar uploads work
|
|
- [ ] Admin panel works
|
|
- [ ] Organization creation works
|
|
- [ ] Team management works
|
|
|
|
Git Operations:
|
|
- [ ] HTTP clone works
|
|
- [ ] HTTP push works
|
|
- [ ] HTTP pull works
|
|
- [ ] SSH clone works
|
|
- [ ] SSH push works
|
|
- [ ] SSH pull works
|
|
|
|
API:
|
|
- [ ] Authentication works
|
|
- [ ] All v1 endpoints work
|
|
- [ ] Error responses correct
|
|
|
|
Security:
|
|
- [ ] CSRF protection works
|
|
- [ ] Session security works
|
|
- [ ] Auth required endpoints protected
|
|
|
|
Localization:
|
|
- [ ] Language switching works
|
|
- [ ] Translations load correctly
|
|
|
|
- [ ] Document any issues found
|
|
- [ ] Create issues for bugs
|
|
- [ ] Commit fixes as they're made
|
|
|
|
### 6.4 Performance Testing
|
|
|
|
- [ ] Benchmark homepage
|
|
- [ ] Benchmark repository view
|
|
- [ ] Benchmark API endpoints
|
|
- [ ] Compare with pre-migration benchmarks
|
|
- [ ] Document performance differences
|
|
- [ ] Optimize if needed
|
|
|
|
## Phase 7: Cleanup (Days 19-20)
|
|
|
|
### 7.1 Remove Old Code
|
|
|
|
- [ ] Remove all Macaron imports
|
|
```bash
|
|
grep -r "gopkg.in/macaron.v1" .
|
|
grep -r "github.com/go-macaron/" .
|
|
```
|
|
|
|
- [ ] Remove from go.mod
|
|
```bash
|
|
go mod edit -droprequire gopkg.in/macaron.v1
|
|
go mod edit -droprequire github.com/go-macaron/binding
|
|
# etc...
|
|
```
|
|
|
|
- [ ] Run `go mod tidy`
|
|
- [ ] Verify unused dependencies removed
|
|
- [ ] Commit: `git commit -m "Remove Macaron dependencies"`
|
|
|
|
### 7.2 Code Quality
|
|
|
|
- [ ] Run linter: `golangci-lint run`
|
|
- [ ] Fix linter issues
|
|
- [ ] Run `go fmt ./...`
|
|
- [ ] Run `go vet ./...`
|
|
- [ ] Check for TODO/FIXME comments
|
|
- [ ] Commit: `git commit -m "Code quality improvements"`
|
|
|
|
### 7.3 Documentation
|
|
|
|
- [ ] Update README.md if needed
|
|
- [ ] Update CONTRIBUTING.md if needed
|
|
- [ ] Update development documentation
|
|
- [ ] Document migration in CHANGELOG.md
|
|
- [ ] Create migration announcement
|
|
- [ ] Commit: `git commit -m "Update documentation for Flamego"`
|
|
|
|
### 7.4 Final Review
|
|
|
|
- [ ] Review all changes
|
|
- [ ] Ensure no debug code left
|
|
- [ ] Verify test coverage maintained
|
|
- [ ] Check for security issues
|
|
- [ ] Run final test suite: `go test ./...`
|
|
- [ ] Run final manual tests
|
|
|
|
## Phase 8: Deployment (Days 21-22)
|
|
|
|
### 8.1 Pre-Deployment
|
|
|
|
- [ ] Create release candidate tag
|
|
- [ ] Deploy to staging environment
|
|
- [ ] Run smoke tests on staging
|
|
- [ ] Performance test on staging
|
|
- [ ] Security scan
|
|
- [ ] Get team approval
|
|
|
|
### 8.2 Deployment
|
|
|
|
- [ ] Schedule deployment window
|
|
- [ ] Notify users of maintenance
|
|
- [ ] Take backup of production
|
|
- [ ] Deploy new version
|
|
- [ ] Monitor logs
|
|
- [ ] Run smoke tests on production
|
|
- [ ] Monitor performance metrics
|
|
|
|
### 8.3 Post-Deployment
|
|
|
|
- [ ] Monitor for issues (24-48 hours)
|
|
- [ ] Check error rates
|
|
- [ ] Verify all features working
|
|
- [ ] Collect user feedback
|
|
- [ ] Address any urgent issues
|
|
|
|
## Rollback Procedure
|
|
|
|
If critical issues occur:
|
|
|
|
### Quick Rollback
|
|
1. [ ] Stop application
|
|
2. [ ] Restore from backup
|
|
3. [ ] Start application
|
|
4. [ ] Verify functionality
|
|
5. [ ] Notify users
|
|
|
|
### Git Rollback
|
|
1. [ ] Identify last good commit
|
|
2. [ ] `git revert <commit-range>`
|
|
3. [ ] `git push`
|
|
4. [ ] Deploy reverted version
|
|
|
|
### Issues to Watch For
|
|
- [ ] Session persistence issues
|
|
- [ ] CSRF token validation failures
|
|
- [ ] Form validation errors
|
|
- [ ] Template rendering errors
|
|
- [ ] Performance degradation
|
|
- [ ] Memory leaks
|
|
- [ ] Authentication bypass
|
|
|
|
## Success Criteria
|
|
|
|
Migration is successful when:
|
|
|
|
- [ ] All tests pass
|
|
- [ ] All manual test cases pass
|
|
- [ ] Performance is equal or better
|
|
- [ ] No security regressions
|
|
- [ ] No functionality lost
|
|
- [ ] Code quality maintained
|
|
- [ ] Documentation updated
|
|
- [ ] Team trained on new code
|
|
|
|
## Notes Section
|
|
|
|
Use this section to track:
|
|
- Issues encountered
|
|
- Solutions found
|
|
- Time spent on each phase
|
|
- Lessons learned
|
|
- Tips for future migrations
|
|
|
|
---
|
|
|
|
**Migration Started:** _____________
|
|
**Migration Completed:** _____________
|
|
**Total Time:** _____________
|
|
**Team Members:** _____________
|
|
**Issues Created:** _____________
|
|
**Issues Resolved:** _____________
|