Files
gitlab-to-gitea/config/config.go
2025-04-20 21:18:53 -04:00

73 lines
1.9 KiB
Go

// config.go
// Package config handles application configuration through environment variables
package config
import (
"errors"
"os"
"strconv"
)
// Config holds all configuration parameters for the migration
type Config struct {
GitLabURL string
GitLabToken string
GitLabAdminUser string
GitLabAdminPass string
GiteaURL string
GiteaToken string
MigrationStateFile string
ResumeMigration bool
}
// LoadConfig loads configuration from environment variables
func LoadConfig() (*Config, error) {
gitlabURL := os.Getenv("GITLAB_URL")
if gitlabURL == "" {
return nil, errors.New("GITLAB_URL environment variable is required")
}
gitlabToken := os.Getenv("GITLAB_TOKEN")
if gitlabToken == "" {
return nil, errors.New("GITLAB_TOKEN environment variable is required")
}
giteaURL := os.Getenv("GITEA_URL")
if giteaURL == "" {
return nil, errors.New("GITEA_URL environment variable is required")
}
giteaToken := os.Getenv("GITEA_TOKEN")
if giteaToken == "" {
return nil, errors.New("GITEA_TOKEN environment variable is required")
}
// Optional values with defaults
migrationStateFile := os.Getenv("MIGRATION_STATE_FILE")
if migrationStateFile == "" {
migrationStateFile = "migration_state.json"
}
resumeMigrationStr := os.Getenv("RESUME_MIGRATION")
resumeMigration := true // default
if resumeMigrationStr != "" {
var err error
resumeMigration, err = strconv.ParseBool(resumeMigrationStr)
if err != nil {
return nil, errors.New("RESUME_MIGRATION must be a boolean value")
}
}
return &Config{
GitLabURL: gitlabURL,
GitLabToken: gitlabToken,
GitLabAdminUser: os.Getenv("GITLAB_ADMIN_USER"),
GitLabAdminPass: os.Getenv("GITLAB_ADMIN_PASS"),
GiteaURL: giteaURL,
GiteaToken: giteaToken,
MigrationStateFile: migrationStateFile,
ResumeMigration: resumeMigration,
}, nil
}