Files
buildx/util/ghutil/ghutil.go
T

146 lines
5.6 KiB
Go

package ghutil
import (
"encoding/json"
"os"
"strconv"
"github.com/pkg/errors"
)
func GithubActionsContext() ([]byte, error) {
m := make(map[string]any)
// Detect if running in GitHub Actions
// "GITHUB_ACTIONS": "true"
if gha, ok := os.LookupEnv("GITHUB_ACTIONS"); !ok {
return nil, nil
} else if v, _ := strconv.ParseBool(gha); !v {
return nil, nil
}
// Skip if required event information is not available
githubEventName := os.Getenv("GITHUB_EVENT_NAME")
githubEventPath := os.Getenv("GITHUB_EVENT_PATH")
if githubEventName == "" || githubEventPath == "" {
return nil, nil
}
// GitHub event
// "GITHUB_EVENT_NAME": "push"
// "GITHUB_EVENT_PATH": "/home/runner/work/_temp/_github_workflow/event.json"
m["github_event_name"] = githubEventName
dt, err := os.ReadFile(githubEventPath)
if err != nil {
return nil, errors.Wrapf(err, "failed to read GITHUB_EVENT_PATH %q", githubEventPath)
}
var evt map[string]any
if err := json.Unmarshal(dt, &evt); err != nil {
return nil, errors.Wrapf(err, "failed to unmarshal GitHub event payload from %q", githubEventPath)
}
m["github_event_payload"] = evt
// GitHub actor
// "GITHUB_ACTOR": "crazy-max"
// "GITHUB_ACTOR_ID": "1951866"
// "GITHUB_TRIGGERING_ACTOR": "crazy-max"
githubActor := os.Getenv("GITHUB_ACTOR")
githubActorID := os.Getenv("GITHUB_ACTOR_ID")
githubTriggeringActor := os.Getenv("GITHUB_TRIGGERING_ACTOR")
if githubActor != "" && githubActorID != "" && githubTriggeringActor != "" {
m["github_actor"] = githubActor
m["github_actor_id"] = githubActorID
m["github_triggering_actor"] = githubTriggeringActor
}
// GitHub ref
// "GITHUB_REF": "refs/heads/master"
// "GITHUB_REF_NAME": "master"
// "GITHUB_REF_PROTECTED": "true"
// "GITHUB_REF_TYPE": "branch"
githubRef := os.Getenv("GITHUB_REF")
githubRefName := os.Getenv("GITHUB_REF_NAME")
githubRefProtected := os.Getenv("GITHUB_REF_PROTECTED")
githubRefType := os.Getenv("GITHUB_REF_TYPE")
if githubRef != "" && githubRefName != "" && githubRefProtected != "" && githubRefType != "" {
m["github_ref"] = githubRef
m["github_ref_name"] = githubRefName
m["github_ref_protected"] = githubRefProtected
m["github_ref_type"] = githubRefType
}
// GitHub repository
// "GITHUB_REPOSITORY": "crazy-max/ghaction-dump-context"
// "GITHUB_REPOSITORY_ID": "286865579"
// "GITHUB_REPOSITORY_OWNER": "crazy-max"
// "GITHUB_REPOSITORY_OWNER_ID": "1951866"
githubRepository := os.Getenv("GITHUB_REPOSITORY")
githubRepositoryID := os.Getenv("GITHUB_REPOSITORY_ID")
githubRepositoryOwner := os.Getenv("GITHUB_REPOSITORY_OWNER")
githubRepositoryOwnerID := os.Getenv("GITHUB_REPOSITORY_OWNER_ID")
if githubRepository != "" && githubRepositoryID != "" && githubRepositoryOwner != "" && githubRepositoryOwnerID != "" {
m["github_repository"] = githubRepository
m["github_repository_id"] = githubRepositoryID
m["github_repository_owner"] = githubRepositoryOwner
m["github_repository_owner_id"] = githubRepositoryOwnerID
}
// GitHub workflow
// "GITHUB_JOB": "dump"
// "GITHUB_RUN_ATTEMPT": "1"
// "GITHUB_RUN_ID": "18715517508"
// "GITHUB_RUN_NUMBER": "617"
// "GITHUB_SERVER_URL": "https://github.com"
// "GITHUB_WORKFLOW": "ci"
// "GITHUB_WORKFLOW_REF": "crazy-max/ghaction-dump-context/.github/workflows/ci.yml@refs/heads/master"
// "GITHUB_WORKFLOW_SHA": "391d493f5fb04040f2a2770b33f86f3f62518392"
githubJob := os.Getenv("GITHUB_JOB")
githubRunAttempt := os.Getenv("GITHUB_RUN_ATTEMPT")
githubRunID := os.Getenv("GITHUB_RUN_ID")
githubRunNumber := os.Getenv("GITHUB_RUN_NUMBER")
githubServerURL := os.Getenv("GITHUB_SERVER_URL")
githubWorkflow := os.Getenv("GITHUB_WORKFLOW")
githubWorkflowRef := os.Getenv("GITHUB_WORKFLOW_REF")
githubWorkflowSHA := os.Getenv("GITHUB_WORKFLOW_SHA")
if githubJob != "" && githubRunAttempt != "" && githubRunID != "" && githubRunNumber != "" && githubServerURL != "" && githubWorkflow != "" && githubWorkflowRef != "" && githubWorkflowSHA != "" {
m["github_job"] = githubJob
m["github_run_attempt"] = githubRunAttempt
m["github_run_id"] = githubRunID
m["github_run_number"] = githubRunNumber
m["github_server_url"] = githubServerURL
m["github_workflow"] = githubWorkflow
m["github_workflow_ref"] = githubWorkflowRef
m["github_workflow_sha"] = githubWorkflowSHA
}
// GitHub runner information
// "ImageOS": "ubuntu24"
// "ImageVersion": "20250929.60.1"
// "RUNNER_ARCH": "X64"
// "RUNNER_ENVIRONMENT": "github-hosted"
// "RUNNER_NAME": "GitHub Actions 1000091440"
// "RUNNER_OS": "Linux"
// "RUNNER_TEMP": "/home/runner/work/_temp"
// "RUNNER_TOOL_CACHE": "/opt/hostedtoolcache"
// "RUNNER_TRACKING_ID": "github_7bd1d852-eaeb-423f-8fa4-4ddb797c652f"
// "RUNNER_WORKSPACE": "/home/runner/work/ghaction-dump-context"
githubRunnerImageOS := os.Getenv("ImageOS")
githubRunnerImageVersion := os.Getenv("ImageVersion")
githubRunnerOS := os.Getenv("RUNNER_OS")
githubRunnerArch := os.Getenv("RUNNER_ARCH")
githubRunnerEnvironment := os.Getenv("RUNNER_ENVIRONMENT")
githubRunnerTrackingID := os.Getenv("RUNNER_TRACKING_ID")
githubRunnerName := os.Getenv("RUNNER_NAME")
if githubRunnerImageOS != "" && githubRunnerImageVersion != "" && githubRunnerOS != "" && githubRunnerArch != "" && githubRunnerEnvironment != "" && githubRunnerTrackingID != "" && githubRunnerName != "" {
m["github_runner_image_os"] = githubRunnerImageOS
m["github_runner_image_version"] = githubRunnerImageVersion
m["github_runner_os"] = githubRunnerOS
m["github_runner_arch"] = githubRunnerArch
m["github_runner_environment"] = githubRunnerEnvironment
m["github_runner_tracking_id"] = githubRunnerTrackingID
m["github_runner_name"] = githubRunnerName
}
return json.Marshal(m)
}