concourse 0.38.0 → 0.39.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4545117f3a9ab7e87861ed9d985f4ce559ef5636ab4c90f9dc72d0415a53f65d
4
- data.tar.gz: d15f26777dff8e5f63e0da5ffbab5e036b83381680bb3782039843a323dab64e
3
+ metadata.gz: cd55e825ebdac1ac76b5d97ac48b4ddbf7dc8771e6e6a1855bb38ed9dde92a99
4
+ data.tar.gz: db17dddab390c5755e8954e30ed4b91bbde773afe7a8a17b0f526368c8af7391
5
5
  SHA512:
6
- metadata.gz: d3c56b95c58c91946b229e17f46adb1131268354100fc346ac98829db3c17e056c4f2c70ebad9dd8cafc5dd2f8c2b8d2e038e413d0d5404782bc078b4a8d94d7
7
- data.tar.gz: fff0b1b7943cb4fc1fbd67a3c2a4360682718eefa0baca151a09f694ccb41882eeeecb58fe6742e32f6e2d1d02a8eef2dfbaeba06137dfa56304467d193543c2
6
+ metadata.gz: 5c7f87dd6367321ab38c19881905a472b68c987199d6601817468cd171653a41ed37be9cb9f40bec19577c2daabe079eaa380e6b5106f57e50a56febba584720
7
+ data.tar.gz: 8c489739957e3a872f85345d7376e403464b0545548eaf296d0a549d3056113f8d6a350efc6157cf1e8181791f1184247958a096f46b0198fe1954c0f332346b
@@ -1,5 +1,10 @@
1
1
  # concourse-gem changelog
2
2
 
3
+ ## v0.39.0 / 2020-11-16
4
+
5
+ * add support for [YTT](https://get-ytt.io/) pipeline templates
6
+
7
+
3
8
  ## v0.38.0 / 2020-10-01
4
9
 
5
10
  * add ruby 3.0-rc
data/README.md CHANGED
@@ -22,12 +22,14 @@ Here's an example pipeline maintained by this gem:
22
22
  - [Real-world Examples](#real-world-examples)
23
23
  - [Concourse pipeline configuration](#concourse-pipeline-configuration)
24
24
  * [ERB Templating](#erb-templating)
25
- * [`RUBIES`](#rubies)
25
+ * [YTT Templating](#ytt-templating)
26
+ * [Mixing ERB and YTT Templating](#mixing-erb-and-ytt-templating)
26
27
  * [Secrets](#secrets)
27
28
  * [Multiple pipelines](#multiple-pipelines)
28
29
  - [Configuration](#configuration)
29
30
  * [`directory`: Concourse subdirectory name](#directory-concourse-subdirectory-name)
30
31
  * [`fly_target`: Concourse `fly` target name](#fly_target-concourse-fly-target-name)
32
+ * [`ytt`: boolean, or a YTT configuration directory name](#ytt-boolean-or-a-ytt-configuration-directory-name)
31
33
  * [`format`: Emit the final pipelines in `fly format-pipeline` canonical format](#format-emit-the-final-pipelines-in-fly-format-pipeline-canonical-format)
32
34
  * [`pipeline_erb_filename`: Pipeline filename](#pipeline_erb_filename-pipeline-filename)
33
35
  * [`secrets_filename`: Secrets filename](#secrets_filename-secrets-filename)
@@ -122,7 +124,7 @@ resources:
122
124
  (If you're unfamiliar with ERB and how you can mix Ruby into the document, you can [read about it here](https://www.stuartellis.name/articles/erb/).)
123
125
 
124
126
 
125
- ### `RUBIES`
127
+ #### `RUBIES`
126
128
 
127
129
  The ruby variable `RUBIES` is defined in the ERB binding during pipeline file generation. This variable looks like:
128
130
 
@@ -158,6 +160,71 @@ jobs:
158
160
  Note that the `windows` rubies are not Docker images, since Concourse's Houdini backend doesn't use Docker. Instead, these are implicitly referring to the supported ruby versions installed by the BOSH release at https://github.com/flavorjones/windows-ruby-dev-tools-release
159
161
 
160
162
 
163
+ ### YTT Templating
164
+
165
+ As of v0.39.0, YTT templates are also supported. It's off by default, but you can enable it by passing `ytt: true` to the `Concourse.new` or `Concourse#add_pipeline` calls in your Rakefile (see below for more context).
166
+
167
+ Your Concourse pipeline configuration file, `<myproject>.yml` (or whatever you've configured with the `:pipeline_erb_filename` parameter), will be treated like a YTT template.
168
+
169
+ You can optionally specify a directory containing your YTT configuration files (`.star` files and `.yml` templates) so that you can inject project-specific logic.
170
+
171
+ (If you're unfamiliar with YTT, you can [read about it here](https://get-ytt.io/).)
172
+
173
+
174
+ #### Rubies
175
+
176
+ These YTT variables are defined by the gem, and can be used in your template:
177
+
178
+ ```starlark
179
+ #! ruby.star
180
+ cruby_versions = {
181
+ "supported": ["2.4", "2.5", "2.6", "2.7"],
182
+ "out_of_support": ["2.3", "2.2", "2.1", "2.0.0"],
183
+ "beta": ["3.0-rc"]
184
+ }
185
+ jruby_versions = {
186
+ "supported": ["9.2"],
187
+ "out_of_support": ["9.1"],
188
+ "beta": []
189
+ }
190
+ truffleruby_versions = {
191
+ "supported": ["stable"],
192
+ "out_of_support": [],
193
+ "beta": ["nightly"]
194
+ }
195
+ ```
196
+
197
+ Here's a simple example:
198
+
199
+ ``` yaml
200
+ # myproject.yml
201
+
202
+ #@ load("ruby.star", "cruby_versions")
203
+
204
+ ---
205
+ jobs:
206
+ #@ for ruby_version in cruby_versions["supported"]:
207
+ - name: #@ "ruby-{}".format(ruby_version)
208
+ plan:
209
+ ...
210
+ - task: rake-test
211
+ config:
212
+ platform: linux
213
+ image_resource:
214
+ type: docker-image
215
+ source:
216
+ repository: "ruby"
217
+ tag: #@ "mri-{}".format(ruby_version)
218
+ ...
219
+ #@ end
220
+ ```
221
+
222
+
223
+ ### Mixing ERB and YTT Templating
224
+
225
+ Why would you do this? Well, if you really want to, I'll tell you a secret: we treat the YTT templates as though they're *also* ERB templates. So go crazy.
226
+
227
+
161
228
  ### Secrets
162
229
 
163
230
  You can use a separate file to keep your pipeline variables secret. By default, `concourse/private.yml` will be used. This filename can also be configured (see below)
@@ -206,6 +273,10 @@ Note that when you use the block form:
206
273
  * it's not necessary to explicitly call `#create_tasks!`
207
274
  * only the pipelines declared via `#add_pipeline` will be managed
208
275
 
276
+ Note also that `Concourse#add_pipeline` takes additional options:
277
+
278
+ * `ytt`: same as the global `ytt` configuration below
279
+
209
280
 
210
281
  ## Configuration
211
282
 
@@ -227,6 +298,15 @@ Concourse.new("myproject", fly_target: "myci").create_tasks! # `fly -t myci <com
227
298
  ```
228
299
 
229
300
 
301
+ ### `ytt`: Enable YTT templating
302
+
303
+ By default, this option is `false` and pipelines are treated as ERB templates.
304
+
305
+ Setting this to `true` will run the file through first ERB (which will be a no-op if you're not using ERB) and then through YTT.
306
+
307
+ Setting this to a `String` argument containing a directory path will cause YTT to be invoked with a `-f` option loading that directory.
308
+
309
+
230
310
  ### `format`: Emit the final pipelines in `fly format-pipeline` canonical format
231
311
 
232
312
  If you'd prefer to have your final pipeline files in `fly`'s "canonical format" (via `format-pipeline`), then set this to true!
@@ -29,6 +29,7 @@ class Concourse
29
29
  attr_reader :fly_args
30
30
  attr_reader :secrets_filename
31
31
  attr_reader :format
32
+ attr_reader :ytt
32
33
 
33
34
  CONCOURSE_DOCKER_COMPOSE = "docker-compose.yml"
34
35
 
@@ -60,6 +61,7 @@ class Concourse
60
61
  @directory = options[:directory] || DEFAULT_DIRECTORY
61
62
  @fly_target = options[:fly_target] || DEFAULT_FLY_TARGET
62
63
  @format = options.has_key?(:format) ? options[:format] : false
64
+ @ytt = options.has_key?(:ytt) ? options[:ytt] : false
63
65
  @fly_args = options.keys.grep(/^fly_args_/).inject({}) do |hash, key|
64
66
  fly_command = key.to_s.gsub(/^fly_args_/, "").gsub("_", "-")
65
67
  hash[fly_command] = options[key]
@@ -74,12 +76,12 @@ class Concourse
74
76
  block.call(self)
75
77
  create_tasks!
76
78
  else
77
- add_pipeline(@project_name, (options[:pipeline_erb_filename] || "#{project_name}.yml"))
79
+ add_pipeline(@project_name, (options[:pipeline_erb_filename] || "#{project_name}.yml"), {ytt: ytt})
78
80
  end
79
81
  end
80
82
 
81
- def add_pipeline(name, erb_filename)
82
- @pipelines << Concourse::Pipeline.new(name, @directory, erb_filename)
83
+ def add_pipeline(name, erb_filename, options={})
84
+ @pipelines << Concourse::Pipeline.new(name, @directory, erb_filename, options)
83
85
  end
84
86
 
85
87
  def pipeline_subcommands(command)
@@ -95,9 +97,7 @@ class Concourse
95
97
  end
96
98
 
97
99
  def rake_pipeline_generate(pipeline)
98
- File.open pipeline.filename, "w" do |f|
99
- f.write erbify_file(pipeline.erb_filename, working_directory: directory)
100
- end
100
+ pipeline.generate
101
101
  fly "validate-pipeline", "-c #{pipeline.filename}"
102
102
  fly "format-pipeline", "-c #{pipeline.filename} -w" if format
103
103
  end
@@ -1,12 +1,31 @@
1
1
  class Concourse
2
2
  class Pipeline
3
- attr_reader :name, :directory, :erb_filename, :filename
3
+ include Concourse::Util
4
4
 
5
- def initialize name, directory, erb_filename
5
+ attr_reader :name, :directory, :erb_filename, :filename, :ytt
6
+
7
+ def initialize name, directory, erb_filename, options={}
6
8
  @name = name
7
9
  @directory = directory
8
10
  @erb_filename = File.join(@directory, erb_filename)
9
11
  @filename = File.join(@directory, erb_filename + ".generated")
12
+ @ytt = options.key?(:ytt) ? options[:ytt] : false
13
+ end
14
+
15
+ def generate
16
+ Tempfile.create(["pipeline", ".yml"]) do |f|
17
+ f.write erbify_file(erb_filename, working_directory: directory)
18
+ f.close
19
+
20
+ if ytt
21
+ ytt_args = ["-f #{f.path}"]
22
+ ytt_args << "-f #{File.expand_path(File.join(File.dirname(__FILE__), "ytt"))}"
23
+ ytt_args << "-f #{File.join(directory, ytt)}" if ytt.is_a?(String)
24
+ sh ["ytt", ytt_args, "> #{filename}"].flatten.join(" ")
25
+ else
26
+ FileUtils.mv f.path, filename, force: true
27
+ end
28
+ end
10
29
  end
11
30
  end
12
31
  end
@@ -2,5 +2,5 @@ require "rake"
2
2
  require "erb"
3
3
 
4
4
  class Concourse
5
- VERSION = "0.38.0"
5
+ VERSION = "0.39.0"
6
6
  end
@@ -0,0 +1,15 @@
1
+ cruby_versions = {
2
+ "supported": ["2.4", "2.5", "2.6", "2.7"],
3
+ "out_of_support": ["2.3", "2.2", "2.1", "2.0.0"],
4
+ "beta": ["3.0-rc"]
5
+ }
6
+ jruby_versions = {
7
+ "supported": ["9.2"],
8
+ "out_of_support": ["9.1"],
9
+ "beta": []
10
+ }
11
+ truffleruby_versions = {
12
+ "supported": ["stable"],
13
+ "out_of_support": [],
14
+ "beta": ["nightly"]
15
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: concourse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.38.0
4
+ version: 0.39.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Dalessio
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-01 00:00:00.000000000 Z
11
+ date: 2020-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: term-ansicolor
@@ -88,6 +88,7 @@ files:
88
88
  - lib/concourse/pipeline.rb
89
89
  - lib/concourse/util.rb
90
90
  - lib/concourse/version.rb
91
+ - lib/concourse/ytt/ruby.star
91
92
  homepage: https://github.com/flavorjones/concourse-gem
92
93
  licenses:
93
94
  - MIT
@@ -107,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  - !ruby/object:Gem::Version
108
109
  version: '0'
109
110
  requirements: []
110
- rubygems_version: 3.1.2
111
+ rubygems_version: 3.1.4
111
112
  signing_key:
112
113
  specification_version: 4
113
114
  summary: Rake tasks for Concourse pipelines.