Merge pull request '[CI] DEFAULT_ACTIONS_URL support for self & github (squash)' (#1070) from dachary/forgejo:wip-default-actions into forgejo-ci
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/1070
This commit is contained in:
		
						commit
						8235616970
					
				
					 3 changed files with 84 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -5,6 +5,7 @@ package setting
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Actions settings
 | 
			
		||||
| 
						 | 
				
			
			@ -13,13 +14,32 @@ var (
 | 
			
		|||
		LogStorage        *Storage // how the created logs should be stored
 | 
			
		||||
		ArtifactStorage   *Storage // how the created artifacts should be stored
 | 
			
		||||
		Enabled           bool
 | 
			
		||||
		DefaultActionsURL string `ini:"DEFAULT_ACTIONS_URL"`
 | 
			
		||||
		DefaultActionsURL defaultActionsURL `ini:"DEFAULT_ACTIONS_URL"`
 | 
			
		||||
	}{
 | 
			
		||||
		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 {
 | 
			
		||||
	sec := rootCfg.Section("actions")
 | 
			
		||||
	err := sec.MapTo(&Actions)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ import (
 | 
			
		|||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Test_getStorageInheritNameSectionTypeForActions(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,3 +96,63 @@ STORAGE_TYPE = minio
 | 
			
		|||
	assert.EqualValues(t, "local", Actions.ArtifactStorage.Type)
 | 
			
		||||
	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())
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
 | 
			
		||||
		// additional contexts
 | 
			
		||||
		"gitea_default_actions_url": setting.Actions.DefaultActionsURL,
 | 
			
		||||
		"gitea_default_actions_url": setting.Actions.DefaultActionsURL.URL(),
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error("structpb.NewStruct failed: %v", err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue