mirror of
https://gitea.com/gitea/act
synced 2026-05-01 01:27:48 +02:00
Interpolate uses for remote reusable workflows (#145)
Related to #127 Reviewed-on: https://gitea.com/gitea/act/pulls/145 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: ChristopherHX <christopherhx@noreply.gitea.com> Co-authored-by: Zettat123 <zettat123@gmail.com> Co-committed-by: Zettat123 <zettat123@gmail.com>
This commit is contained in:
@@ -142,12 +142,14 @@ func cloneIfRequired(rc *RunContext, remoteReusableWorkflow remoteReusableWorkfl
|
|||||||
return notExists
|
return notExists
|
||||||
},
|
},
|
||||||
func(ctx context.Context) error {
|
func(ctx context.Context) error {
|
||||||
|
// interpolate the cloneURL
|
||||||
|
cloneURL := rc.NewExpressionEvaluator(ctx).Interpolate(ctx, remoteReusableWorkflow.CloneURL())
|
||||||
// Do not change the remoteReusableWorkflow.URL, because:
|
// Do not change the remoteReusableWorkflow.URL, because:
|
||||||
// 1. Gitea doesn't support specifying GithubContext.ServerURL by the GITHUB_SERVER_URL env
|
// 1. Gitea doesn't support specifying GithubContext.ServerURL by the GITHUB_SERVER_URL env
|
||||||
// 2. Gitea has already full URL with rc.Config.GitHubInstance when calling newRemoteReusableWorkflowWithPlat
|
// 2. Gitea has already full URL with rc.Config.GitHubInstance when calling newRemoteReusableWorkflowWithPlat
|
||||||
// remoteReusableWorkflow.URL = rc.getGithubContext(ctx).ServerURL
|
// remoteReusableWorkflow.URL = rc.getGithubContext(ctx).ServerURL
|
||||||
return git.NewGitCloneExecutor(git.NewGitCloneExecutorInput{
|
return git.NewGitCloneExecutor(git.NewGitCloneExecutorInput{
|
||||||
URL: remoteReusableWorkflow.CloneURL(),
|
URL: cloneURL,
|
||||||
Ref: remoteReusableWorkflow.Ref,
|
Ref: remoteReusableWorkflow.Ref,
|
||||||
Dir: targetDirectory,
|
Dir: targetDirectory,
|
||||||
Token: token,
|
Token: token,
|
||||||
@@ -321,23 +323,28 @@ func setReusedWorkflowCallerResult(rc *RunContext, runner Runner) common.Executo
|
|||||||
}
|
}
|
||||||
|
|
||||||
// For Gitea
|
// For Gitea
|
||||||
// getGitCloneToken returns GITEA_TOKEN when checkCloneURL returns true,
|
// getGitCloneToken returns GITEA_TOKEN when shouldCloneURLUseToken returns true,
|
||||||
// otherwise returns an empty string
|
// otherwise returns an empty string
|
||||||
func getGitCloneToken(conf *Config, cloneURL string) string {
|
func getGitCloneToken(conf *Config, cloneURL string) string {
|
||||||
if !checkCloneURL(conf.GitHubInstance, cloneURL) {
|
if !shouldCloneURLUseToken(conf.GitHubInstance, cloneURL) {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return conf.GetToken()
|
return conf.GetToken()
|
||||||
}
|
}
|
||||||
|
|
||||||
// For Gitea
|
// For Gitea
|
||||||
// checkCloneURL returns true when the cloneURL is from the same Gitea instance that the runner is registered to
|
// shouldCloneURLUseToken returns true when the following conditions are met:
|
||||||
func checkCloneURL(instanceURL, cloneURL string) bool {
|
// 1. cloneURL is from the same Gitea instance that the runner is registered to
|
||||||
|
// 2. the cloneURL does not have basic auth embedded
|
||||||
|
func shouldCloneURLUseToken(instanceURL, cloneURL string) bool {
|
||||||
u1, err1 := url.Parse(instanceURL)
|
u1, err1 := url.Parse(instanceURL)
|
||||||
u2, err2 := url.Parse(cloneURL)
|
u2, err2 := url.Parse(cloneURL)
|
||||||
if err1 != nil || err2 != nil {
|
if err1 != nil || err2 != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if u2.User != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
return u1.Host == u2.Host
|
return u1.Host == u2.Host
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user