buildkite-builder 1.1.0 → 1.2.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 +1 -1
- data/VERSION +1 -1
- data/lib/buildkite/builder.rb +0 -1
- data/lib/buildkite/builder/commands/abstract.rb +49 -4
- data/lib/buildkite/builder/commands/preview.rb +1 -15
- data/lib/buildkite/builder/commands/run.rb +39 -7
- data/lib/buildkite/builder/context.rb +2 -0
- metadata +2 -3
- data/lib/buildkite/builder/runner.rb +0 -77
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fafb5222b3bb1b03be360545674b957e7ecd2ec8d21ea4ac9ff59620626c584
|
4
|
+
data.tar.gz: 0223fba9082408be91fc3a38fc2e2a6eaec74e4fb45ec9fa6b121edc10bff07f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fa3c8ca51711531338492b8b2072b2f62fac4bfee34e81594423f25bab218b373182014a72dbcf0b274a004ae4bedf703a62403c1dd1d6b27dbbd040fe0d4da
|
7
|
+
data.tar.gz: 8e33e6990c3c6c33a88d380a4d45fbd655848f790cce0a50758a960fab6ffb2cbc59bb359e083cbe072c51141e975bbeb528a7d4269b55dd5e87f52eb2541ce4
|
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/lib/buildkite/builder.rb
CHANGED
@@ -14,7 +14,6 @@ module Buildkite
|
|
14
14
|
autoload :Manifest, File.expand_path('builder/manifest', __dir__)
|
15
15
|
autoload :Processors, File.expand_path('builder/processors', __dir__)
|
16
16
|
autoload :Rainbow, File.expand_path('builder/rainbow', __dir__)
|
17
|
-
autoload :Runner, File.expand_path('builder/runner', __dir__)
|
18
17
|
|
19
18
|
BUILDKITE_DIRECTORY_NAME = Pathname.new('.buildkite').freeze
|
20
19
|
|
@@ -6,6 +6,18 @@ module Buildkite
|
|
6
6
|
module Builder
|
7
7
|
module Commands
|
8
8
|
class Abstract
|
9
|
+
PIPELINES_DIRECTORY = 'pipelines'
|
10
|
+
POSSIBLE_PIPELINE_PATHS = [
|
11
|
+
File.join('.buildkite', Context::PIPELINE_DEFINITION_FILE),
|
12
|
+
File.join('buildkite', Context::PIPELINE_DEFINITION_FILE),
|
13
|
+
File.join(Context::PIPELINE_DEFINITION_FILE)
|
14
|
+
].freeze
|
15
|
+
POSSIBLE_PIPELINES_PATHS = [
|
16
|
+
File.join('.buildkite', PIPELINES_DIRECTORY),
|
17
|
+
File.join('buildkite', PIPELINES_DIRECTORY),
|
18
|
+
File.join(PIPELINES_DIRECTORY)
|
19
|
+
].freeze
|
20
|
+
|
9
21
|
class << self
|
10
22
|
attr_accessor :description
|
11
23
|
|
@@ -35,6 +47,8 @@ module Buildkite
|
|
35
47
|
if options[:help]
|
36
48
|
puts options[:help]
|
37
49
|
return
|
50
|
+
elsif !pipeline_path
|
51
|
+
abort "Unable to find pipeline"
|
38
52
|
end
|
39
53
|
|
40
54
|
run
|
@@ -42,6 +56,10 @@ module Buildkite
|
|
42
56
|
|
43
57
|
private
|
44
58
|
|
59
|
+
def pipeline_slug
|
60
|
+
ARGV.last || Buildkite.env&.pipeline_slug
|
61
|
+
end
|
62
|
+
|
45
63
|
def command_name
|
46
64
|
Commands::COMMANDS.key(self.class.name.split('::').last.to_sym)
|
47
65
|
end
|
@@ -51,12 +69,39 @@ module Buildkite
|
|
51
69
|
# Subclasses should override to parse options.
|
52
70
|
end
|
53
71
|
|
54
|
-
def
|
55
|
-
@
|
72
|
+
def log
|
73
|
+
@log ||= begin
|
74
|
+
Logger.new($stdout).tap do |logger|
|
75
|
+
logger.formatter = proc do |_severity, _datetime, _progname, msg|
|
76
|
+
"#{msg}\n"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
56
80
|
end
|
57
81
|
|
58
|
-
def
|
59
|
-
|
82
|
+
def pipeline_path
|
83
|
+
@pipeline_path ||=
|
84
|
+
find_root_by_main_pipeline ||
|
85
|
+
find_root_by_multi_pipeline
|
86
|
+
end
|
87
|
+
|
88
|
+
def find_root_by_main_pipeline
|
89
|
+
POSSIBLE_PIPELINE_PATHS.map { |path| Builder.root.join(path) }.find(&:exist?)&.dirname
|
90
|
+
end
|
91
|
+
|
92
|
+
def find_root_by_multi_pipeline
|
93
|
+
pipelines_path = POSSIBLE_PIPELINES_PATHS.map { |path| Builder.root.join(path) }.find(&:directory?)
|
94
|
+
|
95
|
+
if pipelines_path
|
96
|
+
if pipeline_slug
|
97
|
+
path = pipelines_path.join(pipeline_slug)
|
98
|
+
path if path.directory?
|
99
|
+
elsif pipelines_path.children.one?
|
100
|
+
pipelines_path.children.first
|
101
|
+
else
|
102
|
+
raise 'Your project has multiple pipelines, please specify one.'
|
103
|
+
end
|
104
|
+
end
|
60
105
|
end
|
61
106
|
end
|
62
107
|
end
|
@@ -9,21 +9,7 @@ module Buildkite
|
|
9
9
|
self.description = 'Outputs the pipeline YAML.'
|
10
10
|
|
11
11
|
def run
|
12
|
-
|
13
|
-
|
14
|
-
if !pipeline && !root_pipeline?
|
15
|
-
if available_pipelines.one?
|
16
|
-
pipeline = available_pipelines.first
|
17
|
-
else
|
18
|
-
raise 'You must specify a pipeline'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
puts Runner.new(pipeline: pipeline).run.to_yaml
|
23
|
-
end
|
24
|
-
|
25
|
-
def root_pipeline?
|
26
|
-
pipelines_path.join(Context::PIPELINE_DEFINITION_FILE).exist?
|
12
|
+
puts Context.build(pipeline_path).pipeline.to_yaml
|
27
13
|
end
|
28
14
|
end
|
29
15
|
end
|
@@ -1,25 +1,57 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'tempfile'
|
4
|
+
|
3
5
|
module Buildkite
|
4
6
|
module Builder
|
5
7
|
module Commands
|
6
8
|
class Run < Abstract
|
7
9
|
private
|
10
|
+
include LoggingUtils
|
11
|
+
using Rainbow
|
8
12
|
|
9
13
|
self.description = 'Builds and uploads the generated pipeline.'
|
10
14
|
|
11
15
|
def run
|
16
|
+
relative_pipeline_path = pipeline_path.relative_path_from(Builder.root)
|
17
|
+
|
12
18
|
# This entrypoint is for running on CI. It expects certain environment
|
13
|
-
# variables to be set.
|
14
|
-
|
15
|
-
|
16
|
-
|
19
|
+
# variables to be set. It also uploads the pipeline to Buildkite.
|
20
|
+
log.info "#{'+++ ' if Buildkite.env}🧰 " + 'Buildkite Builder'.color(:springgreen) + " ─ #{relative_pipeline_path.to_s.yellow}"
|
21
|
+
context = Context.new(pipeline_path, logger: log)
|
22
|
+
|
23
|
+
results = benchmark("\nDone (%s)".color(:springgreen)) do
|
24
|
+
context.build
|
25
|
+
end
|
26
|
+
log.info(results)
|
27
|
+
|
28
|
+
upload(context.pipeline)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
17
32
|
|
18
|
-
|
19
|
-
|
33
|
+
def pipeline_path
|
34
|
+
pipeline_path_override || super
|
35
|
+
end
|
36
|
+
|
37
|
+
def pipeline_path_override
|
38
|
+
if ENV['BUILDKITE_BUILDER_PIPELINE_PATH']
|
39
|
+
path = Pathname.new(ENV['BUILDKITE_BUILDER_PIPELINE_PATH'])
|
40
|
+
path.absolute? ? path : Builder.root.join(path)
|
20
41
|
end
|
42
|
+
end
|
21
43
|
|
22
|
-
|
44
|
+
def upload(pipeline)
|
45
|
+
# Upload the pipeline.
|
46
|
+
Tempfile.create(['pipeline', '.yml']) do |file|
|
47
|
+
file.sync = true
|
48
|
+
file.write(pipeline.to_yaml)
|
49
|
+
|
50
|
+
log.info '+++ :paperclip: Uploading artifact'
|
51
|
+
Buildkite::Pipelines::Command.artifact!(:upload, file.path)
|
52
|
+
log.info '+++ :pipeline: Uploading pipeline'
|
53
|
+
Buildkite::Pipelines::Command.pipeline!(:upload, file.path)
|
54
|
+
end
|
23
55
|
end
|
24
56
|
end
|
25
57
|
end
|
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: 1.
|
4
|
+
version: 1.2.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: 2021-02-
|
12
|
+
date: 2021-02-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sorted_set
|
@@ -148,7 +148,6 @@ files:
|
|
148
148
|
- lib/buildkite/builder/processors.rb
|
149
149
|
- lib/buildkite/builder/processors/abstract.rb
|
150
150
|
- lib/buildkite/builder/rainbow.rb
|
151
|
-
- lib/buildkite/builder/runner.rb
|
152
151
|
- lib/buildkite/env.rb
|
153
152
|
- lib/buildkite/pipelines.rb
|
154
153
|
- lib/buildkite/pipelines/api.rb
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bundler'
|
4
|
-
require 'pathname'
|
5
|
-
require 'tempfile'
|
6
|
-
require 'logger'
|
7
|
-
|
8
|
-
module Buildkite
|
9
|
-
module Builder
|
10
|
-
class Runner
|
11
|
-
include LoggingUtils
|
12
|
-
using Rainbow
|
13
|
-
|
14
|
-
PIPELINES_PATH = Pathname.new('pipelines').freeze
|
15
|
-
|
16
|
-
attr_reader :options
|
17
|
-
|
18
|
-
def initialize(**options)
|
19
|
-
@options = options
|
20
|
-
end
|
21
|
-
|
22
|
-
def run
|
23
|
-
log.info "#{'+++ ' if Buildkite.env}🧰 " + 'Buildkite Builder'.color(:springgreen) + " ─ #{@options[:pipeline].yellow}"
|
24
|
-
context = Context.new(root, logger: log)
|
25
|
-
|
26
|
-
results = benchmark("\nDone (%s)".color(:springgreen)) do
|
27
|
-
context.build
|
28
|
-
end
|
29
|
-
log.info(results)
|
30
|
-
|
31
|
-
if options[:upload]
|
32
|
-
upload(context.pipeline)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Always return the pipeline.
|
36
|
-
context.pipeline
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def log
|
42
|
-
@log ||= begin
|
43
|
-
Logger.new($stdout).tap do |logger|
|
44
|
-
logger.formatter = proc do |_severity, _datetime, _progname, msg|
|
45
|
-
"#{msg}\n"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def upload(pipeline)
|
52
|
-
Tempfile.create(['pipeline', '.yml']) do |file|
|
53
|
-
file.sync = true
|
54
|
-
file.write(pipeline.to_yaml)
|
55
|
-
|
56
|
-
log.info '+++ :paperclip: Uploading artifact'
|
57
|
-
Buildkite::Pipelines::Command.artifact!(:upload, file.path)
|
58
|
-
log.info '+++ :pipeline: Uploading pipeline'
|
59
|
-
Buildkite::Pipelines::Command.pipeline!(:upload, file.path)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def root
|
64
|
-
@root ||= begin
|
65
|
-
path = Builder.root.join(Builder::BUILDKITE_DIRECTORY_NAME)
|
66
|
-
if options[:pipeline]
|
67
|
-
pipeline_path = path.join(PIPELINES_PATH).join(options[:pipeline])
|
68
|
-
if pipeline_path.directory?
|
69
|
-
path = pipeline_path
|
70
|
-
end
|
71
|
-
end
|
72
|
-
path
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|