refactor(cmd/joj3): use getter/setter in env
All checks were successful
submodules sync / sync (push) Successful in 41s
build / build (push) Successful in 2m30s
build / trigger-build-image (push) Successful in 12s

This commit is contained in:
张泊明518370910136 2025-07-01 21:27:30 -04:00
parent 439e64be0c
commit 3bd89e9aa5
GPG Key ID: D47306D7062CDA9D
3 changed files with 82 additions and 90 deletions

75
cmd/joj3/env/env.go vendored
View File

@ -1,9 +1,9 @@
// Package env stores the environment variables from actions environment.
package env
import (
"fmt"
"os"
"sync"
"time"
)
@ -14,28 +14,21 @@ const (
CommitMsg = "JOJ3_COMMIT_MSG"
ForceQuitStageName = "JOJ3_FORCE_QUIT_STAGE_NAME"
OutputPath = "JOJ3_OUTPUT_PATH"
GitHubActor = "GITHUB_ACTOR"
GitHubRepository = "GITHUB_REPOSITORY"
GitHubSha = "GITHUB_SHA"
GitHubRef = "GITHUB_REF"
GitHubWorkflow = "GITHUB_WORKFLOW"
GitHubRunNumber = "GITHUB_RUN_NUMBER"
)
type Attribute struct {
ConfName string
CommitMsg string
Groups string
RunID string
Actor string
Repository string
Sha string
Ref string
Workflow string
RunNumber string
ActorName string
ActorID string
ForceQuitStageName string
OutputPath string
}
var (
runIDOnce sync.Once
runID string
)
var Attr Attribute
func init() {
func generateRunID() string {
timestamp := time.Now().UnixNano()
pid := os.Getpid()
high := timestamp >> 32
@ -45,20 +38,34 @@ func init() {
combined ^= timestamp >> 16
combined ^= (combined >> 8)
combined ^= (combined << 16)
Attr.RunID = fmt.Sprintf("%08X", combined&0xFFFFFFFF)
Attr.Actor = os.Getenv("GITHUB_ACTOR")
Attr.Repository = os.Getenv("GITHUB_REPOSITORY")
Attr.Sha = os.Getenv("GITHUB_SHA")
Attr.Ref = os.Getenv("GITHUB_REF")
Attr.Workflow = os.Getenv("GITHUB_WORKFLOW")
Attr.RunNumber = os.Getenv("GITHUB_RUN_NUMBER")
return fmt.Sprintf("%08X", combined&0xFFFFFFFF)
}
func Set() {
os.Setenv(ConfName, Attr.ConfName)
os.Setenv(Groups, Attr.Groups)
os.Setenv(RunID, Attr.RunID)
os.Setenv(CommitMsg, Attr.CommitMsg)
os.Setenv(ForceQuitStageName, Attr.ForceQuitStageName)
os.Setenv(OutputPath, Attr.OutputPath)
func GetRunID() string {
if val := os.Getenv(RunID); val != "" {
return val
}
runIDOnce.Do(func() {
runID = generateRunID()
})
return runID
}
func GetConfName() string { return os.Getenv(ConfName) }
func GetGroups() string { return os.Getenv(Groups) }
func GetCommitMsg() string { return os.Getenv(CommitMsg) }
func GetForceQuitStageName() string { return os.Getenv(ForceQuitStageName) }
func GetOutputPath() string { return os.Getenv(OutputPath) }
func SetRunID(val string) { os.Setenv(RunID, val) }
func SetConfName(val string) { os.Setenv(ConfName, val) }
func SetGroups(val string) { os.Setenv(Groups, val) }
func SetCommitMsg(val string) { os.Setenv(CommitMsg, val) }
func SetForceQuitStageName(val string) { os.Setenv(ForceQuitStageName, val) }
func SetOutputPath(val string) { os.Setenv(OutputPath, val) }
func GetActor() string { return os.Getenv(GitHubActor) }
func GetRepository() string { return os.Getenv(GitHubRepository) }
func GetSha() string { return os.Getenv(GitHubSha) }
func GetRef() string { return os.Getenv(GitHubRef) }
func GetWorkflow() string { return os.Getenv(GitHubWorkflow) }
func GetRunNumber() string { return os.Getenv(GitHubRunNumber) }

View File

@ -55,28 +55,16 @@ func (h *multiHandler) WithGroup(name string) slog.Handler {
return &multiHandler{handlers: handlers}
}
func newSlogAttrs(csvPath string) (attrs []slog.Attr) {
env.Attr.ActorName = fmt.Sprintf("Name(%s)", env.Attr.Actor)
env.Attr.ActorID = fmt.Sprintf("ID(%s)", env.Attr.Actor)
attrs = []slog.Attr{
slog.String("runID", env.Attr.RunID),
slog.String("confName", env.Attr.ConfName),
slog.String("actor", env.Attr.Actor),
slog.String("actorName", env.Attr.ActorName),
slog.String("actorID", env.Attr.ActorID),
slog.String("repository", env.Attr.Repository),
slog.String("sha", env.Attr.Sha),
slog.String("ref", env.Attr.Ref),
}
// if csvPath is empty, just return
if csvPath == "" {
return attrs
}
func newSlogAttrs(csvPath string) []slog.Attr {
actor := env.GetActor()
actorName := fmt.Sprintf("Name(%s)", actor)
actorID := fmt.Sprintf("ID(%s)", actor)
if csvPath != "" {
file, err := os.Open(csvPath)
if err != nil {
slog.Error("open csv", "error", err)
return attrs
}
} else {
defer file.Close()
reader := csv.NewReader(file)
for {
@ -86,29 +74,28 @@ func newSlogAttrs(csvPath string) (attrs []slog.Attr) {
}
if err != nil {
slog.Error("read csv", "error", err)
return attrs
break
}
if len(row) < 3 {
continue
if len(row) >= 3 && row[2] == actor {
actorName = row[0]
actorID = row[1]
break
}
actor := row[2]
if actor == env.Attr.Actor {
env.Attr.ActorName = row[0]
env.Attr.ActorID = row[1]
}
}
}
return []slog.Attr{
slog.String("runID", env.Attr.RunID),
slog.String("confName", env.Attr.ConfName),
slog.String("actor", env.Attr.Actor),
slog.String("actorName", env.Attr.ActorName),
slog.String("actorID", env.Attr.ActorID),
slog.String("repository", env.Attr.Repository),
slog.String("sha", env.Attr.Sha),
slog.String("ref", env.Attr.Ref),
slog.String("runID", env.GetRunID()),
slog.String("confName", env.GetConfName()),
slog.String("actor", actor),
slog.String("actorName", actorName),
slog.String("actorID", actorID),
slog.String("repository", env.GetRepository()),
slog.String("sha", env.GetSha()),
slog.String("ref", env.GetRef()),
}
}
}
return attrs
}
func setupSlog(conf *conf.Conf) error {
logPath := conf.LogPath

View File

@ -39,7 +39,7 @@ func getCommitMsg() (string, error) {
slog.Error("get commit msg", "error", err)
return "", err
}
env.Attr.CommitMsg = commitMsg
env.SetCommitMsg(commitMsg)
return commitMsg, nil
}
@ -52,8 +52,8 @@ func getConf(commitMsg string) (*joj3Conf.Conf, *joj3Conf.ConventionalCommit, er
if err != nil {
return nil, nil, err
}
env.Attr.ConfName = conf.Name
env.Attr.OutputPath = conf.Stage.OutputPath
env.SetConfName(conf.Name)
env.SetOutputPath(conf.Stage.OutputPath)
if err := showConfStat(confPath, confStat); err != nil {
return nil, nil, err
}
@ -102,14 +102,12 @@ func validateConf(conf *joj3Conf.Conf) error {
func run(conf *joj3Conf.Conf, conventionalCommit *joj3Conf.ConventionalCommit) error {
groups := joj3Conf.MatchGroups(conf, conventionalCommit)
env.Attr.Groups = strings.Join(groups, ",")
env.Set()
env.SetGroups(strings.Join(groups, ","))
_, forceQuitStageName, err := runStages(
conf,
groups,
func(stageResults []stage.StageResult, forceQuitStageName string) {
env.Attr.ForceQuitStageName = forceQuitStageName
env.Set()
env.SetForceQuitStageName(forceQuitStageName)
},
)
if err != nil {