-
Notifications
You must be signed in to change notification settings - Fork 18
/
container.go
55 lines (47 loc) · 1.43 KB
/
container.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package container
import (
"context"
"github.com/cirruslabs/cirrus-ci-agent/api"
"github.com/cirruslabs/cirrus-cli/internal/executor/instance/container"
"github.com/cirruslabs/cirrus-cli/internal/executor/instance/persistentworker/pwdir"
"github.com/cirruslabs/cirrus-cli/internal/executor/instance/runconfig"
"github.com/cirruslabs/cirrus-cli/internal/executor/platform"
"os"
)
type Container struct {
instance *container.Instance
tempDir string
cleanup func() error
}
func New(image string, cpu float32, memory uint32, volumes []*api.Volume) (*Container, error) {
// Create a working directory that will be used if none was supplied when instantiating from the worker
tempDir, err := pwdir.StaticTempDirWithDynamicFallback()
if err != nil {
return nil, err
}
return &Container{
instance: &container.Instance{
Image: image,
CPU: cpu,
Memory: memory,
Volumes: volumes,
Platform: platform.Auto(),
},
tempDir: tempDir,
cleanup: func() error {
return os.RemoveAll(tempDir)
},
}, nil
}
func (cont *Container) Run(ctx context.Context, config *runconfig.RunConfig) (err error) {
if config.ProjectDir == "" {
config.ProjectDir = cont.tempDir
}
return cont.instance.Run(ctx, config)
}
func (cont *Container) WorkingDirectory(projectDir string, dirtyMode bool) string {
return cont.instance.WorkingDirectory(projectDir, dirtyMode)
}
func (cont *Container) Close() error {
return cont.cleanup()
}