Skip to content

Commit 2699454

Browse files
committed
Create working dir after setupRepo and setupFiles
1 parent 19d926d commit 2699454

4 files changed

Lines changed: 25 additions & 11 deletions

File tree

runner/internal/executor/executor.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ func (ex *RunExecutor) Run(ctx context.Context) (err error) {
196196

197197
ex.setJobCredentials(ctx)
198198

199-
if err := ex.prepareJobWorkingDir(ctx); err != nil {
199+
if err := ex.setJobWorkingDir(ctx); err != nil {
200200
ex.SetJobStateWithTerminationReason(
201201
ctx,
202202
types.JobStateFailed,
@@ -352,7 +352,7 @@ func (ex *RunExecutor) setJobCredentials(ctx context.Context) {
352352
log.Trace(ctx, "Job credentials", "uid", ex.jobUid, "gid", ex.jobGid, "home", ex.jobHomeDir)
353353
}
354354

355-
func (ex *RunExecutor) prepareJobWorkingDir(ctx context.Context) error {
355+
func (ex *RunExecutor) setJobWorkingDir(ctx context.Context) error {
356356
var err error
357357
if ex.jobSpec.WorkingDir == nil {
358358
ex.jobWorkingDir, err = os.Getwd()
@@ -372,9 +372,6 @@ func (ex *RunExecutor) prepareJobWorkingDir(ctx context.Context) error {
372372
}
373373
}
374374
log.Trace(ctx, "Job working dir", "path", ex.jobWorkingDir)
375-
if err := common.MkdirAll(ctx, ex.jobWorkingDir, ex.jobUid, ex.jobGid); err != nil {
376-
return fmt.Errorf("create working directory: %w", err)
377-
}
378375
return nil
379376
}
380377

@@ -429,6 +426,9 @@ func (ex *RunExecutor) execJob(ctx context.Context, jobLogFile io.Writer) error
429426
}
430427
cmd.WaitDelay = ex.killDelay // kills the process if it doesn't exit in time
431428

429+
if err := common.MkdirAll(ctx, ex.jobWorkingDir, ex.jobUid, ex.jobGid); err != nil {
430+
return fmt.Errorf("create working directory: %w", err)
431+
}
432432
cmd.Dir = ex.jobWorkingDir
433433

434434
// User must be already set

runner/internal/executor/executor_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestExecutor_WorkingDir_Set(t *testing.T) {
2828

2929
ex.jobSpec.WorkingDir = &workingDir
3030
ex.jobSpec.Commands = append(ex.jobSpec.Commands, "pwd")
31-
err = ex.prepareJobWorkingDir(context.TODO())
31+
err = ex.setJobWorkingDir(context.TODO())
3232
require.NoError(t, err)
3333
require.Equal(t, workingDir, ex.jobWorkingDir)
3434
err = os.MkdirAll(workingDir, 0o755)
@@ -47,7 +47,7 @@ func TestExecutor_WorkingDir_NotSet(t *testing.T) {
4747
require.NoError(t, err)
4848
ex.jobSpec.WorkingDir = nil
4949
ex.jobSpec.Commands = append(ex.jobSpec.Commands, "pwd")
50-
err = ex.prepareJobWorkingDir(context.TODO())
50+
err = ex.setJobWorkingDir(context.TODO())
5151
require.NoError(t, err)
5252
require.Equal(t, cwd, ex.jobWorkingDir)
5353

@@ -158,7 +158,7 @@ func TestExecutor_RemoteRepo(t *testing.T) {
158158
err := os.WriteFile(ex.codePath, []byte{}, 0o600) // empty diff
159159
require.NoError(t, err)
160160

161-
err = ex.prepareJobWorkingDir(context.TODO())
161+
err = ex.setJobWorkingDir(context.TODO())
162162
require.NoError(t, err)
163163
err = ex.setupRepo(context.TODO())
164164
require.NoError(t, err)
@@ -211,6 +211,7 @@ func makeTestExecutor(t *testing.T) *RunExecutor {
211211
ex, _ := NewRunExecutor(temp, home, 10022)
212212
ex.SetJob(body)
213213
ex.SetCodePath(filepath.Join(baseDir, "code")) // note: create file before run
214+
ex.setJobWorkingDir(context.Background())
214215
return ex
215216
}
216217

runner/internal/executor/files.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package executor
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"io"
78
"os"
89
"path"
10+
"path/filepath"
911
"regexp"
1012

1113
"github.com/codeclysm/extract/v4"
@@ -32,7 +34,14 @@ func (ex *RunExecutor) AddFileArchive(id string, src io.Reader) error {
3234
}
3335

3436
// setupFiles must be called from Run
37+
// ex.jobWorkingDir must be already set
3538
func (ex *RunExecutor) setupFiles(ctx context.Context) error {
39+
if ex.jobWorkingDir == "" {
40+
return errors.New("setup files: working dir is not set")
41+
}
42+
if !filepath.IsAbs(ex.jobWorkingDir) {
43+
return fmt.Errorf("setup files: working dir must be absolute: %s", ex.jobWorkingDir)
44+
}
3645
for _, fa := range ex.jobSpec.FileArchives {
3746
archivePath := path.Join(ex.archiveDir, fa.Id)
3847
if err := extractFileArchive(ctx, archivePath, fa.Path, ex.jobWorkingDir, ex.jobUid, ex.jobGid, ex.jobHomeDir); err != nil {
@@ -53,9 +62,6 @@ func extractFileArchive(ctx context.Context, archivePath string, destPath string
5362
return fmt.Errorf("expand destination path: %w", err)
5463
}
5564
destBase, destName := path.Split(destPath)
56-
if destBase == "" {
57-
destBase = "."
58-
}
5965
if err := common.MkdirAll(ctx, destBase, uid, gid); err != nil {
6066
return fmt.Errorf("create destination directory: %w", err)
6167
}

runner/internal/executor/repo.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,15 @@ import (
1515
)
1616

1717
// setupRepo must be called from Run
18+
// ex.jobWorkingDir must be already set
1819
// TODO: change ownership to uid:gid
1920
func (ex *RunExecutor) setupRepo(ctx context.Context) error {
21+
if ex.jobWorkingDir == "" {
22+
return errors.New("setup repo: working dir is not set")
23+
}
24+
if !filepath.IsAbs(ex.jobWorkingDir) {
25+
return fmt.Errorf("setup repo: working dir must be absolute: %s", ex.jobWorkingDir)
26+
}
2027
if ex.jobSpec.RepoDir == nil {
2128
return errors.New("repo_dir is not set")
2229
}

0 commit comments

Comments
 (0)