buildr/internal/containers/spec.go
Peter e60726ef9e
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
feat: implement new and man for plugin modules
- use extracted shared libraries
2023-08-23 22:06:26 +02:00

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
}