From 422cbdf446da2b593301c099b28f48eb8acb3a10 Mon Sep 17 00:00:00 2001 From: Marius Zwicker Date: Fri, 16 Jun 2023 03:41:39 +0000 Subject: [PATCH] Allow to override location of action cache dir (#65) Adds an explicit config option to specify the directory below which action contents will be cached. If left empty the previous location at `$XDG_CACHE_HOME/act` or `$HOME/.cache/act` will be used respectively. Required to resolve gitea/act_runner#235 Co-authored-by: Marius Zwicker Reviewed-on: https://gitea.com/gitea/act/pulls/65 Reviewed-by: Jason Song Co-authored-by: Marius Zwicker Co-committed-by: Marius Zwicker --- cmd/input.go | 1 + cmd/root.go | 2 ++ pkg/runner/run_context.go | 3 +++ pkg/runner/runner.go | 1 + 4 files changed, 7 insertions(+) diff --git a/cmd/input.go b/cmd/input.go index 954018f..64556e1 100644 --- a/cmd/input.go +++ b/cmd/input.go @@ -54,6 +54,7 @@ type Input struct { replaceGheActionWithGithubCom []string replaceGheActionTokenWithGithubCom string matrix []string + actionCachePath string } func (i *Input) resolve(path string) string { diff --git a/cmd/root.go b/cmd/root.go index ba1f31d..59a571e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -94,6 +94,7 @@ func Execute(ctx context.Context, version string) { rootCmd.PersistentFlags().StringVarP(&input.cacheServerPath, "cache-server-path", "", filepath.Join(CacheHomeDir, "actcache"), "Defines the path where the cache server stores caches.") rootCmd.PersistentFlags().StringVarP(&input.cacheServerAddr, "cache-server-addr", "", common.GetOutboundIP().String(), "Defines the address to which the cache server binds.") rootCmd.PersistentFlags().Uint16VarP(&input.cacheServerPort, "cache-server-port", "", 0, "Defines the port where the artifact server listens. 0 means a randomly available port.") + rootCmd.PersistentFlags().StringVarP(&input.actionCachePath, "action-cache-path", "", filepath.Join(CacheHomeDir, "act"), "Defines the path where the actions get cached and host workspaces created.") rootCmd.SetArgs(args()) if err := rootCmd.Execute(); err != nil { @@ -580,6 +581,7 @@ func newRunCommand(ctx context.Context, input *Input) func(*cobra.Command, []str ForceRebuild: input.forceRebuild, ReuseContainers: input.reuseContainers, Workdir: input.Workdir(), + ActionCacheDir: input.actionCachePath, BindWorkdir: input.bindWorkdir, LogOutput: !input.noOutput, JSONLogger: input.jsonLogger, diff --git a/pkg/runner/run_context.go b/pkg/runner/run_context.go index 3a5175e..4f2d43c 100644 --- a/pkg/runner/run_context.go +++ b/pkg/runner/run_context.go @@ -512,6 +512,9 @@ func (rc *RunContext) stopServiceContainers() common.Executor { // ActionCacheDir is for rc func (rc *RunContext) ActionCacheDir() string { + if rc.Config.ActionCacheDir != "" { + return rc.Config.ActionCacheDir + } var xdgCache string var ok bool if xdgCache, ok = os.LookupEnv("XDG_CACHE_HOME"); !ok || xdgCache == "" { diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index 55a71ef..98b43d4 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -24,6 +24,7 @@ type Runner interface { type Config struct { Actor string // the user that triggered the event Workdir string // path to working directory + ActionCacheDir string // path used for caching action contents BindWorkdir bool // bind the workdir to the job container EventName string // name of event to run EventPath string // path to JSON file to use for event.json in containers