in pkg/api/internal/jobs/jobs.go [44:92]
func New(jobID, workDir string, options ...func(*Job)) (*Job, error) {
if workDir == "" {
osWorkDir, err := os.Getwd()
if err != nil {
return nil, fmt.Errorf("could not determine working directory: %w", err)
}
workDir = osWorkDir
}
if err := os.MkdirAll(workDir, 0700); err != nil {
return nil, fmt.Errorf("creating workdir %q: %w", workDir, err)
}
// TODO: add job timeout to RunRequest and hook it up here
ctx, cancel := context.WithCancel(context.Background())
job := &Job{
TmpDir: "",
WorkDir: workDir,
ID: jobID,
Ctx: ctx,
cancel: cancel,
logs: nil,
status: proto.StepResult_unspecified,
finishC: make(chan struct{}, 1),
runExitWaitTime: time.Second * 2,
}
for _, opt := range options {
opt(job)
}
if job.logs == nil {
job.TmpDir = path.Join(os.TempDir(), "step-runner-output-"+jobID)
if err := os.MkdirAll(job.TmpDir, 0700); err != nil {
return nil, fmt.Errorf("creating tmpdir %q: %w", job.TmpDir, err)
}
logs, err := file.New(path.Join(job.TmpDir, "logs"))
if err != nil {
_ = os.RemoveAll(job.TmpDir)
return nil, fmt.Errorf("creating log file: %w", err)
}
job.logs = logs
}
return job, nil
}