diff --git a/engine/compiler/step.go b/engine/compiler/step.go index 4181026..f7f291b 100644 --- a/engine/compiler/step.go +++ b/engine/compiler/step.go @@ -48,6 +48,14 @@ func createStep(spec *resource.Pipeline, src *resource.Step) *engine.Step { // Resources: toResources(src), // TODO } + // set container limits + if v := int64(src.MemLimit); v > 0 { + dst.MemLimit = v + } + if v := int64(src.MemSwapLimit); v > 0 { + dst.MemSwapLimit = v + } + // appends the volumes to the container def. for _, vol := range src.Volumes { dst.Volumes = append(dst.Volumes, &engine.VolumeMount{ diff --git a/engine/resource/parser_test.go b/engine/resource/parser_test.go index a34968f..2bbc01a 100644 --- a/engine/resource/parser_test.go +++ b/engine/resource/parser_test.go @@ -76,7 +76,9 @@ func TestParse(t *testing.T) { "GOOS": &manifest.Variable{Value: "linux"}, "GOARCH": &manifest.Variable{Value: "arm64"}, }, - Failure: "ignore", + MemLimit: manifest.BytesSize(1073741824), + MemSwapLimit: manifest.BytesSize(2147483648), + Failure: "ignore", When: manifest.Conditions{ Event: manifest.Condition{ Include: []string{"push"}, diff --git a/engine/resource/pipeline.go b/engine/resource/pipeline.go index 10f3fdf..c3f5ef1 100644 --- a/engine/resource/pipeline.go +++ b/engine/resource/pipeline.go @@ -83,29 +83,31 @@ func (p *Pipeline) GetStep(name string) *Step { type ( // Step defines a Pipeline step. Step struct { - Command []string `json:"command,omitempty"` - Commands []string `json:"commands,omitempty"` - Detach bool `json:"detach,omitempty"` - DependsOn []string `json:"depends_on,omitempty" yaml:"depends_on"` - Devices []*VolumeDevice `json:"devices,omitempty"` - DNS []string `json:"dns,omitempty"` - DNSSearch []string `json:"dns_search,omitempty" yaml:"dns_search"` - Entrypoint []string `json:"entrypoint,omitempty"` - Environment map[string]*manifest.Variable `json:"environment,omitempty"` - ExtraHosts []string `json:"extra_hosts,omitempty" yaml:"extra_hosts"` - Failure string `json:"failure,omitempty"` - Image string `json:"image,omitempty"` - Network string `json:"network_mode,omitempty" yaml:"network_mode"` - Name string `json:"name,omitempty"` - Privileged bool `json:"privileged,omitempty"` - Pull string `json:"pull,omitempty"` - Settings map[string]*manifest.Parameter `json:"settings,omitempty"` - Shell string `json:"shell,omitempty"` - ShmSize manifest.BytesSize `json:"shm_size,omitempty" yaml:"shm_size"` - User string `json:"user,omitempty"` - Volumes []*VolumeMount `json:"volumes,omitempty"` - When manifest.Conditions `json:"when,omitempty"` - WorkingDir string `json:"working_dir,omitempty" yaml:"working_dir"` + Command []string `json:"command,omitempty"` + Commands []string `json:"commands,omitempty"` + Detach bool `json:"detach,omitempty"` + DependsOn []string `json:"depends_on,omitempty" yaml:"depends_on"` + Devices []*VolumeDevice `json:"devices,omitempty"` + DNS []string `json:"dns,omitempty"` + DNSSearch []string `json:"dns_search,omitempty" yaml:"dns_search"` + Entrypoint []string `json:"entrypoint,omitempty"` + Environment map[string]*manifest.Variable `json:"environment,omitempty"` + ExtraHosts []string `json:"extra_hosts,omitempty" yaml:"extra_hosts"` + Failure string `json:"failure,omitempty"` + Image string `json:"image,omitempty"` + MemLimit manifest.BytesSize `json:"mem_limit,omitempty" yaml:"mem_limit"` + MemSwapLimit manifest.BytesSize `json:"memswap_limit,omitempty" yaml:"memswap_limit"` + Network string `json:"network_mode,omitempty" yaml:"network_mode"` + Name string `json:"name,omitempty"` + Privileged bool `json:"privileged,omitempty"` + Pull string `json:"pull,omitempty"` + Settings map[string]*manifest.Parameter `json:"settings,omitempty"` + Shell string `json:"shell,omitempty"` + ShmSize manifest.BytesSize `json:"shm_size,omitempty" yaml:"shm_size"` + User string `json:"user,omitempty"` + Volumes []*VolumeMount `json:"volumes,omitempty"` + When manifest.Conditions `json:"when,omitempty"` + WorkingDir string `json:"working_dir,omitempty" yaml:"working_dir"` } // Volume that can be mounted by containers. diff --git a/engine/resource/testdata/manifest.yml b/engine/resource/testdata/manifest.yml index 296da2e..108b79a 100644 --- a/engine/resource/testdata/manifest.yml +++ b/engine/resource/testdata/manifest.yml @@ -32,6 +32,8 @@ steps: image: golang detach: false failure: ignore + mem_limit: 1GiB + memswap_limit: 2GiB commands: - go build - go test