156 lines
5.9 KiB
Go
156 lines
5.9 KiB
Go
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
|
// Use of this source code is governed by the Polyform License
|
|
// that can be found in the LICENSE file.
|
|
|
|
package resource
|
|
|
|
import "github.com/drone/runner-go/manifest"
|
|
|
|
var (
|
|
_ manifest.Resource = (*Pipeline)(nil)
|
|
_ manifest.TriggeredResource = (*Pipeline)(nil)
|
|
_ manifest.DependantResource = (*Pipeline)(nil)
|
|
_ manifest.PlatformResource = (*Pipeline)(nil)
|
|
)
|
|
|
|
// TODO(bradrydzewski) add resource limits
|
|
|
|
// Defines the Resource Kind and Type.
|
|
const (
|
|
Kind = "pipeline"
|
|
Type = "docker"
|
|
)
|
|
|
|
// Pipeline is a pipeline resource that executes pipelines
|
|
// on the host machine without any virtualization.
|
|
type Pipeline struct {
|
|
Version string `json:"version,omitempty"`
|
|
Kind string `json:"kind,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Deps []string `json:"depends_on,omitempty"`
|
|
|
|
Clone manifest.Clone `json:"clone,omitempty"`
|
|
Concurrency manifest.Concurrency `json:"concurrency,omitempty"`
|
|
Node map[string]string `json:"node,omitempty"`
|
|
Platform manifest.Platform `json:"platform,omitempty"`
|
|
Trigger manifest.Conditions `json:"conditions,omitempty"`
|
|
|
|
Environment map[string]string `json:"environment,omitempty"`
|
|
Services []*Step `json:"services,omitempty"`
|
|
Steps []*Step `json:"steps,omitempty"`
|
|
Volumes []*Volume `json:"volumes,omitempty"`
|
|
PullSecrets []string `json:"image_pull_secrets,omitempty" yaml:"image_pull_secrets"`
|
|
Workspace Workspace `json:"workspace,omitempty"`
|
|
}
|
|
|
|
// GetVersion returns the resource version.
|
|
func (p *Pipeline) GetVersion() string { return p.Version }
|
|
|
|
// GetKind returns the resource kind.
|
|
func (p *Pipeline) GetKind() string { return p.Kind }
|
|
|
|
// GetType returns the resource type.
|
|
func (p *Pipeline) GetType() string { return p.Type }
|
|
|
|
// GetName returns the resource name.
|
|
func (p *Pipeline) GetName() string { return p.Name }
|
|
|
|
// GetDependsOn returns the resource dependencies.
|
|
func (p *Pipeline) GetDependsOn() []string { return p.Deps }
|
|
|
|
// GetTrigger returns the resource triggers.
|
|
func (p *Pipeline) GetTrigger() manifest.Conditions { return p.Trigger }
|
|
|
|
// GetNodes returns the resource node labels.
|
|
func (p *Pipeline) GetNodes() map[string]string { return p.Node }
|
|
|
|
// GetPlatform returns the resource platform.
|
|
func (p *Pipeline) GetPlatform() manifest.Platform { return p.Platform }
|
|
|
|
// GetConcurrency returns the resource concurrency limits.
|
|
func (p *Pipeline) GetConcurrency() manifest.Concurrency { return p.Concurrency }
|
|
|
|
// GetStep returns the named step. If no step exists with the
|
|
// given name, a nil value is returned.
|
|
func (p *Pipeline) GetStep(name string) *Step {
|
|
for _, step := range p.Steps {
|
|
if step.Name == name {
|
|
return step
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
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"`
|
|
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"`
|
|
|
|
// Resources *Resources `json:"resources,omitempty"`
|
|
}
|
|
|
|
// Volume that can be mounted by containers.
|
|
Volume struct {
|
|
Name string `json:"name,omitempty"`
|
|
EmptyDir *VolumeEmptyDir `json:"temp,omitempty" yaml:"temp"`
|
|
HostPath *VolumeHostPath `json:"host,omitempty" yaml:"host"`
|
|
}
|
|
|
|
// VolumeDevice describes a mapping of a raw block
|
|
// device within a container.
|
|
VolumeDevice struct {
|
|
Name string `json:"name,omitempty"`
|
|
DevicePath string `json:"path,omitempty" yaml:"path"`
|
|
}
|
|
|
|
// VolumeMount describes a mounting of a Volume
|
|
// within a container.
|
|
VolumeMount struct {
|
|
Name string `json:"name,omitempty"`
|
|
MountPath string `json:"path,omitempty" yaml:"path"`
|
|
}
|
|
|
|
// VolumeEmptyDir mounts a temporary directory from the
|
|
// host node's filesystem into the container. This can
|
|
// be used as a shared scratch space.
|
|
VolumeEmptyDir struct {
|
|
Medium string `json:"medium,omitempty"`
|
|
SizeLimit manifest.BytesSize `json:"size_limit,omitempty" yaml:"size_limit"`
|
|
}
|
|
|
|
// VolumeHostPath mounts a file or directory from the
|
|
// host node's filesystem into your container.
|
|
VolumeHostPath struct {
|
|
Path string `json:"path,omitempty"`
|
|
}
|
|
|
|
// Workspace represents the pipeline workspace configuration.
|
|
Workspace struct {
|
|
Base string `json:"base,omitempty"`
|
|
Path string `json:"path,omitempty"`
|
|
}
|
|
)
|