aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2023-11-01 19:17:18 +0800
committerGitHub <noreply@github.com>2023-11-01 19:17:18 +0800
commitd519a39302f38bb4dcd4174639d5699dd23f5baa (patch)
tree4941422431a0226e08a97c9c2117d7d0d81e0f09
parenta4b242ae7a3edc6302a2730a01cda5a2e76bd6b5 (diff)
downloadgitea-d519a39302f38bb4dcd4174639d5699dd23f5baa.tar.gz
gitea-d519a39302f38bb4dcd4174639d5699dd23f5baa.zip
Support storage base path as prefix (#27827)
This PR adds a prefix path for all minio storage and override base path will override the path. The previous behavior is undefined officially, so it will be marked as breaking.
-rw-r--r--modules/setting/storage.go17
-rw-r--r--modules/setting/storage_test.go53
2 files changed, 67 insertions, 3 deletions
diff --git a/modules/setting/storage.go b/modules/setting/storage.go
index cc3a2899d7..f937c7cff3 100644
--- a/modules/setting/storage.go
+++ b/modules/setting/storage.go
@@ -7,6 +7,7 @@ import (
"errors"
"fmt"
"path/filepath"
+ "strings"
)
// StorageType is a type of Storage
@@ -249,14 +250,24 @@ func getStorageForMinio(targetSec, overrideSec ConfigSection, tp targetSecType,
return nil, fmt.Errorf("map minio config failed: %v", err)
}
- if storage.MinioConfig.BasePath == "" {
- storage.MinioConfig.BasePath = name + "/"
+ var defaultPath string
+ if storage.MinioConfig.BasePath != "" {
+ if tp == targetSecIsStorage || tp == targetSecIsDefault {
+ defaultPath = strings.TrimSuffix(storage.MinioConfig.BasePath, "/") + "/" + name + "/"
+ } else {
+ defaultPath = storage.MinioConfig.BasePath
+ }
+ }
+ if defaultPath == "" {
+ defaultPath = name + "/"
}
if overrideSec != nil {
storage.MinioConfig.ServeDirect = ConfigSectionKeyBool(overrideSec, "SERVE_DIRECT", storage.MinioConfig.ServeDirect)
- storage.MinioConfig.BasePath = ConfigSectionKeyString(overrideSec, "MINIO_BASE_PATH", storage.MinioConfig.BasePath)
+ storage.MinioConfig.BasePath = ConfigSectionKeyString(overrideSec, "MINIO_BASE_PATH", defaultPath)
storage.MinioConfig.Bucket = ConfigSectionKeyString(overrideSec, "MINIO_BUCKET", storage.MinioConfig.Bucket)
+ } else {
+ storage.MinioConfig.BasePath = defaultPath
}
return &storage, nil
}
diff --git a/modules/setting/storage_test.go b/modules/setting/storage_test.go
index 20886d4c4e..6f38bf1d55 100644
--- a/modules/setting/storage_test.go
+++ b/modules/setting/storage_test.go
@@ -412,3 +412,56 @@ MINIO_USE_SSL = true
assert.EqualValues(t, true, RepoArchive.Storage.MinioConfig.UseSSL)
assert.EqualValues(t, "repo-archive/", RepoArchive.Storage.MinioConfig.BasePath)
}
+
+func Test_getStorageConfiguration28(t *testing.T) {
+ cfg, err := NewConfigProviderFromData(`
+[storage]
+STORAGE_TYPE = minio
+MINIO_ACCESS_KEY_ID = my_access_key
+MINIO_SECRET_ACCESS_KEY = my_secret_key
+MINIO_USE_SSL = true
+MINIO_BASE_PATH = /prefix
+`)
+ assert.NoError(t, err)
+ assert.NoError(t, loadRepoArchiveFrom(cfg))
+ assert.EqualValues(t, "my_access_key", RepoArchive.Storage.MinioConfig.AccessKeyID)
+ assert.EqualValues(t, "my_secret_key", RepoArchive.Storage.MinioConfig.SecretAccessKey)
+ assert.EqualValues(t, true, RepoArchive.Storage.MinioConfig.UseSSL)
+ assert.EqualValues(t, "/prefix/repo-archive/", RepoArchive.Storage.MinioConfig.BasePath)
+
+ cfg, err = NewConfigProviderFromData(`
+[storage]
+STORAGE_TYPE = minio
+MINIO_ACCESS_KEY_ID = my_access_key
+MINIO_SECRET_ACCESS_KEY = my_secret_key
+MINIO_USE_SSL = true
+MINIO_BASE_PATH = /prefix
+
+[lfs]
+MINIO_BASE_PATH = /lfs
+`)
+ assert.NoError(t, err)
+ assert.NoError(t, loadLFSFrom(cfg))
+ assert.EqualValues(t, "my_access_key", LFS.Storage.MinioConfig.AccessKeyID)
+ assert.EqualValues(t, "my_secret_key", LFS.Storage.MinioConfig.SecretAccessKey)
+ assert.EqualValues(t, true, LFS.Storage.MinioConfig.UseSSL)
+ assert.EqualValues(t, "/lfs", LFS.Storage.MinioConfig.BasePath)
+
+ cfg, err = NewConfigProviderFromData(`
+[storage]
+STORAGE_TYPE = minio
+MINIO_ACCESS_KEY_ID = my_access_key
+MINIO_SECRET_ACCESS_KEY = my_secret_key
+MINIO_USE_SSL = true
+MINIO_BASE_PATH = /prefix
+
+[storage.lfs]
+MINIO_BASE_PATH = /lfs
+`)
+ assert.NoError(t, err)
+ assert.NoError(t, loadLFSFrom(cfg))
+ assert.EqualValues(t, "my_access_key", LFS.Storage.MinioConfig.AccessKeyID)
+ assert.EqualValues(t, "my_secret_key", LFS.Storage.MinioConfig.SecretAccessKey)
+ assert.EqualValues(t, true, LFS.Storage.MinioConfig.UseSSL)
+ assert.EqualValues(t, "/lfs", LFS.Storage.MinioConfig.BasePath)
+}