mirror of
				https://gitea.com/gitea/act_runner.git
				synced 2025-11-04 06:38:55 +01:00 
			
		
		
		
	Add parent directory for working directory (#154)
Fixes #145 At present, the working directory of a work flow is a path like `/<owner>/<repo>`, so the directory may conflict with system directory like `/usr/bin`. We need to add a parent directory for the working directory. In this PR, the parent directory is `/workspace` by default and users could configure it by the `workdir_parent` option. This change doesn't affect the host mode because in host mode the working directory will always be in `$HOME/.cache/act/` directory. Co-authored-by: Jason Song <i@wolfogre.com> Reviewed-on: https://gitea.com/gitea/act_runner/pulls/154 Reviewed-by: Jason Song <i@wolfogre.com> Co-authored-by: Zettat123 <zettat123@gmail.com> Co-committed-by: Zettat123 <zettat123@gmail.com>
This commit is contained in:
		@@ -166,9 +166,9 @@ func (r *Runner) run(ctx context.Context, task *runnerv1.Task, reporter *report.
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	runnerConfig := &runner.Config{
 | 
			
		||||
		// On Linux, Workdir will be like "/<owner>/<repo>"
 | 
			
		||||
		// On Windows, Workdir will be like "\<owner>\<repo>"
 | 
			
		||||
		Workdir:     filepath.FromSlash(string(filepath.Separator) + preset.Repository),
 | 
			
		||||
		// On Linux, Workdir will be like "/<parent_directory>/<owner>/<repo>"
 | 
			
		||||
		// On Windows, Workdir will be like "\<parent_directory>\<owner>\<repo>"
 | 
			
		||||
		Workdir:     filepath.FromSlash(fmt.Sprintf("/%s/%s", r.cfg.Container.WorkdirParent, preset.Repository)),
 | 
			
		||||
		BindWorkdir: false,
 | 
			
		||||
 | 
			
		||||
		ReuseContainers:       false,
 | 
			
		||||
 
 | 
			
		||||
@@ -48,3 +48,6 @@ container:
 | 
			
		||||
  privileged: false
 | 
			
		||||
  # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway).
 | 
			
		||||
  options:
 | 
			
		||||
  # The parent directory of a job's working directory.
 | 
			
		||||
  # If it's empty, /workspace will be used.
 | 
			
		||||
  workdir_parent:
 | 
			
		||||
 
 | 
			
		||||
@@ -34,9 +34,10 @@ type Config struct {
 | 
			
		||||
		Port    uint16 `yaml:"port"`
 | 
			
		||||
	} `yaml:"cache"`
 | 
			
		||||
	Container struct {
 | 
			
		||||
		NetworkMode string `yaml:"network_mode"`
 | 
			
		||||
		Privileged  bool   `yaml:"privileged"`
 | 
			
		||||
		Options     string `yaml:"options"`
 | 
			
		||||
		NetworkMode   string `yaml:"network_mode"`
 | 
			
		||||
		Privileged    bool   `yaml:"privileged"`
 | 
			
		||||
		Options       string `yaml:"options"`
 | 
			
		||||
		WorkdirParent string `yaml:"workdir_parent"`
 | 
			
		||||
	} `yaml:"container"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -94,6 +95,9 @@ func LoadDefault(file string) (*Config, error) {
 | 
			
		||||
	if cfg.Container.NetworkMode == "" {
 | 
			
		||||
		cfg.Container.NetworkMode = "bridge"
 | 
			
		||||
	}
 | 
			
		||||
	if cfg.Container.WorkdirParent == "" {
 | 
			
		||||
		cfg.Container.WorkdirParent = "workspace"
 | 
			
		||||
	}
 | 
			
		||||
	if cfg.Runner.FetchTimeout <= 0 {
 | 
			
		||||
		cfg.Runner.FetchTimeout = 5 * time.Second
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user