package containers import ( "path" "github.com/docker/docker/api/types/mount" ) type Capabilities struct { Add []string Drop []string } type BuildRContainerSpec struct { Content map[string]string ID string ModuleName string RepoRoot string BinariesDir string Image string User string Capabilities Capabilities ExtraBinaries []string Mounts []mount.Mount Privileged bool } func (s *BuildRContainerSpec) containerSpec(buildrExecutableName string) (containerRepoRoot string, spec *ContainerSpec) { containerRepoRoot = path.Join("/", "work", s.ID) spec = &ContainerSpec{ Image: s.Image, User: s.User, Privileged: s.Privileged, Capabilities: s.Capabilities, ExposedPorts: []string{"3000/tcp"}, Env: map[string]string{ "BUILDR_GRPC_SERVE_ADDRESS": "0.0.0.0:3000", "BUILDR_REPO_ROOT": containerRepoRoot, "BUILDR_STATE_FILE_PATH": "/tmp/buildr.state", }, Entrypoint: []string{ path.Join("/opt/buildr/bin", buildrExecutableName), }, Cmd: []string{ "serve", "api", }, Mounts: s.Mounts, } return } type ContainerSpec struct { Env map[string]string Image string User string WorkingDir string Capabilities Capabilities ExposedPorts []string Entrypoint []string Cmd []string Mounts []mount.Mount Privileged bool AutoRemove bool } func (s *ContainerSpec) WorkDir() string { if s.WorkingDir == "" { return "/work" } return s.WorkingDir }