feat: change github context parsing
This commit is contained in:
parent
7d728dcbc2
commit
6a3a41374e
3 changed files with 44 additions and 60 deletions
78
context.go
78
context.go
|
@ -2,10 +2,8 @@ package sdk
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// GitHubContext of current workflow.
|
||||
|
@ -14,7 +12,7 @@ type GitHubContext struct {
|
|||
Action string `env:"GITHUB_ACTION"`
|
||||
ActionPath string `env:"GITHUB_ACTION_PATH"`
|
||||
ActionRepository string `env:"GITHUB_ACTION_REPOSITORY"`
|
||||
Actions bool `env:"GITHUB_ACTIONS"`
|
||||
Actions string `env:"GITHUB_ACTIONS"`
|
||||
Actor string `env:"GITHUB_ACTOR"`
|
||||
APIURL string `env:"GITHUB_API_URL,default=https://api.github.com"`
|
||||
BaseRef string `env:"GITHUB_BASE_REF"`
|
||||
|
@ -27,34 +25,36 @@ type GitHubContext struct {
|
|||
Path string `env:"GITHUB_PATH"`
|
||||
Ref string `env:"GITHUB_REF"`
|
||||
RefName string `env:"GITHUB_REF_NAME"`
|
||||
RefProtected bool `env:"GITHUB_REF_PROTECTED"`
|
||||
RefProtected string `env:"GITHUB_REF_PROTECTED"`
|
||||
RefType string `env:"GITHUB_REF_TYPE"`
|
||||
|
||||
Repository string `env:"GITHUB_REPOSITORY"`
|
||||
RepositoryOwner string `env:"GITHUB_REPOSITORY_OWNER"`
|
||||
|
||||
RetentionDays int64 `env:"GITHUB_RETENTION_DAYS"`
|
||||
RunAttempt int64 `env:"GITHUB_RUN_ATTEMPT"`
|
||||
RunID int64 `env:"GITHUB_RUN_ID"`
|
||||
RunNumber int64 `env:"GITHUB_RUN_NUMBER"`
|
||||
RetentionDays string `env:"GITHUB_RETENTION_DAYS"`
|
||||
RunAttempt string `env:"GITHUB_RUN_ATTEMPT"`
|
||||
RunID string `env:"GITHUB_RUN_ID"`
|
||||
RunNumber string `env:"GITHUB_RUN_NUMBER"`
|
||||
ServerURL string `env:"GITHUB_SERVER_URL,default=https://github.com"`
|
||||
SHA string `env:"GITHUB_SHA"`
|
||||
StepSummary string `env:"GITHUB_STEP_SUMMARY"`
|
||||
Workflow string `env:"GITHUB_WORKFLOW"`
|
||||
Workspace string `env:"GITHUB_WORKSPACE"`
|
||||
|
||||
Token string `env:"GITHUB_TOKEN"`
|
||||
|
||||
// Event is populated by parsing the file at EventPath, if it exists.
|
||||
Event map[string]any
|
||||
event map[string]any
|
||||
}
|
||||
|
||||
// Context returns the context of current action with the payload object
|
||||
// that triggered the workflow
|
||||
func (c *Action) Context() (*GitHubContext, error) {
|
||||
var merr error
|
||||
func (c *Action) Context() *GitHubContext {
|
||||
context := &GitHubContext{
|
||||
APIURL: "https://api.github.com",
|
||||
GraphqlURL: "https://api.github.com/graphql",
|
||||
ServerURL: "https://github.com",
|
||||
event: map[string]any{},
|
||||
}
|
||||
|
||||
if v := c.env("GITHUB_ACTION"); v != "" {
|
||||
|
@ -66,10 +66,8 @@ func (c *Action) Context() (*GitHubContext, error) {
|
|||
if v := c.env("GITHUB_ACTION_REPOSITORY"); v != "" {
|
||||
context.ActionRepository = v
|
||||
}
|
||||
if v, err := parseBool(c.env("GITHUB_ACTIONS")); err == nil {
|
||||
if v := c.env("GITHUB_ACTIONS"); v != "" {
|
||||
context.Actions = v
|
||||
} else {
|
||||
merr = errors.Join(merr, err)
|
||||
}
|
||||
if v := c.env("GITHUB_ACTOR"); v != "" {
|
||||
context.Actor = v
|
||||
|
@ -107,41 +105,29 @@ func (c *Action) Context() (*GitHubContext, error) {
|
|||
if v := c.env("GITHUB_REF_NAME"); v != "" {
|
||||
context.RefName = v
|
||||
}
|
||||
if v, err := parseBool(c.env("GITHUB_REF_PROTECTED")); err == nil {
|
||||
if v := c.env("GITHUB_REF_PROTECTED"); v != "" {
|
||||
context.RefProtected = v
|
||||
} else {
|
||||
merr = errors.Join(merr, err)
|
||||
}
|
||||
if v := c.env("GITHUB_REF_TYPE"); v != "" {
|
||||
context.RefType = v
|
||||
}
|
||||
|
||||
if v := c.env("GITHUB_REPOSITORY"); v != "" {
|
||||
context.Repository = v
|
||||
}
|
||||
if v := c.env("GITHUB_REPOSITORY_OWNER"); v != "" {
|
||||
context.RepositoryOwner = v
|
||||
}
|
||||
|
||||
if v, err := parseInt(c.env("GITHUB_RETENTION_DAYS")); err == nil {
|
||||
if v := c.env("GITHUB_RETENTION_DAYS"); v != "" {
|
||||
context.RetentionDays = v
|
||||
} else {
|
||||
merr = errors.Join(merr, err)
|
||||
}
|
||||
if v, err := parseInt(c.env("GITHUB_RUN_ATTEMPT")); err == nil {
|
||||
if v := c.env("GITHUB_RUN_ATTEMPT"); v != "" {
|
||||
context.RunAttempt = v
|
||||
} else {
|
||||
merr = errors.Join(merr, err)
|
||||
}
|
||||
if v, err := parseInt(c.env("GITHUB_RUN_ID")); err == nil {
|
||||
if v := c.env("GITHUB_RUN_ID"); v != "" {
|
||||
context.RunID = v
|
||||
} else {
|
||||
merr = errors.Join(merr, err)
|
||||
}
|
||||
if v, err := parseInt(c.env("GITHUB_RUN_NUMBER")); err == nil {
|
||||
if v := c.env("GITHUB_RUN_NUMBER"); v != "" {
|
||||
context.RunNumber = v
|
||||
} else {
|
||||
merr = errors.Join(merr, err)
|
||||
}
|
||||
if v := c.env("GITHUB_SERVER_URL"); v != "" {
|
||||
context.ServerURL = v
|
||||
|
@ -158,32 +144,24 @@ func (c *Action) Context() (*GitHubContext, error) {
|
|||
if v := c.env("GITHUB_WORKSPACE"); v != "" {
|
||||
context.Workspace = v
|
||||
}
|
||||
if v := c.env("GITHUB_TOKEN"); v != "" {
|
||||
context.Token = v
|
||||
}
|
||||
|
||||
if context.EventPath != "" {
|
||||
eventData, err := os.ReadFile(context.EventPath)
|
||||
return context
|
||||
}
|
||||
|
||||
func (c *GitHubContext) Event() (map[string]any, error) {
|
||||
if c.EventPath != "" {
|
||||
eventData, err := os.ReadFile(c.EventPath)
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return nil, fmt.Errorf("could not read event file: %w", err)
|
||||
}
|
||||
if eventData != nil {
|
||||
if err := json.Unmarshal(eventData, &context.Event); err != nil {
|
||||
if err := json.Unmarshal(eventData, &c.event); err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal event payload: %w", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return context, merr
|
||||
}
|
||||
|
||||
func parseBool(v string) (bool, error) {
|
||||
if v == "" {
|
||||
return false, nil
|
||||
}
|
||||
return strconv.ParseBool(v)
|
||||
}
|
||||
|
||||
func parseInt(v string) (int64, error) {
|
||||
if v == "" {
|
||||
return 0, nil
|
||||
}
|
||||
return strconv.ParseInt(v, 10, 64)
|
||||
return c.event, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue