diff --git a/act_runner-darwin-amd64 b/act_runner-darwin-amd64 index e744903..c3668f3 100755 Binary files a/act_runner-darwin-amd64 and b/act_runner-darwin-amd64 differ diff --git a/act_runner-darwin-arm64 b/act_runner-darwin-arm64 new file mode 100755 index 0000000..5998f4c Binary files /dev/null and b/act_runner-darwin-arm64 differ diff --git a/act_runner-linux-amd64 b/act_runner-linux-amd64 new file mode 100755 index 0000000..66869d0 Binary files /dev/null and b/act_runner-linux-amd64 differ diff --git a/act_runner-windows-amd64.exe b/act_runner-windows-amd64.exe index 2bffbc0..17d1cf0 100755 Binary files a/act_runner-windows-amd64.exe and b/act_runner-windows-amd64.exe differ diff --git a/internal/app/run/runner.go b/internal/app/run/runner.go index 36b3fd8..e590818 100644 --- a/internal/app/run/runner.go +++ b/internal/app/run/runner.go @@ -242,19 +242,30 @@ func (r *Runner) run(ctx context.Context, task *runnerv1.Task, reporter *report. maxLifetime = time.Until(deadline) } + // Create job-specific environment with isolated cache directories + jobCacheDir := r.getJobCacheDir(task.Id) + jobEnvs := make(map[string]string, len(r.envs)+2) + for k, v := range r.envs { + jobEnvs[k] = v + } + // Isolate golangci-lint cache to prevent parallel job conflicts + jobEnvs["GOLANGCI_LINT_CACHE"] = filepath.Join(jobCacheDir, "golangci-lint") + // Set XDG_CACHE_HOME to isolate other tools that respect it + jobEnvs["XDG_CACHE_HOME"] = jobCacheDir + runnerConfig := &runner.Config{ // On Linux, Workdir will be like "///" // On Windows, Workdir will be like "\\\" Workdir: filepath.FromSlash(fmt.Sprintf("/%s/%s", strings.TrimLeft(r.cfg.Container.WorkdirParent, "/"), preset.Repository)), BindWorkdir: false, - ActionCacheDir: filepath.FromSlash(r.getJobCacheDir(task.Id)), + ActionCacheDir: filepath.FromSlash(jobCacheDir), ReuseContainers: false, ForcePull: r.cfg.Container.ForcePull, ForceRebuild: r.cfg.Container.ForceRebuild, LogOutput: true, JSONLogger: false, - Env: r.envs, + Env: jobEnvs, Secrets: task.Secrets, GitHubInstance: strings.TrimSuffix(r.client.Address(), "/"), AutoRemove: true,