From 65c232c4a5a40e59e257ab5d956b32585f0405d7 Mon Sep 17 00:00:00 2001 From: Jack Jackson Date: Mon, 24 Mar 2025 18:17:06 +0000 Subject: [PATCH] Parse permissions (#133) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resurrecting [this PR](https://gitea.com/gitea/act/pulls/73) as the original author has [lost motivation](https://github.com/go-gitea/gitea/pull/25664#issuecomment-2737099259) (though, to be clear - all credit belongs to them, all mistakes are mine and mine alone!) Co-authored-by: Søren L. Hansen Reviewed-on: https://gitea.com/gitea/act/pulls/133 Reviewed-by: Lunny Xiao Co-authored-by: Jack Jackson Co-committed-by: Jack Jackson --- pkg/jobparser/jobparser.go | 9 +++++---- pkg/jobparser/model.go | 13 ++++++++----- pkg/model/workflow.go | 17 +++++++++-------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/pkg/jobparser/jobparser.go b/pkg/jobparser/jobparser.go index eb23dbd..0aadc18 100644 --- a/pkg/jobparser/jobparser.go +++ b/pkg/jobparser/jobparser.go @@ -60,10 +60,11 @@ func Parse(content []byte, options ...ParseOption) ([]*SingleWorkflow, error) { } job.RawRunsOn = encodeRunsOn(runsOn) swf := &SingleWorkflow{ - Name: workflow.Name, - RawOn: workflow.RawOn, - Env: workflow.Env, - Defaults: workflow.Defaults, + Name: workflow.Name, + RawOn: workflow.RawOn, + Env: workflow.Env, + Defaults: workflow.Defaults, + RawPermissions: workflow.RawPermissions, } if err := swf.SetJob(id, job); err != nil { return nil, fmt.Errorf("SetJob: %w", err) diff --git a/pkg/jobparser/model.go b/pkg/jobparser/model.go index e823bca..aebe8ee 100644 --- a/pkg/jobparser/model.go +++ b/pkg/jobparser/model.go @@ -10,11 +10,12 @@ import ( // SingleWorkflow is a workflow with single job and single matrix type SingleWorkflow struct { - Name string `yaml:"name,omitempty"` - RawOn yaml.Node `yaml:"on,omitempty"` - Env map[string]string `yaml:"env,omitempty"` - RawJobs yaml.Node `yaml:"jobs,omitempty"` - Defaults Defaults `yaml:"defaults,omitempty"` + Name string `yaml:"name,omitempty"` + RawOn yaml.Node `yaml:"on,omitempty"` + Env map[string]string `yaml:"env,omitempty"` + RawJobs yaml.Node `yaml:"jobs,omitempty"` + Defaults Defaults `yaml:"defaults,omitempty"` + RawPermissions yaml.Node `yaml:"permissions,omitempty"` } func (w *SingleWorkflow) Job() (string, *Job) { @@ -84,6 +85,7 @@ type Job struct { With map[string]interface{} `yaml:"with,omitempty"` RawSecrets yaml.Node `yaml:"secrets,omitempty"` RawConcurrency *model.RawConcurrency `yaml:"concurrency,omitempty"` + RawPermissions yaml.Node `yaml:"permissions,omitempty"` } func (j *Job) Clone() *Job { @@ -107,6 +109,7 @@ func (j *Job) Clone() *Job { With: j.With, RawSecrets: j.RawSecrets, RawConcurrency: j.RawConcurrency, + RawPermissions: j.RawPermissions, } } diff --git a/pkg/model/workflow.go b/pkg/model/workflow.go index f2ba70a..e3bae9b 100644 --- a/pkg/model/workflow.go +++ b/pkg/model/workflow.go @@ -17,14 +17,14 @@ import ( // Workflow is the structure of the files in .github/workflows type Workflow struct { - File string - Name string `yaml:"name"` - RawOn yaml.Node `yaml:"on"` - Env map[string]string `yaml:"env"` - Jobs map[string]*Job `yaml:"jobs"` - Defaults Defaults `yaml:"defaults"` - - RawConcurrency *RawConcurrency `yaml:"concurrency"` // For Gitea + File string + Name string `yaml:"name"` + RawOn yaml.Node `yaml:"on"` + Env map[string]string `yaml:"env"` + Jobs map[string]*Job `yaml:"jobs"` + Defaults Defaults `yaml:"defaults"` + RawConcurrency *RawConcurrency `yaml:"concurrency"` + RawPermissions yaml.Node `yaml:"permissions"` } // On events for the workflow @@ -201,6 +201,7 @@ type Job struct { Uses string `yaml:"uses"` With map[string]interface{} `yaml:"with"` RawSecrets yaml.Node `yaml:"secrets"` + RawPermissions yaml.Node `yaml:"permissions"` Result string }