diff options
author | sillyguodong <33891828+sillyguodong@users.noreply.github.com> | 2024-03-08 14:14:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-08 06:14:35 +0000 |
commit | a1f5dd767729e30d07ab42fda80c19f30a72679f (patch) | |
tree | 1b6fb1601940d7984607a67f2be7abe21ff889d6 /models/actions | |
parent | c8f4897f7f5de5b391be806f4738de1f0d9c4c09 (diff) | |
download | gitea-a1f5dd767729e30d07ab42fda80c19f30a72679f.tar.gz gitea-a1f5dd767729e30d07ab42fda80c19f30a72679f.zip |
Make runs-on support variable expression (#29468)
As title.
Close issue: https://gitea.com/gitea/act_runner/issues/445
Follow: https://gitea.com/gitea/act/pulls/91
Move `getSecretsOfTask` and `getVariablesOfTask` under `models` because
of circular dependency issues.
Diffstat (limited to 'models/actions')
-rw-r--r-- | models/actions/variable.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/models/actions/variable.go b/models/actions/variable.go index 12717e0ae4..14ded60fac 100644 --- a/models/actions/variable.go +++ b/models/actions/variable.go @@ -10,6 +10,7 @@ import ( "strings" "code.gitea.io/gitea/models/db" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" @@ -82,3 +83,35 @@ func UpdateVariable(ctx context.Context, variable *ActionVariable) (bool, error) }) return count != 0, err } + +func GetVariablesOfRun(ctx context.Context, run *ActionRun) (map[string]string, error) { + variables := map[string]string{} + + // Global + globalVariables, err := db.Find[ActionVariable](ctx, FindVariablesOpts{}) + if err != nil { + log.Error("find global variables: %v", err) + return nil, err + } + + // Org / User level + ownerVariables, err := db.Find[ActionVariable](ctx, FindVariablesOpts{OwnerID: run.Repo.OwnerID}) + if err != nil { + log.Error("find variables of org: %d, error: %v", run.Repo.OwnerID, err) + return nil, err + } + + // Repo level + repoVariables, err := db.Find[ActionVariable](ctx, FindVariablesOpts{RepoID: run.RepoID}) + if err != nil { + log.Error("find variables of repo: %d, error: %v", run.RepoID, err) + return nil, err + } + + // Level precedence: Repo > Org / User > Global + for _, v := range append(globalVariables, append(ownerVariables, repoVariables...)...) { + variables[v.Name] = v.Data + } + + return variables, nil +} |