[CI] DEFAULT_ACTIONS_URL support for self & github (squash)

Refs: https://codeberg.org/forgejo/forgejo/issues/1062
This commit is contained in:
Loïc Dachary 2023-07-19 14:06:28 +02:00
parent 2dad7ef20f
commit 74cc25376e
No known key found for this signature in database
GPG key ID: 992D23B392F9E4F2
3 changed files with 84 additions and 3 deletions

View file

@ -5,6 +5,7 @@ package setting
import ( import (
"fmt" "fmt"
"strings"
) )
// Actions settings // Actions settings
@ -13,13 +14,32 @@ var (
LogStorage *Storage // how the created logs should be stored LogStorage *Storage // how the created logs should be stored
ArtifactStorage *Storage // how the created artifacts should be stored ArtifactStorage *Storage // how the created artifacts should be stored
Enabled bool Enabled bool
DefaultActionsURL string `ini:"DEFAULT_ACTIONS_URL"` DefaultActionsURL defaultActionsURL `ini:"DEFAULT_ACTIONS_URL"`
}{ }{
Enabled: false, Enabled: false,
DefaultActionsURL: "https://code.forgejo.org", DefaultActionsURL: defaultActionsURLForgejo,
} }
) )
type defaultActionsURL string
func (url defaultActionsURL) URL() string {
switch url {
case defaultActionsURLGitHub:
return "https://github.com"
case defaultActionsURLSelf:
return strings.TrimSuffix(AppURL, "/")
default:
return string(url)
}
}
const (
defaultActionsURLForgejo = "https://code.forgejo.org"
defaultActionsURLGitHub = "github" // https://github.com
defaultActionsURLSelf = "self" // the root URL of the self-hosted instance
)
func loadActionsFrom(rootCfg ConfigProvider) error { func loadActionsFrom(rootCfg ConfigProvider) error {
sec := rootCfg.Section("actions") sec := rootCfg.Section("actions")
err := sec.MapTo(&Actions) err := sec.MapTo(&Actions)

View file

@ -8,6 +8,7 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
) )
func Test_getStorageInheritNameSectionTypeForActions(t *testing.T) { func Test_getStorageInheritNameSectionTypeForActions(t *testing.T) {
@ -95,3 +96,63 @@ STORAGE_TYPE = minio
assert.EqualValues(t, "local", Actions.ArtifactStorage.Type) assert.EqualValues(t, "local", Actions.ArtifactStorage.Type)
assert.EqualValues(t, "actions_artifacts", filepath.Base(Actions.ArtifactStorage.Path)) assert.EqualValues(t, "actions_artifacts", filepath.Base(Actions.ArtifactStorage.Path))
} }
func Test_getDefaultActionsURLForActions(t *testing.T) {
oldActions := Actions
oldAppURL := AppURL
defer func() {
Actions = oldActions
AppURL = oldAppURL
}()
AppURL = "http://test_get_default_actions_url_for_actions:3000/"
tests := []struct {
name string
iniStr string
wantURL string
}{
{
name: "default",
iniStr: `
[actions]
`,
wantURL: "https://code.forgejo.org",
},
{
name: "github",
iniStr: `
[actions]
DEFAULT_ACTIONS_URL = github
`,
wantURL: "https://github.com",
},
{
name: "self",
iniStr: `
[actions]
DEFAULT_ACTIONS_URL = self
`,
wantURL: "http://test_get_default_actions_url_for_actions:3000",
},
{
name: "custom urls",
iniStr: `
[actions]
DEFAULT_ACTIONS_URL = https://example.com
`,
wantURL: "https://example.com",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg, err := NewConfigProviderFromData(tt.iniStr)
require.NoError(t, err)
if !assert.NoError(t, loadActionsFrom(cfg)) {
return
}
assert.EqualValues(t, tt.wantURL, Actions.DefaultActionsURL.URL())
})
}
}

View file

@ -184,7 +184,7 @@ func generateTaskContext(t *actions_model.ActionTask) *structpb.Struct {
"workspace": "", // string, The default working directory on the runner for steps, and the default location of your repository when using the checkout action. "workspace": "", // string, The default working directory on the runner for steps, and the default location of your repository when using the checkout action.
// additional contexts // additional contexts
"gitea_default_actions_url": setting.Actions.DefaultActionsURL, "gitea_default_actions_url": setting.Actions.DefaultActionsURL.URL(),
}) })
if err != nil { if err != nil {
log.Error("structpb.NewStruct failed: %v", err) log.Error("structpb.NewStruct failed: %v", err)