buildkite-builder 3.9.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +0 -30
- data/VERSION +1 -1
- data/lib/buildkite/builder/extension_manager.rb +5 -1
- data/lib/buildkite/builder/extensions/plugins.rb +0 -11
- data/lib/buildkite/builder/extensions/steps.rb +45 -23
- data/lib/buildkite/builder/extensions.rb +0 -1
- data/lib/buildkite/builder/pipeline.rb +0 -3
- data/lib/buildkite/builder/step_collection.rb +5 -11
- data/lib/buildkite/builder.rb +0 -1
- data/lib/buildkite/pipelines/steps/abstract.rb +4 -8
- data/lib/buildkite/pipelines/steps/group.rb +37 -0
- data/lib/buildkite/pipelines/steps.rb +1 -0
- metadata +3 -5
- data/lib/buildkite/builder/extensions/sub_pipelines.rb +0 -104
- data/lib/buildkite/builder/group.rb +0 -41
- data/lib/buildkite/builder/pipeline_collection.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d9385a6b39f83697f501167fac9988d2e0b351a3e1b877b24e6c93670959d27
|
4
|
+
data.tar.gz: d5fe308edf2e426eb4c7be9bf9bf5996056533eb70724e18d438109732101492
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c406b7822bd571773bc3e2f29bf71b1067cacf1cf434b92457c8936a64757efdc48c8f8a63f9f56fc7885d5505d2505bd6f9ac8c9447f1f90d992b263508b3cb
|
7
|
+
data.tar.gz: ddfc34afe276f2716b86d5db4fe07a6854ef0135dd93f8e4b0bd8d5fb14aa07ffcd8c892661823bad17b90e6bcea3b977a7d5ca46694429250e7c9f818ea9baa
|
data/README.md
CHANGED
@@ -135,36 +135,6 @@ Buildkite::Builder.pipeline do
|
|
135
135
|
end
|
136
136
|
```
|
137
137
|
|
138
|
-
### Subpipeline
|
139
|
-
|
140
|
-
While triggering another pipeline, you can predefine subpipeline's steps using `pipeline(NAME_OF_SUBPIPELINE)` in the main pipeline's `pipeline.rb` file and share with main pipeline's plugins and templates definition.
|
141
|
-
|
142
|
-
`.buildkite/pipelines/pipeline-triggerer/pipeline.rb`
|
143
|
-
|
144
|
-
```ruby
|
145
|
-
Buildkite::Builder.pipeline do
|
146
|
-
pipeline('rspec-pipeline') do
|
147
|
-
command do
|
148
|
-
label "Run RSpec in separate pipeline"
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
```
|
153
|
-
|
154
|
-
Inside your Buildkite pipeline setup, you can do the following:
|
155
|
-
|
156
|
-
In `https://buildkite.com/your-org/rspec-pipeline/steps`
|
157
|
-
|
158
|
-
```yaml
|
159
|
-
steps:
|
160
|
-
- label: ":pipeline:"
|
161
|
-
commands:
|
162
|
-
- buildkite-agent artifact download $BKB_SUBPIPELINE_FILE . --build $BUILDKITE_TRIGGERED_FROM_BUILD_ID
|
163
|
-
- buildkite-agent pipeline upload $BKB_SUBPIPELINE_FILE
|
164
|
-
```
|
165
|
-
|
166
|
-
This will upload the pregenerated `pipeline.yml` to `rspec-pipeline`.
|
167
|
-
|
168
138
|
## Development
|
169
139
|
|
170
140
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
4.0.0
|
@@ -8,7 +8,7 @@ module Buildkite
|
|
8
8
|
@context = context
|
9
9
|
@extensions = {}
|
10
10
|
|
11
|
-
|
11
|
+
Loaders::Extensions.load(@context.root)
|
12
12
|
end
|
13
13
|
|
14
14
|
def use(extension, native: false, **args, &block)
|
@@ -34,6 +34,10 @@ module Buildkite
|
|
34
34
|
@extensions.fetch(klass)
|
35
35
|
end
|
36
36
|
|
37
|
+
def all
|
38
|
+
@extensions.keys
|
39
|
+
end
|
40
|
+
|
37
41
|
private
|
38
42
|
|
39
43
|
def log
|
@@ -23,17 +23,6 @@ module Buildkite
|
|
23
23
|
resource.is_a?(Symbol) ? manager.build(resource, attributes) : plugin
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
|
-
context.data.pipelines.each do |pipeline|
|
28
|
-
pipeline.data.steps.each(:command) do |step|
|
29
|
-
next unless step.has?(:plugins)
|
30
|
-
|
31
|
-
step.get(:plugins).map! do |plugin|
|
32
|
-
resource, attributes = extract_resource_and_attributes(plugin)
|
33
|
-
resource.is_a?(Symbol) ? manager.build(resource, attributes) : plugin
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
26
|
end
|
38
27
|
|
39
28
|
private
|
@@ -2,54 +2,76 @@ module Buildkite
|
|
2
2
|
module Builder
|
3
3
|
module Extensions
|
4
4
|
class Steps < Extension
|
5
|
+
attr_reader :templates
|
6
|
+
|
5
7
|
def prepare
|
6
|
-
|
8
|
+
@templates = TemplateManager.new(context.root)
|
9
|
+
context.data.steps = StepCollection.new
|
7
10
|
end
|
8
11
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
+
def build_step(step_class, template_name, **args, &block)
|
13
|
+
template = @templates.find(template_name)
|
14
|
+
|
15
|
+
step_class.new(**args).tap do |step|
|
16
|
+
step.process(template) if template
|
17
|
+
step.process(block) if block_given?
|
12
18
|
|
13
|
-
if
|
14
|
-
|
15
|
-
|
19
|
+
if @current_group
|
20
|
+
@current_group.steps.push(step)
|
21
|
+
else
|
22
|
+
context.data.steps.push(step)
|
16
23
|
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def with_group(group, &block)
|
28
|
+
raise "Group cannot be nested" if @current_group
|
17
29
|
|
18
|
-
|
30
|
+
@current_group = group
|
31
|
+
|
32
|
+
group.process(block)
|
33
|
+
context.data.steps.push(group).last
|
34
|
+
ensure
|
35
|
+
@current_group = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
dsl do
|
39
|
+
def group(&block)
|
40
|
+
context.extensions.find(Steps).with_group(Pipelines::Steps::Group.new(context), &block)
|
19
41
|
end
|
20
42
|
|
21
43
|
def block(template = nil, **args, &block)
|
22
|
-
context.
|
44
|
+
context.extensions.find(Steps).build_step(Pipelines::Steps::Block, template, **args, &block)
|
23
45
|
end
|
24
46
|
|
25
47
|
def command(template = nil, **args, &block)
|
26
|
-
context.
|
48
|
+
context.extensions.find(Steps).build_step(Pipelines::Steps::Command, template, **args, &block)
|
27
49
|
end
|
28
50
|
|
29
51
|
def input(template = nil, **args, &block)
|
30
|
-
context.
|
52
|
+
context.extensions.find(Steps).build_step(Pipelines::Steps::Input, template, **args, &block)
|
31
53
|
end
|
32
54
|
|
33
55
|
def trigger(template = nil, **args, &block)
|
34
|
-
context.
|
56
|
+
context.extensions.find(Steps).build_step(Pipelines::Steps::Trigger, template, **args, &block)
|
35
57
|
end
|
36
58
|
|
37
59
|
def skip(template = nil, **args, &block)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
60
|
+
context.extensions.find(Steps).build_step(Pipelines::Steps::Skip, template, **args, &block).tap do |step|
|
61
|
+
# A skip step has a nil/noop command.
|
62
|
+
step.command(nil)
|
63
|
+
# Always set the skip attribute if it's in a falsey state.
|
64
|
+
step.skip(true) if !step.get(:skip) || step.skip.empty?
|
65
|
+
end
|
44
66
|
end
|
45
67
|
|
46
68
|
def wait(attributes = {}, &block)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
69
|
+
context.extensions.find(Steps).build_step(Pipelines::Steps::Wait, nil, &block).tap do |step|
|
70
|
+
step.wait(nil)
|
71
|
+
attributes.each do |key, value|
|
72
|
+
step.set(key, value)
|
73
|
+
end
|
51
74
|
end
|
52
|
-
step
|
53
75
|
end
|
54
76
|
end
|
55
77
|
end
|
@@ -6,7 +6,6 @@ module Buildkite
|
|
6
6
|
autoload :Env, File.expand_path('extensions/env', __dir__)
|
7
7
|
autoload :Lib, File.expand_path('extensions/lib', __dir__)
|
8
8
|
autoload :Notify, File.expand_path('extensions/notify', __dir__)
|
9
|
-
autoload :SubPipelines, File.expand_path('extensions/sub_pipelines', __dir__)
|
10
9
|
autoload :Steps, File.expand_path('extensions/steps', __dir__)
|
11
10
|
autoload :Plugins, File.expand_path('extensions/plugins', __dir__)
|
12
11
|
autoload :Use, File.expand_path('extensions/use', __dir__)
|
@@ -19,7 +19,6 @@ module Buildkite
|
|
19
19
|
attr_reader :logger,
|
20
20
|
:root,
|
21
21
|
:artifacts,
|
22
|
-
:plugins,
|
23
22
|
:dsl,
|
24
23
|
:data,
|
25
24
|
:extensions
|
@@ -28,7 +27,6 @@ module Buildkite
|
|
28
27
|
@root = root
|
29
28
|
@logger = logger || Logger.new(File::NULL)
|
30
29
|
@artifacts = []
|
31
|
-
@plugins = {}
|
32
30
|
@dsl = Dsl.new(self)
|
33
31
|
@extensions = ExtensionManager.new(self)
|
34
32
|
@data = Data.new
|
@@ -39,7 +37,6 @@ module Buildkite
|
|
39
37
|
use(Extensions::Notify)
|
40
38
|
use(Extensions::Steps)
|
41
39
|
use(Extensions::Plugins)
|
42
|
-
use(Extensions::SubPipelines)
|
43
40
|
end
|
44
41
|
|
45
42
|
def upload
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module Buildkite
|
2
2
|
module Builder
|
3
3
|
class StepCollection
|
4
|
-
attr_reader :templates
|
5
4
|
attr_reader :steps
|
6
5
|
|
7
|
-
def initialize
|
8
|
-
@templates = templates
|
6
|
+
def initialize
|
9
7
|
@steps = []
|
10
8
|
end
|
11
9
|
|
@@ -13,12 +11,12 @@ module Buildkite
|
|
13
11
|
types = types.flatten
|
14
12
|
|
15
13
|
@steps.each do |step|
|
16
|
-
if
|
17
|
-
|
18
|
-
elsif step.is_a?(Group)
|
19
|
-
step.data.steps.each(*types) do |step|
|
14
|
+
if step.class.to_sym == :group
|
15
|
+
step.steps.each(*types) do |step|
|
20
16
|
yield step
|
21
17
|
end
|
18
|
+
elsif types.include?(step.class.to_sym)
|
19
|
+
yield step
|
22
20
|
elsif types.empty?
|
23
21
|
yield step
|
24
22
|
end
|
@@ -33,10 +31,6 @@ module Buildkite
|
|
33
31
|
find(key) || raise(ArgumentError, "Can't find step with key: #{key}")
|
34
32
|
end
|
35
33
|
|
36
|
-
def add(step_class, template = nil, **args, &block)
|
37
|
-
@steps.push(step_class.new(self, template, **args, &block)).last
|
38
|
-
end
|
39
|
-
|
40
34
|
def push(step)
|
41
35
|
@steps.push(step)
|
42
36
|
end
|
data/lib/buildkite/builder.rb
CHANGED
@@ -5,7 +5,6 @@ require 'pathname'
|
|
5
5
|
module Buildkite
|
6
6
|
module Builder
|
7
7
|
autoload :Commands, File.expand_path('builder/commands', __dir__)
|
8
|
-
autoload :Group, File.expand_path('builder/group', __dir__)
|
9
8
|
autoload :Pipeline, File.expand_path('builder/pipeline', __dir__)
|
10
9
|
autoload :Definition, File.expand_path('builder/definition', __dir__)
|
11
10
|
autoload :Data, File.expand_path('builder/data', __dir__)
|
@@ -11,20 +11,16 @@ module Buildkite
|
|
11
11
|
|
12
12
|
def_delegator :@context, :data
|
13
13
|
|
14
|
-
attr_reader :template
|
15
|
-
attr_reader :step_collection
|
16
|
-
|
17
14
|
def self.to_sym
|
18
15
|
name.split('::').last.downcase.to_sym
|
19
16
|
end
|
20
17
|
|
21
|
-
def initialize(
|
22
|
-
@step_collection = step_collection
|
23
|
-
@template = step_collection.templates.find(template_name)
|
18
|
+
def initialize(**args)
|
24
19
|
@context = StepContext.new(self, **args)
|
20
|
+
end
|
25
21
|
|
26
|
-
|
27
|
-
instance_exec(@context, &block)
|
22
|
+
def process(block)
|
23
|
+
instance_exec(@context, &block)
|
28
24
|
end
|
29
25
|
end
|
30
26
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Buildkite
|
4
|
+
module Pipelines
|
5
|
+
module Steps
|
6
|
+
class Group < Abstract
|
7
|
+
attribute :depends_on, append: true
|
8
|
+
attribute :key
|
9
|
+
attribute :label
|
10
|
+
|
11
|
+
attr_reader :steps
|
12
|
+
|
13
|
+
def initialize(pipeline, **args)
|
14
|
+
@pipeline = pipeline
|
15
|
+
@context = StepContext.new(self, **args)
|
16
|
+
@steps = Buildkite::Builder::StepCollection.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def method_missing(method_name, ...)
|
20
|
+
if @pipeline.dsl.respond_to?(method_name)
|
21
|
+
@pipeline.dsl.public_send(method_name, ...)
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def respond_to_missing?(...)
|
28
|
+
@pipeline.dsl.respond_to?(...) || super
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_h
|
32
|
+
super.merge(group: nil, steps: steps.to_definition)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -6,6 +6,7 @@ module Buildkite
|
|
6
6
|
autoload :Abstract, File.expand_path('steps/abstract', __dir__)
|
7
7
|
autoload :Block, File.expand_path('steps/block', __dir__)
|
8
8
|
autoload :Command, File.expand_path('steps/command', __dir__)
|
9
|
+
autoload :Group, File.expand_path('steps/group', __dir__)
|
9
10
|
autoload :Input, File.expand_path('steps/input', __dir__)
|
10
11
|
autoload :Skip, File.expand_path('steps/skip', __dir__)
|
11
12
|
autoload :Trigger, File.expand_path('steps/trigger', __dir__)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buildkite-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ngan Pham
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-12-
|
12
|
+
date: 2022-12-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rainbow
|
@@ -115,16 +115,13 @@ files:
|
|
115
115
|
- lib/buildkite/builder/extensions/notify.rb
|
116
116
|
- lib/buildkite/builder/extensions/plugins.rb
|
117
117
|
- lib/buildkite/builder/extensions/steps.rb
|
118
|
-
- lib/buildkite/builder/extensions/sub_pipelines.rb
|
119
118
|
- lib/buildkite/builder/extensions/use.rb
|
120
|
-
- lib/buildkite/builder/group.rb
|
121
119
|
- lib/buildkite/builder/loaders.rb
|
122
120
|
- lib/buildkite/builder/loaders/abstract.rb
|
123
121
|
- lib/buildkite/builder/loaders/extensions.rb
|
124
122
|
- lib/buildkite/builder/loaders/templates.rb
|
125
123
|
- lib/buildkite/builder/logging_utils.rb
|
126
124
|
- lib/buildkite/builder/pipeline.rb
|
127
|
-
- lib/buildkite/builder/pipeline_collection.rb
|
128
125
|
- lib/buildkite/builder/plugin.rb
|
129
126
|
- lib/buildkite/builder/plugin_manager.rb
|
130
127
|
- lib/buildkite/builder/rainbow.rb
|
@@ -150,6 +147,7 @@ files:
|
|
150
147
|
- lib/buildkite/pipelines/steps/abstract.rb
|
151
148
|
- lib/buildkite/pipelines/steps/block.rb
|
152
149
|
- lib/buildkite/pipelines/steps/command.rb
|
150
|
+
- lib/buildkite/pipelines/steps/group.rb
|
153
151
|
- lib/buildkite/pipelines/steps/input.rb
|
154
152
|
- lib/buildkite/pipelines/steps/skip.rb
|
155
153
|
- lib/buildkite/pipelines/steps/trigger.rb
|
@@ -1,104 +0,0 @@
|
|
1
|
-
require 'securerandom'
|
2
|
-
|
3
|
-
module Buildkite
|
4
|
-
module Builder
|
5
|
-
module Extensions
|
6
|
-
class SubPipelines < Extension
|
7
|
-
class Pipeline
|
8
|
-
include Buildkite::Pipelines::Attributes
|
9
|
-
|
10
|
-
attr_reader :data, :name, :dsl
|
11
|
-
|
12
|
-
# These attributes are for triggered step
|
13
|
-
attribute :label
|
14
|
-
attribute :key
|
15
|
-
attribute :skip
|
16
|
-
attribute :if, as: :condition
|
17
|
-
attribute :depends_on, append: true
|
18
|
-
attribute :allow_dependency_failure
|
19
|
-
attribute :branches
|
20
|
-
attribute :async
|
21
|
-
attribute :build
|
22
|
-
|
23
|
-
def self.to_sym
|
24
|
-
name.split('::').last.downcase.to_sym
|
25
|
-
end
|
26
|
-
|
27
|
-
def initialize(name, context, &block)
|
28
|
-
@context = context
|
29
|
-
@name = name
|
30
|
-
@data = Data.new
|
31
|
-
@data.steps = StepCollection.new(context.data.steps.templates)
|
32
|
-
@data.notify = []
|
33
|
-
@data.env = {}
|
34
|
-
|
35
|
-
# Use `clone` to copy over dsl's extended extensions
|
36
|
-
@dsl = context.dsl.clone
|
37
|
-
# Override dsl context to current pipeline
|
38
|
-
@dsl.instance_variable_set(:@context, self)
|
39
|
-
|
40
|
-
instance_eval(&block) if block_given?
|
41
|
-
self
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_h
|
45
|
-
# Merge envs from main pipeline, since ruby does not have `reverse_merge` and
|
46
|
-
# `data` does not allow keys override, we have to reset the data hash per key.
|
47
|
-
@context.data.env.merge(data.env).each do |key, value|
|
48
|
-
data.env[key] = value
|
49
|
-
end
|
50
|
-
data.to_definition
|
51
|
-
end
|
52
|
-
|
53
|
-
def method_missing(method_name, *args, **kwargs, &_block)
|
54
|
-
@dsl.public_send(method_name, *args, **kwargs, &_block)
|
55
|
-
end
|
56
|
-
|
57
|
-
def pipeline_yml
|
58
|
-
@pipeline_yml ||= "tmp/buildkite-builder/#{SecureRandom.urlsafe_base64}.yml"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def prepare
|
63
|
-
context.data.pipelines = PipelineCollection.new(context.artifacts)
|
64
|
-
end
|
65
|
-
|
66
|
-
dsl do
|
67
|
-
def pipeline(name, &block)
|
68
|
-
raise "Subpipeline must have a name" if name.empty?
|
69
|
-
raise "Subpipeline does not allow nested in another Subpipeline" if context.is_a?(Buildkite::Builder::Extensions::SubPipelines::Pipeline)
|
70
|
-
|
71
|
-
sub_pipeline = Buildkite::Builder::Extensions::SubPipelines::Pipeline.new(name, context, &block)
|
72
|
-
context.data.pipelines.add(sub_pipeline)
|
73
|
-
|
74
|
-
trigger_step = context.data.steps.add(Pipelines::Steps::Trigger)
|
75
|
-
trigger_step.trigger(name)
|
76
|
-
|
77
|
-
build_options = {
|
78
|
-
message: '${BUILDKITE_MESSAGE}',
|
79
|
-
commit: '${BUILDKITE_COMMIT}',
|
80
|
-
branch: '${BUILDKITE_BRANCH}',
|
81
|
-
env: {
|
82
|
-
BUILDKITE_PULL_REQUEST: '${BUILDKITE_PULL_REQUEST}',
|
83
|
-
BUILDKITE_PULL_REQUEST_BASE_BRANCH: '${BUILDKITE_PULL_REQUEST_BASE_BRANCH}',
|
84
|
-
BUILDKITE_PULL_REQUEST_REPO: '${BUILDKITE_PULL_REQUEST_REPO}',
|
85
|
-
BKB_SUBPIPELINE_FILE: sub_pipeline.pipeline_yml
|
86
|
-
}
|
87
|
-
}
|
88
|
-
build_options.merge!(sub_pipeline.build) if sub_pipeline.build
|
89
|
-
|
90
|
-
trigger_step.build(build_options)
|
91
|
-
trigger_step.key(sub_pipeline.key || "subpipeline_#{name}_#{context.data.pipelines.count}")
|
92
|
-
trigger_step.label(sub_pipeline.label || name.capitalize)
|
93
|
-
trigger_step.async(sub_pipeline.async || false)
|
94
|
-
trigger_step.branches(sub_pipeline.branches) if sub_pipeline.branches
|
95
|
-
trigger_step.condition(sub_pipeline.condition) if sub_pipeline.condition
|
96
|
-
trigger_step.depends_on(*sub_pipeline.get('depends_on')) if sub_pipeline.get('depends_on')
|
97
|
-
trigger_step.allow_dependency_failure(sub_pipeline.allow_dependency_failure || false)
|
98
|
-
trigger_step.skip(sub_pipeline.skip || false)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Buildkite
|
2
|
-
module Builder
|
3
|
-
class Group
|
4
|
-
include Buildkite::Pipelines::Attributes
|
5
|
-
|
6
|
-
attr_reader :label
|
7
|
-
attr_reader :data
|
8
|
-
|
9
|
-
attribute :depends_on, append: true
|
10
|
-
attribute :key
|
11
|
-
|
12
|
-
def self.to_sym
|
13
|
-
name.split('::').last.downcase.to_sym
|
14
|
-
end
|
15
|
-
|
16
|
-
def initialize(label, context, &block)
|
17
|
-
@label = label
|
18
|
-
@data = Data.new
|
19
|
-
@data.steps = StepCollection.new(context.data.steps.templates)
|
20
|
-
@data.notify = []
|
21
|
-
|
22
|
-
# Use `clone` to copy over dsl's extended extensions
|
23
|
-
@dsl = context.dsl.clone
|
24
|
-
# Override dsl context to current group
|
25
|
-
@dsl.instance_variable_set(:@context, self)
|
26
|
-
|
27
|
-
instance_eval(&block) if block_given?
|
28
|
-
self
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_h
|
32
|
-
attributes = super
|
33
|
-
{ group: label }.merge(attributes).merge(data.to_definition)
|
34
|
-
end
|
35
|
-
|
36
|
-
def method_missing(method_name, *args, **kwargs, &_block)
|
37
|
-
@dsl.public_send(method_name, *args, **kwargs, &_block)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require "forwardable"
|
2
|
-
|
3
|
-
module Buildkite
|
4
|
-
module Builder
|
5
|
-
class PipelineCollection
|
6
|
-
extend Forwardable
|
7
|
-
|
8
|
-
attr_reader :pipelines
|
9
|
-
|
10
|
-
def_delegator :@pipelines, :count
|
11
|
-
def_delegator :@pipelines, :each
|
12
|
-
|
13
|
-
def initialize(artifacts)
|
14
|
-
@artifacts = artifacts
|
15
|
-
@pipelines = []
|
16
|
-
end
|
17
|
-
|
18
|
-
def add(pipeline)
|
19
|
-
unless pipeline.is_a?(Buildkite::Builder::Extensions::SubPipelines::Pipeline)
|
20
|
-
raise "`#{pipeline}` must be a Buildkite::Builder::Extensions::SubPipelines::Pipeline"
|
21
|
-
end
|
22
|
-
|
23
|
-
pipelines << pipeline
|
24
|
-
end
|
25
|
-
|
26
|
-
def to_definition
|
27
|
-
# Instead of generates pipeline.yml, subpipelines save generated file to artifacts
|
28
|
-
pipelines.each do |pipeline|
|
29
|
-
file = Pathname.new(pipeline.pipeline_yml)
|
30
|
-
file.dirname.mkpath
|
31
|
-
file.write(YAML.dump(Pipelines::Helpers.sanitize(pipeline.to_h)))
|
32
|
-
|
33
|
-
@artifacts << file
|
34
|
-
end
|
35
|
-
|
36
|
-
nil
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|