buildkite-builder 1.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/CHANGELOG.md +0 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +13 -0
  7. data/Gemfile.lock +56 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/bin/buildkite-builder +6 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/buildkite-builder.gemspec +28 -0
  15. data/lib/buildkite-builder.rb +14 -0
  16. data/lib/buildkite/builder.rb +54 -0
  17. data/lib/buildkite/builder/commands.rb +49 -0
  18. data/lib/buildkite/builder/commands/abstract.rb +64 -0
  19. data/lib/buildkite/builder/commands/files.rb +25 -0
  20. data/lib/buildkite/builder/commands/preview.rb +29 -0
  21. data/lib/buildkite/builder/definition.rb +24 -0
  22. data/lib/buildkite/builder/file_resolver.rb +59 -0
  23. data/lib/buildkite/builder/github.rb +71 -0
  24. data/lib/buildkite/builder/loaders.rb +12 -0
  25. data/lib/buildkite/builder/loaders/abstract.rb +40 -0
  26. data/lib/buildkite/builder/loaders/manifests.rb +23 -0
  27. data/lib/buildkite/builder/loaders/processors.rb +37 -0
  28. data/lib/buildkite/builder/loaders/templates.rb +25 -0
  29. data/lib/buildkite/builder/logging_utils.rb +24 -0
  30. data/lib/buildkite/builder/manifest.rb +89 -0
  31. data/lib/buildkite/builder/manifest/rule.rb +51 -0
  32. data/lib/buildkite/builder/processors.rb +9 -0
  33. data/lib/buildkite/builder/processors/abstract.rb +76 -0
  34. data/lib/buildkite/builder/rainbow.rb +9 -0
  35. data/lib/buildkite/builder/runner.rb +114 -0
  36. data/lib/buildkite/env.rb +52 -0
  37. data/lib/buildkite/pipelines.rb +13 -0
  38. data/lib/buildkite/pipelines/api.rb +119 -0
  39. data/lib/buildkite/pipelines/attributes.rb +137 -0
  40. data/lib/buildkite/pipelines/command.rb +59 -0
  41. data/lib/buildkite/pipelines/helpers.rb +43 -0
  42. data/lib/buildkite/pipelines/helpers/block.rb +18 -0
  43. data/lib/buildkite/pipelines/helpers/command.rb +21 -0
  44. data/lib/buildkite/pipelines/helpers/depends_on.rb +13 -0
  45. data/lib/buildkite/pipelines/helpers/key.rb +13 -0
  46. data/lib/buildkite/pipelines/helpers/label.rb +18 -0
  47. data/lib/buildkite/pipelines/helpers/plugins.rb +24 -0
  48. data/lib/buildkite/pipelines/helpers/retry.rb +20 -0
  49. data/lib/buildkite/pipelines/helpers/skip.rb +15 -0
  50. data/lib/buildkite/pipelines/helpers/soft_fail.rb +15 -0
  51. data/lib/buildkite/pipelines/helpers/timeout_in_minutes.rb +17 -0
  52. data/lib/buildkite/pipelines/pipeline.rb +129 -0
  53. data/lib/buildkite/pipelines/plugin.rb +23 -0
  54. data/lib/buildkite/pipelines/steps.rb +15 -0
  55. data/lib/buildkite/pipelines/steps/abstract.rb +26 -0
  56. data/lib/buildkite/pipelines/steps/block.rb +20 -0
  57. data/lib/buildkite/pipelines/steps/command.rb +30 -0
  58. data/lib/buildkite/pipelines/steps/input.rb +20 -0
  59. data/lib/buildkite/pipelines/steps/skip.rb +28 -0
  60. data/lib/buildkite/pipelines/steps/trigger.rb +22 -0
  61. data/lib/buildkite/pipelines/steps/wait.rb +18 -0
  62. data/lib/vendor/rainbow/Changelog.md +101 -0
  63. data/lib/vendor/rainbow/Gemfile +30 -0
  64. data/lib/vendor/rainbow/LICENSE +20 -0
  65. data/lib/vendor/rainbow/README.markdown +225 -0
  66. data/lib/vendor/rainbow/Rakefile +11 -0
  67. data/lib/vendor/rainbow/lib/rainbow.rb +13 -0
  68. data/lib/vendor/rainbow/lib/rainbow/color.rb +150 -0
  69. data/lib/vendor/rainbow/lib/rainbow/ext/string.rb +64 -0
  70. data/lib/vendor/rainbow/lib/rainbow/global.rb +25 -0
  71. data/lib/vendor/rainbow/lib/rainbow/null_presenter.rb +100 -0
  72. data/lib/vendor/rainbow/lib/rainbow/presenter.rb +144 -0
  73. data/lib/vendor/rainbow/lib/rainbow/refinement.rb +14 -0
  74. data/lib/vendor/rainbow/lib/rainbow/string_utils.rb +22 -0
  75. data/lib/vendor/rainbow/lib/rainbow/version.rb +5 -0
  76. data/lib/vendor/rainbow/lib/rainbow/wrapper.rb +22 -0
  77. data/lib/vendor/rainbow/lib/rainbow/x11_color_names.rb +153 -0
  78. data/lib/vendor/rainbow/rainbow.gemspec +23 -0
  79. metadata +126 -0
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new
7
+
8
+ require 'rubocop/rake_task'
9
+ RuboCop::RakeTask.new
10
+
11
+ task default: %i[spec rubocop]
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'rainbow/global'
4
+
5
+ module Rainbow
6
+ def self.new
7
+ Wrapper.new(global.enabled)
8
+ end
9
+
10
+ self.enabled = false unless STDOUT.tty? && STDERR.tty?
11
+ self.enabled = false if ENV['TERM'] == 'dumb'
12
+ self.enabled = true if ENV['CLICOLOR_FORCE'] == '1'
13
+ end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rainbow
4
+ class Color
5
+ attr_reader :ground
6
+
7
+ def self.build(ground, values)
8
+ unless [1, 3].include?(values.size)
9
+ raise ArgumentError,
10
+ "Wrong number of arguments for color definition, should be 1 or 3"
11
+ end
12
+
13
+ color = values.size == 1 ? values.first : values
14
+
15
+ case color
16
+ # NOTE: Properly handle versions before/after Ruby 2.4.0.
17
+ # Ruby 2.4+ unifies Fixnum & Bignum into Integer.
18
+ # However previous versions would still use Fixnum.
19
+ # To avoid missing `Fixnum` input, call `0.class` which would
20
+ # return either `Integer` or `Fixnum`.
21
+ when 0.class
22
+ Indexed.new(ground, color)
23
+ when Symbol
24
+ if Named.color_names.include?(color)
25
+ Named.new(ground, color)
26
+ elsif X11Named.color_names.include?(color)
27
+ X11Named.new(ground, color)
28
+ else
29
+ raise ArgumentError,
30
+ "Unknown color name, valid names: " +
31
+ (Named.color_names + X11Named.color_names).join(', ')
32
+ end
33
+ when Array
34
+ RGB.new(ground, *color)
35
+ when String
36
+ RGB.new(ground, *parse_hex_color(color))
37
+ end
38
+ end
39
+
40
+ def self.parse_hex_color(hex)
41
+ unless hex =~ /^#?[a-f0-9]{6}/i
42
+ raise ArgumentError,
43
+ "Invalid hexadecimal RGB triplet. Valid format: /^#?[a-f0-9]{6}/i"
44
+ end
45
+
46
+ hex = hex.sub(/^#/, '')
47
+ r = hex[0..1].to_i(16)
48
+ g = hex[2..3].to_i(16)
49
+ b = hex[4..5].to_i(16)
50
+
51
+ [r, g, b]
52
+ end
53
+
54
+ class Indexed < Color
55
+ attr_reader :num
56
+
57
+ def initialize(ground, num)
58
+ @ground = ground
59
+ @num = num
60
+ end
61
+
62
+ def codes
63
+ code = num + (ground == :foreground ? 30 : 40)
64
+
65
+ [code]
66
+ end
67
+ end
68
+
69
+ class Named < Indexed
70
+ NAMES = {
71
+ black: 0,
72
+ red: 1,
73
+ green: 2,
74
+ yellow: 3,
75
+ blue: 4,
76
+ magenta: 5,
77
+ cyan: 6,
78
+ white: 7,
79
+ default: 9
80
+ }.freeze
81
+
82
+ def self.color_names
83
+ NAMES.keys
84
+ end
85
+
86
+ def self.valid_names
87
+ color_names.join(', ')
88
+ end
89
+
90
+ def initialize(ground, name)
91
+ unless Named.color_names.include?(name)
92
+ raise ArgumentError,
93
+ "Unknown color name, valid names: #{self.class.valid_names}"
94
+ end
95
+
96
+ super(ground, NAMES[name])
97
+ end
98
+ end
99
+
100
+ class RGB < Indexed
101
+ attr_reader :r, :g, :b
102
+
103
+ def self.to_ansi_domain(value)
104
+ (6 * (value / 256.0)).to_i
105
+ end
106
+
107
+ def initialize(ground, *values)
108
+ if values.min.negative? || values.max > 255
109
+ raise ArgumentError, "RGB value outside 0-255 range"
110
+ end
111
+
112
+ super(ground, 8)
113
+ @r, @g, @b = values
114
+ end
115
+
116
+ def codes
117
+ super + [5, code_from_rgb]
118
+ end
119
+
120
+ private
121
+
122
+ def code_from_rgb
123
+ 16 + self.class.to_ansi_domain(r) * 36 +
124
+ self.class.to_ansi_domain(g) * 6 +
125
+ self.class.to_ansi_domain(b)
126
+ end
127
+ end
128
+
129
+ class X11Named < RGB
130
+ include X11ColorNames
131
+
132
+ def self.color_names
133
+ NAMES.keys
134
+ end
135
+
136
+ def self.valid_names
137
+ color_names.join(', ')
138
+ end
139
+
140
+ def initialize(ground, name)
141
+ unless X11Named.color_names.include?(name)
142
+ raise ArgumentError,
143
+ "Unknown color name, valid names: #{self.class.valid_names}"
144
+ end
145
+
146
+ super(ground, *NAMES[name])
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rainbow'
4
+
5
+ module Rainbow
6
+ module Ext
7
+ module String
8
+ module InstanceMethods
9
+ def foreground(*color)
10
+ Rainbow(self).foreground(*color)
11
+ end
12
+
13
+ alias color foreground
14
+ alias colour foreground
15
+
16
+ def background(*color)
17
+ Rainbow(self).background(*color)
18
+ end
19
+
20
+ def reset
21
+ Rainbow(self).reset
22
+ end
23
+
24
+ def bright
25
+ Rainbow(self).bright
26
+ end
27
+
28
+ def faint
29
+ Rainbow(self).faint
30
+ end
31
+
32
+ def italic
33
+ Rainbow(self).italic
34
+ end
35
+
36
+ def underline
37
+ Rainbow(self).underline
38
+ end
39
+
40
+ def blink
41
+ Rainbow(self).blink
42
+ end
43
+
44
+ def inverse
45
+ Rainbow(self).inverse
46
+ end
47
+
48
+ def hide
49
+ Rainbow(self).hide
50
+ end
51
+
52
+ def cross_out
53
+ Rainbow(self).cross_out
54
+ end
55
+
56
+ alias strike cross_out
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ class String
63
+ include Rainbow::Ext::String::InstanceMethods
64
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'wrapper'
4
+
5
+ module Rainbow
6
+ def self.global
7
+ @global ||= Wrapper.new
8
+ end
9
+
10
+ def self.enabled
11
+ global.enabled
12
+ end
13
+
14
+ def self.enabled=(value)
15
+ global.enabled = value
16
+ end
17
+
18
+ def self.uncolor(string)
19
+ StringUtils.uncolor(string)
20
+ end
21
+ end
22
+
23
+ def Rainbow(string)
24
+ Rainbow.global.wrap(string.to_s)
25
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rainbow
4
+ class NullPresenter < ::String
5
+ def color(*_values)
6
+ self
7
+ end
8
+
9
+ def background(*_values)
10
+ self
11
+ end
12
+
13
+ def reset
14
+ self
15
+ end
16
+
17
+ def bright
18
+ self
19
+ end
20
+
21
+ def faint
22
+ self
23
+ end
24
+
25
+ def italic
26
+ self
27
+ end
28
+
29
+ def underline
30
+ self
31
+ end
32
+
33
+ def blink
34
+ self
35
+ end
36
+
37
+ def inverse
38
+ self
39
+ end
40
+
41
+ def hide
42
+ self
43
+ end
44
+
45
+ def cross_out
46
+ self
47
+ end
48
+
49
+ def black
50
+ self
51
+ end
52
+
53
+ def red
54
+ self
55
+ end
56
+
57
+ def green
58
+ self
59
+ end
60
+
61
+ def yellow
62
+ self
63
+ end
64
+
65
+ def blue
66
+ self
67
+ end
68
+
69
+ def magenta
70
+ self
71
+ end
72
+
73
+ def cyan
74
+ self
75
+ end
76
+
77
+ def white
78
+ self
79
+ end
80
+
81
+ def method_missing(method_name, *args)
82
+ if Color::X11Named.color_names.include?(method_name) && args.empty?
83
+ self
84
+ else
85
+ super
86
+ end
87
+ end
88
+
89
+ def respond_to_missing?(method_name, *args)
90
+ Color::X11Named.color_names.include?(method_name) && args.empty? || super
91
+ end
92
+
93
+ alias foreground color
94
+ alias fg color
95
+ alias bg background
96
+ alias bold bright
97
+ alias dark faint
98
+ alias strike cross_out
99
+ end
100
+ end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'string_utils'
4
+ require_relative 'x11_color_names'
5
+ require_relative 'color'
6
+
7
+ module Rainbow
8
+ class Presenter < ::String
9
+ TERM_EFFECTS = {
10
+ reset: 0,
11
+ bright: 1,
12
+ faint: 2,
13
+ italic: 3,
14
+ underline: 4,
15
+ blink: 5,
16
+ inverse: 7,
17
+ hide: 8,
18
+ cross_out: 9
19
+ }.freeze
20
+
21
+ # Sets color of this text.
22
+ def color(*values)
23
+ wrap_with_sgr(Color.build(:foreground, values).codes)
24
+ end
25
+
26
+ alias foreground color
27
+ alias fg color
28
+
29
+ # Sets background color of this text.
30
+ def background(*values)
31
+ wrap_with_sgr(Color.build(:background, values).codes)
32
+ end
33
+
34
+ alias bg background
35
+
36
+ # Resets terminal to default colors/backgrounds.
37
+ #
38
+ # It shouldn't be needed to use this method because all methods
39
+ # append terminal reset code to end of string.
40
+ def reset
41
+ wrap_with_sgr(TERM_EFFECTS[:reset])
42
+ end
43
+
44
+ # Turns on bright/bold for this text.
45
+ def bright
46
+ wrap_with_sgr(TERM_EFFECTS[:bright])
47
+ end
48
+
49
+ alias bold bright
50
+
51
+ # Turns on faint/dark for this text (not well supported by terminal
52
+ # emulators).
53
+ def faint
54
+ wrap_with_sgr(TERM_EFFECTS[:faint])
55
+ end
56
+
57
+ alias dark faint
58
+
59
+ # Turns on italic style for this text (not well supported by terminal
60
+ # emulators).
61
+ def italic
62
+ wrap_with_sgr(TERM_EFFECTS[:italic])
63
+ end
64
+
65
+ # Turns on underline decoration for this text.
66
+ def underline
67
+ wrap_with_sgr(TERM_EFFECTS[:underline])
68
+ end
69
+
70
+ # Turns on blinking attribute for this text (not well supported by terminal
71
+ # emulators).
72
+ def blink
73
+ wrap_with_sgr(TERM_EFFECTS[:blink])
74
+ end
75
+
76
+ # Inverses current foreground/background colors.
77
+ def inverse
78
+ wrap_with_sgr(TERM_EFFECTS[:inverse])
79
+ end
80
+
81
+ # Hides this text (set its color to the same as background).
82
+ def hide
83
+ wrap_with_sgr(TERM_EFFECTS[:hide])
84
+ end
85
+
86
+ def cross_out
87
+ wrap_with_sgr(TERM_EFFECTS[:cross_out])
88
+ end
89
+
90
+ alias strike cross_out
91
+
92
+ def black
93
+ color(:black)
94
+ end
95
+
96
+ def red
97
+ color(:red)
98
+ end
99
+
100
+ def green
101
+ color(:green)
102
+ end
103
+
104
+ def yellow
105
+ color(:yellow)
106
+ end
107
+
108
+ def blue
109
+ color(:blue)
110
+ end
111
+
112
+ def magenta
113
+ color(:magenta)
114
+ end
115
+
116
+ def cyan
117
+ color(:cyan)
118
+ end
119
+
120
+ def white
121
+ color(:white)
122
+ end
123
+
124
+ # We take care of X11 color method call here.
125
+ # Such as #aqua, #ghostwhite.
126
+ def method_missing(method_name, *args)
127
+ if Color::X11Named.color_names.include?(method_name) && args.empty?
128
+ color(method_name)
129
+ else
130
+ super
131
+ end
132
+ end
133
+
134
+ def respond_to_missing?(method_name, *args)
135
+ Color::X11Named.color_names.include?(method_name) && args.empty? || super
136
+ end
137
+
138
+ private
139
+
140
+ def wrap_with_sgr(codes) #:nodoc:
141
+ self.class.new(StringUtils.wrap_with_sgr(self, [*codes]))
142
+ end
143
+ end
144
+ end