mirror of
https://gitcode.com/gitea/gitea.git
synced 2025-12-07 15:09:37 +08:00
Use run-name and evaluate workflow variables (#34301)
This addresses https://github.com/go-gitea/gitea/issues/34247 depends on https://gitea.com/gitea/act/pulls/137 I couldn't find any previous implementation for `run-name` support on workflows so I created one. Key points: All dispatched workflows, scheduled workflows and detected workflows (from different hooks) will use and evaluate `run-name` if exists, with the corresponding gitea context and variables. This will be used as the Action run title and replace the default commit message being used today. Had to change act package jobparser (see link above) and create two helpers3a1320c70d/models/actions/utils.go (L86)and3a1320c70d/services/actions/context.go (L169)to pass the correct types to [GenerateGiteaContext](https://github.com/go-gitea/gitea/pull/34301/files#diff-9c9c27cb61a33e55ad33dc2c2e6a3521957a3e5cc50ddf652fdcd1def87b044dR86) and [WithGitContext](65c232c4a5/pkg/jobparser/jobparser.go (L84)) respectively. <img width="1336" alt="Screenshot 2025-04-28 at 17 13 01" src="https://github.com/user-attachments/assets/73cb03d0-23a0-4858-a466-bbf0748cea98" />
This commit is contained in:
@@ -15,11 +15,15 @@ import (
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/json"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
|
||||
"github.com/nektos/act/pkg/model"
|
||||
)
|
||||
|
||||
type GiteaContext map[string]any
|
||||
|
||||
// GenerateGiteaContext generate the gitea context without token and gitea_runtime_token
|
||||
// job can be nil when generating a context for parsing workflow-level expressions
|
||||
func GenerateGiteaContext(run *actions_model.ActionRun, job *actions_model.ActionRunJob) map[string]any {
|
||||
func GenerateGiteaContext(run *actions_model.ActionRun, job *actions_model.ActionRunJob) GiteaContext {
|
||||
event := map[string]any{}
|
||||
_ = json.Unmarshal([]byte(run.EventPayload), &event)
|
||||
|
||||
@@ -42,7 +46,7 @@ func GenerateGiteaContext(run *actions_model.ActionRun, job *actions_model.Actio
|
||||
|
||||
refName := git.RefName(ref)
|
||||
|
||||
gitContext := map[string]any{
|
||||
gitContext := GiteaContext{
|
||||
// standard contexts, see https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
|
||||
"action": "", // string, The name of the action currently running, or the id of a step. GitHub removes special characters, and uses the name __run when the current step runs a script without an id. If you use the same action more than once in the same job, the name will include a suffix with the sequence number with underscore before it. For example, the first script you run will have the name __run, and the second script will be named __run_2. Similarly, the second invocation of actions/checkout will be actionscheckout2.
|
||||
"action_path": "", // string, The path where an action is located. This property is only supported in composite actions. You can use this path to access files located in the same repository as the action.
|
||||
@@ -160,3 +164,37 @@ func mergeTwoOutputs(o1, o2 map[string]string) map[string]string {
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (g *GiteaContext) ToGitHubContext() *model.GithubContext {
|
||||
return &model.GithubContext{
|
||||
Event: (*g)["event"].(map[string]any),
|
||||
EventPath: (*g)["event_path"].(string),
|
||||
Workflow: (*g)["workflow"].(string),
|
||||
RunID: (*g)["run_id"].(string),
|
||||
RunNumber: (*g)["run_number"].(string),
|
||||
Actor: (*g)["actor"].(string),
|
||||
Repository: (*g)["repository"].(string),
|
||||
EventName: (*g)["event_name"].(string),
|
||||
Sha: (*g)["sha"].(string),
|
||||
Ref: (*g)["ref"].(string),
|
||||
RefName: (*g)["ref_name"].(string),
|
||||
RefType: (*g)["ref_type"].(string),
|
||||
HeadRef: (*g)["head_ref"].(string),
|
||||
BaseRef: (*g)["base_ref"].(string),
|
||||
Token: "", // deliberately omitted for security
|
||||
Workspace: (*g)["workspace"].(string),
|
||||
Action: (*g)["action"].(string),
|
||||
ActionPath: (*g)["action_path"].(string),
|
||||
ActionRef: (*g)["action_ref"].(string),
|
||||
ActionRepository: (*g)["action_repository"].(string),
|
||||
Job: (*g)["job"].(string),
|
||||
JobName: "", // not present in GiteaContext
|
||||
RepositoryOwner: (*g)["repository_owner"].(string),
|
||||
RetentionDays: (*g)["retention_days"].(string),
|
||||
RunnerPerflog: "", // not present in GiteaContext
|
||||
RunnerTrackingID: "", // not present in GiteaContext
|
||||
ServerURL: (*g)["server_url"].(string),
|
||||
APIURL: (*g)["api_url"].(string),
|
||||
GraphQLURL: (*g)["graphql_url"].(string),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user