75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
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
|
|
}
|