buildkite-builder 3.8.3 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2591489e3b57711b38926cf558ee362c2c579086b46ff800fccffb8db4598a92
4
- data.tar.gz: cc12ee969c8e846008f13eea3ad61de0efa32d8706bda83ce76a3bf7e8b7772f
3
+ metadata.gz: 3d9385a6b39f83697f501167fac9988d2e0b351a3e1b877b24e6c93670959d27
4
+ data.tar.gz: d5fe308edf2e426eb4c7be9bf9bf5996056533eb70724e18d438109732101492
5
5
  SHA512:
6
- metadata.gz: 6901d0afda1b70080615f5937ef7fa17c90023f1141606e4adf8f77b5ac3252da2f656070b22528b8eea2703686fb2e7af30575f6075e2d19e730a4b4c0df9e5
7
- data.tar.gz: 39d6c40ec9a8f194997af75eb4776753d3b6904bbd19783e1592f92b260f918ccbda81c764efca332305e1f67073bcf7f060d52931a8738c1a2a7a56ffa5a924
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
- 3.8.3
1
+ 4.0.0
@@ -8,7 +8,7 @@ module Buildkite
8
8
  @context = context
9
9
  @extensions = {}
10
10
 
11
- @loader = Loaders::Extensions.load(@context.root)
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
@@ -0,0 +1,36 @@
1
+ module Buildkite
2
+ module Builder
3
+ module Extensions
4
+ class Plugins < Extension
5
+ attr_reader :manager
6
+
7
+ dsl do
8
+ def plugin(name, uri, default_attributes = {})
9
+ context.extensions.find(Buildkite::Builder::Extensions::Plugins).manager.add(name, uri, default_attributes)
10
+ end
11
+ end
12
+
13
+ def prepare
14
+ @manager = PluginManager.new
15
+ end
16
+
17
+ def build
18
+ context.data.steps.each(:command) do |step|
19
+ next unless step.has?(:plugins)
20
+
21
+ step.get(:plugins).map! do |plugin|
22
+ resource, attributes = extract_resource_and_attributes(plugin)
23
+ resource.is_a?(Symbol) ? manager.build(resource, attributes) : plugin
24
+ end
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def extract_resource_and_attributes(plugin)
31
+ [plugin.keys.first, plugin.values.first]
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -2,61 +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
- context.data.steps = StepCollection.new(
7
- TemplateManager.new(context.root),
8
- PluginManager.new
9
- )
8
+ @templates = TemplateManager.new(context.root)
9
+ context.data.steps = StepCollection.new
10
10
  end
11
11
 
12
- dsl do
13
- def group(label = nil, emoji: nil, &block)
14
- raise "Group does not allow nested in another Group" if context.is_a?(Group)
12
+ def build_step(step_class, template_name, **args, &block)
13
+ template = @templates.find(template_name)
15
14
 
16
- if emoji
17
- emoji = Array(emoji).map { |name| ":#{name}:" }.join
18
- label = [emoji, label].compact.join(' ')
19
- end
15
+ step_class.new(**args).tap do |step|
16
+ step.process(template) if template
17
+ step.process(block) if block_given?
20
18
 
21
- context.data.steps.push(Buildkite::Builder::Group.new(label, context, &block))
19
+ if @current_group
20
+ @current_group.steps.push(step)
21
+ else
22
+ context.data.steps.push(step)
23
+ end
22
24
  end
25
+ end
26
+
27
+ def with_group(group, &block)
28
+ raise "Group cannot be nested" if @current_group
23
29
 
24
- def plugin(name, uri, default_attributes = {})
25
- context.data.steps.plugins.add(name, uri, default_attributes)
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)
26
41
  end
27
42
 
28
43
  def block(template = nil, **args, &block)
29
- context.data.steps.add(Pipelines::Steps::Block, template, **args, &block)
44
+ context.extensions.find(Steps).build_step(Pipelines::Steps::Block, template, **args, &block)
30
45
  end
31
46
 
32
47
  def command(template = nil, **args, &block)
33
- context.data.steps.add(Pipelines::Steps::Command, template, **args, &block)
48
+ context.extensions.find(Steps).build_step(Pipelines::Steps::Command, template, **args, &block)
34
49
  end
35
50
 
36
51
  def input(template = nil, **args, &block)
37
- context.data.steps.add(Pipelines::Steps::Input, template, **args, &block)
52
+ context.extensions.find(Steps).build_step(Pipelines::Steps::Input, template, **args, &block)
38
53
  end
39
54
 
40
55
  def trigger(template = nil, **args, &block)
41
- context.data.steps.add(Pipelines::Steps::Trigger, template, **args, &block)
56
+ context.extensions.find(Steps).build_step(Pipelines::Steps::Trigger, template, **args, &block)
42
57
  end
43
58
 
44
59
  def skip(template = nil, **args, &block)
45
- step = context.data.steps.add(Pipelines::Steps::Skip, template, **args, &block)
46
- # A skip step has a nil/noop command.
47
- step.command(nil)
48
- # Always set the skip attribute if it's in a falsey state.
49
- step.skip(true) if !step.get(:skip) || step.skip.empty?
50
- step
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
51
66
  end
52
67
 
53
68
  def wait(attributes = {}, &block)
54
- step = context.data.steps.add(Pipelines::Steps::Wait, &block)
55
- step.wait(nil)
56
- attributes.each do |key, value|
57
- step.set(key, value)
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
58
74
  end
59
- step
60
75
  end
61
76
  end
62
77
  end
@@ -6,8 +6,8 @@ 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__)
10
+ autoload :Plugins, File.expand_path('extensions/plugins', __dir__)
11
11
  autoload :Use, File.expand_path('extensions/use', __dir__)
12
12
  end
13
13
  end
@@ -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
@@ -38,7 +36,7 @@ module Buildkite
38
36
  use(Extensions::Env)
39
37
  use(Extensions::Notify)
40
38
  use(Extensions::Steps)
41
- use(Extensions::SubPipelines)
39
+ use(Extensions::Plugins)
42
40
  end
43
41
 
44
42
  def upload
@@ -3,16 +3,16 @@
3
3
  module Buildkite
4
4
  module Builder
5
5
  class Plugin
6
- attr_reader :uri, :source, :version, :attributes
6
+ attr_reader \
7
+ :uri,
8
+ :source,
9
+ :version,
10
+ :default_attributes
7
11
 
8
- def initialize(uri, attributes = {})
12
+ def initialize(uri, default_attributes = {})
9
13
  @uri = uri
10
14
  @source, @version = uri.split('#')
11
- @attributes = attributes
12
- end
13
-
14
- def to_h
15
- Buildkite::Pipelines::Helpers.sanitize(uri => (attributes&.empty? ? nil : attributes))
15
+ @default_attributes = default_attributes
16
16
  end
17
17
  end
18
18
  end
@@ -7,23 +7,16 @@ module Buildkite
7
7
 
8
8
  def add(name, uri, default_attributes = {})
9
9
  name = name.to_s
10
+ raise(ArgumentError, "Plugin already defined: #{name}") if @plugins.key?(name)
10
11
 
11
- if @plugins.key?(name)
12
- raise ArgumentError, "Plugin already defined: #{name}"
13
- end
14
-
15
- @plugins[name] = {
16
- uri: uri,
17
- default_attributes: default_attributes
18
- }
12
+ @plugins[name] = Plugin.new(uri, default_attributes)
19
13
  end
20
14
 
21
- def fetch(name)
22
- @plugins[name]
23
- end
15
+ def build(name, attributes = {})
16
+ plugin = @plugins[name.to_s]
17
+ raise(ArgumentError, "Plugin is not registered: #{resource}") unless plugin
24
18
 
25
- def to_definition
26
- # No-op
19
+ { plugin.uri => plugin.default_attributes.merge(attributes) }
27
20
  end
28
21
  end
29
22
  end
@@ -1,13 +1,9 @@
1
1
  module Buildkite
2
2
  module Builder
3
3
  class StepCollection
4
- attr_reader :templates
5
- attr_reader :plugins
6
4
  attr_reader :steps
7
5
 
8
- def initialize(templates, plugins)
9
- @templates = templates
10
- @plugins = plugins
6
+ def initialize
11
7
  @steps = []
12
8
  end
13
9
 
@@ -15,12 +11,12 @@ module Buildkite
15
11
  types = types.flatten
16
12
 
17
13
  @steps.each do |step|
18
- if types.include?(step.class.to_sym)
19
- yield step
20
- elsif step.is_a?(Group)
21
- step.data.steps.each(*types) do |step|
14
+ if step.class.to_sym == :group
15
+ step.steps.each(*types) do |step|
22
16
  yield step
23
17
  end
18
+ elsif types.include?(step.class.to_sym)
19
+ yield step
24
20
  elsif types.empty?
25
21
  yield step
26
22
  end
@@ -35,10 +31,6 @@ module Buildkite
35
31
  find(key) || raise(ArgumentError, "Can't find step with key: #{key}")
36
32
  end
37
33
 
38
- def add(step_class, template = nil, **args, &block)
39
- @steps.push(step_class.new(self, template, **args, &block)).last
40
- end
41
-
42
34
  def push(step)
43
35
  @steps.push(step)
44
36
  end
@@ -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__)
@@ -18,7 +17,6 @@ module Buildkite
18
17
  autoload :Processors, File.expand_path('builder/processors', __dir__)
19
18
  autoload :Rainbow, File.expand_path('builder/rainbow', __dir__)
20
19
  autoload :Plugin, File.expand_path('builder/plugin', __dir__)
21
- autoload :PluginCollection, File.expand_path('builder/plugin_collection', __dir__)
22
20
  autoload :StepCollection, File.expand_path('builder/step_collection', __dir__)
23
21
  autoload :PipelineCollection, File.expand_path('builder/pipeline_collection', __dir__)
24
22
  autoload :TemplateManager, File.expand_path('builder/template_manager', __dir__)
@@ -5,12 +5,7 @@ module Buildkite
5
5
  module Helpers
6
6
  module Plugins
7
7
  def plugin(name_or_source, plugin_attributes = {})
8
- attributes['plugins'] ||= Buildkite::Builder::PluginCollection.new(step_collection.plugins)
9
- attributes['plugins'].add(name_or_source, plugin_attributes)
10
- end
11
-
12
- def plugins
13
- attributes['plugins']
8
+ append(:plugins, { name_or_source => plugin_attributes })
14
9
  end
15
10
  end
16
11
  end
@@ -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(step_collection, template_name, **args, &block)
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
- instance_exec(@context, &template) if template
27
- instance_exec(@context, &block) if block_given?
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: 3.8.3
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-09 00:00:00.000000000 Z
12
+ date: 2022-12-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rainbow
@@ -113,19 +113,16 @@ files:
113
113
  - lib/buildkite/builder/extensions/env.rb
114
114
  - lib/buildkite/builder/extensions/lib.rb
115
115
  - lib/buildkite/builder/extensions/notify.rb
116
+ - lib/buildkite/builder/extensions/plugins.rb
116
117
  - lib/buildkite/builder/extensions/steps.rb
117
- - lib/buildkite/builder/extensions/sub_pipelines.rb
118
118
  - lib/buildkite/builder/extensions/use.rb
119
- - lib/buildkite/builder/group.rb
120
119
  - lib/buildkite/builder/loaders.rb
121
120
  - lib/buildkite/builder/loaders/abstract.rb
122
121
  - lib/buildkite/builder/loaders/extensions.rb
123
122
  - lib/buildkite/builder/loaders/templates.rb
124
123
  - lib/buildkite/builder/logging_utils.rb
125
124
  - lib/buildkite/builder/pipeline.rb
126
- - lib/buildkite/builder/pipeline_collection.rb
127
125
  - lib/buildkite/builder/plugin.rb
128
- - lib/buildkite/builder/plugin_collection.rb
129
126
  - lib/buildkite/builder/plugin_manager.rb
130
127
  - lib/buildkite/builder/rainbow.rb
131
128
  - lib/buildkite/builder/step_collection.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
@@ -177,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
175
  - !ruby/object:Gem::Version
178
176
  version: '0'
179
177
  requirements: []
180
- rubygems_version: 3.3.7
178
+ rubygems_version: 3.3.26
181
179
  signing_key:
182
180
  specification_version: 4
183
181
  summary: A gem for programmatically creating Buildkite pipelines.
@@ -1,107 +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(
32
- context.data.steps.templates,
33
- context.data.steps.plugins
34
- )
35
- @data.notify = []
36
- @data.env = {}
37
-
38
- # Use `clone` to copy over dsl's extended extensions
39
- @dsl = context.dsl.clone
40
- # Override dsl context to current pipeline
41
- @dsl.instance_variable_set(:@context, self)
42
-
43
- instance_eval(&block) if block_given?
44
- self
45
- end
46
-
47
- def to_h
48
- # Merge envs from main pipeline, since ruby does not have `reverse_merge` and
49
- # `data` does not allow keys override, we have to reset the data hash per key.
50
- @context.data.env.merge(data.env).each do |key, value|
51
- data.env[key] = value
52
- end
53
- data.to_definition
54
- end
55
-
56
- def method_missing(method_name, *args, **kwargs, &_block)
57
- @dsl.public_send(method_name, *args, **kwargs, &_block)
58
- end
59
-
60
- def pipeline_yml
61
- @pipeline_yml ||= "tmp/buildkite-builder/#{SecureRandom.urlsafe_base64}.yml"
62
- end
63
- end
64
-
65
- def prepare
66
- context.data.pipelines = PipelineCollection.new(context.artifacts)
67
- end
68
-
69
- dsl do
70
- def pipeline(name, &block)
71
- raise "Subpipeline must have a name" if name.empty?
72
- raise "Subpipeline does not allow nested in another Subpipeline" if context.is_a?(Buildkite::Builder::Extensions::SubPipelines::Pipeline)
73
-
74
- sub_pipeline = Buildkite::Builder::Extensions::SubPipelines::Pipeline.new(name, context, &block)
75
- context.data.pipelines.add(sub_pipeline)
76
-
77
- trigger_step = context.data.steps.add(Pipelines::Steps::Trigger)
78
- trigger_step.trigger(name)
79
-
80
- build_options = {
81
- message: '${BUILDKITE_MESSAGE}',
82
- commit: '${BUILDKITE_COMMIT}',
83
- branch: '${BUILDKITE_BRANCH}',
84
- env: {
85
- BUILDKITE_PULL_REQUEST: '${BUILDKITE_PULL_REQUEST}',
86
- BUILDKITE_PULL_REQUEST_BASE_BRANCH: '${BUILDKITE_PULL_REQUEST_BASE_BRANCH}',
87
- BUILDKITE_PULL_REQUEST_REPO: '${BUILDKITE_PULL_REQUEST_REPO}',
88
- BKB_SUBPIPELINE_FILE: sub_pipeline.pipeline_yml
89
- }
90
- }
91
- build_options.merge!(sub_pipeline.build) if sub_pipeline.build
92
-
93
- trigger_step.build(build_options)
94
- trigger_step.key(sub_pipeline.key || "subpipeline_#{name}_#{context.data.pipelines.count}")
95
- trigger_step.label(sub_pipeline.label || name.capitalize)
96
- trigger_step.async(sub_pipeline.async || false)
97
- trigger_step.branches(sub_pipeline.branches) if sub_pipeline.branches
98
- trigger_step.condition(sub_pipeline.condition) if sub_pipeline.condition
99
- trigger_step.depends_on(*sub_pipeline.get('depends_on')) if sub_pipeline.get('depends_on')
100
- trigger_step.allow_dependency_failure(sub_pipeline.allow_dependency_failure || false)
101
- trigger_step.skip(sub_pipeline.skip || false)
102
- end
103
- end
104
- end
105
- end
106
- end
107
- end
@@ -1,44 +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(
20
- context.data.steps.templates,
21
- context.data.steps.plugins
22
- )
23
- @data.notify = []
24
-
25
- # Use `clone` to copy over dsl's extended extensions
26
- @dsl = context.dsl.clone
27
- # Override dsl context to current group
28
- @dsl.instance_variable_set(:@context, self)
29
-
30
- instance_eval(&block) if block_given?
31
- self
32
- end
33
-
34
- def to_h
35
- attributes = super
36
- { group: label }.merge(attributes).merge(data.to_definition)
37
- end
38
-
39
- def method_missing(method_name, *args, **kwargs, &_block)
40
- @dsl.public_send(method_name, *args, **kwargs, &_block)
41
- end
42
- end
43
- end
44
- 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
@@ -1,49 +0,0 @@
1
- module Buildkite
2
- module Builder
3
- class PluginCollection
4
- attr_reader :plugin_manager
5
-
6
- def initialize(plugin_manager)
7
- @plugin_manager = plugin_manager
8
- @collection = []
9
- end
10
-
11
- def add(resource, attributes = {})
12
- plugin =
13
- case resource
14
- when Symbol
15
- registered_plugin = plugin_manager.fetch(resource.to_s)
16
-
17
- raise ArgumentError, "Plugin `#{resource}` does not exist" unless registered_plugin
18
-
19
- Plugin.new(registered_plugin[:uri], registered_plugin[:default_attributes].merge(attributes))
20
- when String
21
- Plugin.new(resource, attributes)
22
- when Plugin
23
- resource
24
- else
25
- raise ArgumentError, "Unknown plugin `#{resource.inspect}`"
26
- end
27
-
28
- @collection.push(plugin).last
29
- end
30
-
31
- def find(source)
32
- source_string =
33
- case source
34
- when String then source
35
- when Plugin then source.source
36
- else raise ArgumentError, "Unknown source #{source.inspect}"
37
- end
38
-
39
- @collection.select do |plugin|
40
- plugin.source == source_string
41
- end
42
- end
43
-
44
- def to_definition
45
- @collection.map(&:to_h)
46
- end
47
- end
48
- end
49
- end