From 77a8439ea7b59e40b88598589ca4653e4959b24b Mon Sep 17 00:00:00 2001 From: crapStone Date: Sun, 26 May 2024 14:45:03 +0000 Subject: [PATCH] Rename gitea to forge in cli args and env variables (#339) This PR renames `gitea` in cli args to `forge` and `GITEA` in environment variables to `FORGE` and adds the gitea names as aliases for the forge names. Also closes #311 Reviewed-on: https://codeberg.org/Codeberg/pages-server/pulls/339 --- cli/flags.go | 24 ++++++----- config/assets/test_config.toml | 4 +- config/config.go | 4 +- config/setup.go | 12 +++--- config/setup_test.go | 73 +++++++++++++++++++++++----------- example_config.toml | 2 +- server/gitea/client.go | 9 +++-- server/handler/handler_test.go | 2 +- server/startup.go | 2 +- 9 files changed, 81 insertions(+), 51 deletions(-) diff --git a/cli/flags.go b/cli/flags.go index f7a7dc8..934ef8d 100644 --- a/cli/flags.go +++ b/cli/flags.go @@ -22,29 +22,31 @@ var ( ServerFlags = append(CertStorageFlags, []cli.Flag{ // ############# - // ### Gitea ### + // ### Forge ### // ############# - // GiteaRoot specifies the root URL of the Gitea instance, without a trailing slash. + // ForgeRoot specifies the root URL of the Forge instance, without a trailing slash. &cli.StringFlag{ - Name: "gitea-root", - Usage: "specifies the root URL of the Gitea instance, without a trailing slash.", - EnvVars: []string{"GITEA_ROOT"}, + Name: "forge-root", + Aliases: []string{"gitea-root"}, + Usage: "specifies the root URL of the Forgejo/Gitea instance, without a trailing slash.", + EnvVars: []string{"FORGE_ROOT", "GITEA_ROOT"}, }, - // GiteaApiToken specifies an api token for the Gitea instance + // ForgeApiToken specifies an api token for the Forge instance &cli.StringFlag{ - Name: "gitea-api-token", - Usage: "specifies an api token for the Gitea instance", - EnvVars: []string{"GITEA_API_TOKEN"}, + Name: "forge-api-token", + Aliases: []string{"gitea-api-token"}, + Usage: "specifies an api token for the Forgejo/Gitea instance", + EnvVars: []string{"FORGE_API_TOKEN", "GITEA_API_TOKEN"}, }, &cli.BoolFlag{ Name: "enable-lfs-support", - Usage: "enable lfs support, require gitea >= v1.17.0 as backend", + Usage: "enable lfs support, gitea must be version v1.17.0 or higher", EnvVars: []string{"ENABLE_LFS_SUPPORT"}, Value: false, }, &cli.BoolFlag{ Name: "enable-symlink-support", - Usage: "follow symlinks if enabled, require gitea >= v1.18.0 as backend", + Usage: "follow symlinks if enabled, gitea must be version v1.18.0 or higher", EnvVars: []string{"ENABLE_SYMLINK_SUPPORT"}, Value: false, }, diff --git a/config/assets/test_config.toml b/config/assets/test_config.toml index 6a2f0d0..acb2c55 100644 --- a/config/assets/test_config.toml +++ b/config/assets/test_config.toml @@ -10,8 +10,8 @@ rawDomain = 'raw.codeberg.page' allowedCorsDomains = ['fonts.codeberg.org', 'design.codeberg.org'] blacklistedPaths = ['do/not/use'] -[gitea] -root = 'codeberg.org' +[forge] +root = 'https://codeberg.org' token = 'XXXXXXXX' lfsEnabled = true followSymlinks = true diff --git a/config/config.go b/config/config.go index 0146e0f..2accbf5 100644 --- a/config/config.go +++ b/config/config.go @@ -3,7 +3,7 @@ package config type Config struct { LogLevel string `default:"warn"` Server ServerConfig - Gitea GiteaConfig + Forge ForgeConfig Database DatabaseConfig ACME ACMEConfig } @@ -20,7 +20,7 @@ type ServerConfig struct { BlacklistedPaths []string } -type GiteaConfig struct { +type ForgeConfig struct { Root string Token string LFSEnabled bool `default:"false"` diff --git a/config/setup.go b/config/setup.go index 6a2aa62..f1388fe 100644 --- a/config/setup.go +++ b/config/setup.go @@ -51,7 +51,7 @@ func MergeConfig(ctx *cli.Context, config *Config) { } mergeServerConfig(ctx, &config.Server) - mergeGiteaConfig(ctx, &config.Gitea) + mergeForgeConfig(ctx, &config.Forge) mergeDatabaseConfig(ctx, &config.Database) mergeACMEConfig(ctx, &config.ACME) } @@ -89,12 +89,12 @@ func mergeServerConfig(ctx *cli.Context, config *ServerConfig) { config.BlacklistedPaths = append(config.BlacklistedPaths, ALWAYS_BLACKLISTED_PATHS...) } -func mergeGiteaConfig(ctx *cli.Context, config *GiteaConfig) { - if ctx.IsSet("gitea-root") { - config.Root = ctx.String("gitea-root") +func mergeForgeConfig(ctx *cli.Context, config *ForgeConfig) { + if ctx.IsSet("forge-root") { + config.Root = ctx.String("forge-root") } - if ctx.IsSet("gitea-api-token") { - config.Token = ctx.String("gitea-api-token") + if ctx.IsSet("forge-api-token") { + config.Token = ctx.String("forge-api-token") } if ctx.IsSet("enable-lfs-support") { config.LFSEnabled = ctx.Bool("enable-lfs-support") diff --git a/config/setup_test.go b/config/setup_test.go index 1a32740..6ca9712 100644 --- a/config/setup_test.go +++ b/config/setup_test.go @@ -110,7 +110,7 @@ func TestValuesReadFromConfigFileShouldBeOverwrittenByArgs(t *testing.T) { } expectedConfig.LogLevel = "debug" - expectedConfig.Gitea.Root = "not-codeberg.org" + expectedConfig.Forge.Root = "not-codeberg.org" expectedConfig.ACME.AcceptTerms = true expectedConfig.Server.Host = "172.17.0.2" expectedConfig.Server.BlacklistedPaths = append(expectedConfig.Server.BlacklistedPaths, ALWAYS_BLACKLISTED_PATHS...) @@ -122,7 +122,7 @@ func TestValuesReadFromConfigFileShouldBeOverwrittenByArgs(t *testing.T) { []string{ "--config-file", "assets/test_config.toml", "--log-level", "debug", - "--gitea-root", "not-codeberg.org", + "--forge-root", "not-codeberg.org", "--acme-accept-terms", "--host", "172.17.0.2", }, @@ -146,7 +146,7 @@ func TestMergeConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T AllowedCorsDomains: []string{"original"}, BlacklistedPaths: []string{"original"}, }, - Gitea: GiteaConfig{ + Forge: ForgeConfig{ Root: "original", Token: "original", LFSEnabled: false, @@ -186,7 +186,7 @@ func TestMergeConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T AllowedCorsDomains: []string{"changed"}, BlacklistedPaths: append([]string{"changed"}, ALWAYS_BLACKLISTED_PATHS...), }, - Gitea: GiteaConfig{ + Forge: ForgeConfig{ Root: "changed", Token: "changed", LFSEnabled: true, @@ -227,9 +227,9 @@ func TestMergeConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T "--port", "8443", "--http-port", "443", "--enable-http-server", - // Gitea - "--gitea-root", "changed", - "--gitea-api-token", "changed", + // Forge + "--forge-root", "changed", + "--forge-api-token", "changed", "--enable-lfs-support", "--enable-symlink-support", "--default-mime-type", "changed", @@ -366,11 +366,11 @@ func TestMergeServerConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgE } } -func TestMergeGiteaConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T) { +func TestMergeForgeConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T) { runApp( t, func(ctx *cli.Context) error { - cfg := &GiteaConfig{ + cfg := &ForgeConfig{ Root: "original", Token: "original", LFSEnabled: false, @@ -379,9 +379,9 @@ func TestMergeGiteaConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *test ForbiddenMimeTypes: []string{"original"}, } - mergeGiteaConfig(ctx, cfg) + mergeForgeConfig(ctx, cfg) - expectedConfig := &GiteaConfig{ + expectedConfig := &ForgeConfig{ Root: "changed", Token: "changed", LFSEnabled: true, @@ -395,8 +395,8 @@ func TestMergeGiteaConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *test return nil }, []string{ - "--gitea-root", "changed", - "--gitea-api-token", "changed", + "--forge-root", "changed", + "--forge-api-token", "changed", "--enable-lfs-support", "--enable-symlink-support", "--default-mime-type", "changed", @@ -405,25 +405,25 @@ func TestMergeGiteaConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *test ) } -func TestMergeGiteaConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgExists(t *testing.T) { +func TestMergeForgeConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgExists(t *testing.T) { type testValuePair struct { args []string - callback func(*GiteaConfig) + callback func(*ForgeConfig) } testValuePairs := []testValuePair{ - {args: []string{"--gitea-root", "changed"}, callback: func(gc *GiteaConfig) { gc.Root = "changed" }}, - {args: []string{"--gitea-api-token", "changed"}, callback: func(gc *GiteaConfig) { gc.Token = "changed" }}, - {args: []string{"--enable-lfs-support"}, callback: func(gc *GiteaConfig) { gc.LFSEnabled = true }}, - {args: []string{"--enable-symlink-support"}, callback: func(gc *GiteaConfig) { gc.FollowSymlinks = true }}, - {args: []string{"--default-mime-type", "changed"}, callback: func(gc *GiteaConfig) { gc.DefaultMimeType = "changed" }}, - {args: []string{"--forbidden-mime-types", "changed"}, callback: func(gc *GiteaConfig) { gc.ForbiddenMimeTypes = []string{"changed"} }}, + {args: []string{"--forge-root", "changed"}, callback: func(gc *ForgeConfig) { gc.Root = "changed" }}, + {args: []string{"--forge-api-token", "changed"}, callback: func(gc *ForgeConfig) { gc.Token = "changed" }}, + {args: []string{"--enable-lfs-support"}, callback: func(gc *ForgeConfig) { gc.LFSEnabled = true }}, + {args: []string{"--enable-symlink-support"}, callback: func(gc *ForgeConfig) { gc.FollowSymlinks = true }}, + {args: []string{"--default-mime-type", "changed"}, callback: func(gc *ForgeConfig) { gc.DefaultMimeType = "changed" }}, + {args: []string{"--forbidden-mime-types", "changed"}, callback: func(gc *ForgeConfig) { gc.ForbiddenMimeTypes = []string{"changed"} }}, } for _, pair := range testValuePairs { runApp( t, func(ctx *cli.Context) error { - cfg := GiteaConfig{ + cfg := ForgeConfig{ Root: "original", Token: "original", LFSEnabled: false, @@ -435,7 +435,7 @@ func TestMergeGiteaConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgEx expectedConfig := cfg pair.callback(&expectedConfig) - mergeGiteaConfig(ctx, &cfg) + mergeForgeConfig(ctx, &cfg) expectedConfig.ForbiddenMimeTypes = fixArrayFromCtx(ctx, "forbidden-mime-types", expectedConfig.ForbiddenMimeTypes) @@ -448,6 +448,33 @@ func TestMergeGiteaConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgEx } } +func TestMergeForgeConfigShouldReplaceValuesGivenGiteaOptionsExist(t *testing.T) { + runApp( + t, + func(ctx *cli.Context) error { + cfg := &ForgeConfig{ + Root: "original", + Token: "original", + } + + mergeForgeConfig(ctx, cfg) + + expectedConfig := &ForgeConfig{ + Root: "changed", + Token: "changed", + } + + assert.Equal(t, expectedConfig, cfg) + + return nil + }, + []string{ + "--gitea-root", "changed", + "--gitea-api-token", "changed", + }, + ) +} + func TestMergeDatabaseConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T) { runApp( t, diff --git a/example_config.toml b/example_config.toml index 30e77c4..c8dacb2 100644 --- a/example_config.toml +++ b/example_config.toml @@ -11,7 +11,7 @@ pagesBranches = ["pages"] allowedCorsDomains = [] blacklistedPaths = [] -[gitea] +[forge] root = 'https://codeberg.org' token = 'ASDF1234' lfsEnabled = true diff --git a/server/gitea/client.go b/server/gitea/client.go index 5955bfb..3abb487 100644 --- a/server/gitea/client.go +++ b/server/gitea/client.go @@ -57,12 +57,13 @@ type Client struct { defaultMimeType string } -func NewClient(cfg config.GiteaConfig, respCache cache.ICache) (*Client, error) { - rootURL, err := url.Parse(cfg.Root) +func NewClient(cfg config.ForgeConfig, respCache cache.ICache) (*Client, error) { + // url.Parse returns valid on almost anything... + rootURL, err := url.ParseRequestURI(cfg.Root) if err != nil { - return nil, err + return nil, fmt.Errorf("invalid forgejo/gitea root url: %w", err) } - giteaRoot := strings.Trim(rootURL.String(), "/") + giteaRoot := strings.TrimSuffix(rootURL.String(), "/") stdClient := http.Client{Timeout: 10 * time.Second} diff --git a/server/handler/handler_test.go b/server/handler/handler_test.go index 4cb859a..0ae7962 100644 --- a/server/handler/handler_test.go +++ b/server/handler/handler_test.go @@ -13,7 +13,7 @@ import ( ) func TestHandlerPerformance(t *testing.T) { - cfg := config.GiteaConfig{ + cfg := config.ForgeConfig{ Root: "https://codeberg.org", Token: "", LFSEnabled: false, diff --git a/server/startup.go b/server/startup.go index fd89803..95c3c5c 100644 --- a/server/startup.go +++ b/server/startup.go @@ -77,7 +77,7 @@ func Serve(ctx *cli.Context) error { // clientResponseCache stores responses from the Gitea server clientResponseCache := cache.NewInMemoryCache() - giteaClient, err := gitea.NewClient(cfg.Gitea, clientResponseCache) + giteaClient, err := gitea.NewClient(cfg.Forge, clientResponseCache) if err != nil { return fmt.Errorf("could not create new gitea client: %v", err) }