concourse 0.35.0 → 0.40.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/CHANGELOG.md +25 -0
- data/README.md +89 -8
- data/lib/concourse.rb +8 -9
- data/lib/concourse/pipeline.rb +21 -2
- data/lib/concourse/version.rb +1 -1
- data/lib/concourse/ytt/ruby.star +15 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7a68a94db3a3d48f5cb12aaa4425f0b6d7f10eb9064d6baa4142096b5845b0c
|
4
|
+
data.tar.gz: a5ea2a78272347f1dd3a3f47c41ebb7762eebaaada5243816a08b39742e31d66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: acbba3ce3c68a8ffc965be062b04c032357e168386a0d266023f43ec5c4fe77c4f9057c8026e31423bbb310485e345b926ae942fb65f5f21202800fa1cb0ca74
|
7
|
+
data.tar.gz: 82707abc4ac5c9faea068b1076b1ffd820a9e0a4c928ca2bc80d4a49f8694da2c397c3206af2a4e867070686a60f82f4198f6121a98f57bb9fa15da9ed1632bd
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,30 @@
|
|
1
1
|
# concourse-gem changelog
|
2
2
|
|
3
|
+
## v0.40.0 / 2020-12-19
|
4
|
+
|
5
|
+
* remove ruby 2.4, which has reached EOL
|
6
|
+
|
7
|
+
|
8
|
+
## v0.39.0 / 2020-11-16
|
9
|
+
|
10
|
+
* add support for [YTT](https://get-ytt.io/) pipeline templates
|
11
|
+
|
12
|
+
|
13
|
+
## v0.38.0 / 2020-10-01
|
14
|
+
|
15
|
+
* add ruby 3.0-rc
|
16
|
+
|
17
|
+
|
18
|
+
## v0.37.0 / 2020-10-01
|
19
|
+
|
20
|
+
* add TruffleRuby ("truffle") as a known Ruby
|
21
|
+
|
22
|
+
|
23
|
+
## v0.36.0 / 2020-09-07
|
24
|
+
|
25
|
+
* remove generated pipelines from rake's "CLOBBER" global (generated pipelines have been recommended for checkin to source control since v0.26.0)
|
26
|
+
|
27
|
+
|
3
28
|
## v0.35.0 / 2020-09-07
|
4
29
|
|
5
30
|
* remove "clean" rake task (generated pipelines have been recommended for checkin to source control since v0.26.0)
|
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
|
-
* [
|
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,17 +124,18 @@ 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
|
-
|
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
|
|
129
131
|
``` ruby
|
130
132
|
# these numbers/names align with public docker image names
|
131
133
|
RUBIES = {
|
132
|
-
mri:
|
133
|
-
jruby:
|
134
|
-
rbx:
|
135
|
-
windows: %w[2.3 2.4 2.5 2.6]
|
134
|
+
mri: %w[2.5 2.6 2.7 3.0-rc], # docker repository: "ruby"
|
135
|
+
jruby: %w[9.2], # docker repository: "jruby"
|
136
|
+
rbx: %w[latest], # docker repository: "rubinius/docker"
|
137
|
+
windows: %w[2.3 2.4 2.5 2.6], # windows-ruby-dev-tools-release
|
138
|
+
truffle: %w[stable nightly] # docker repository: flavorjones/truffleruby
|
136
139
|
}
|
137
140
|
```
|
138
141
|
|
@@ -158,6 +161,71 @@ jobs:
|
|
158
161
|
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
162
|
|
160
163
|
|
164
|
+
### YTT Templating
|
165
|
+
|
166
|
+
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).
|
167
|
+
|
168
|
+
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.
|
169
|
+
|
170
|
+
You can optionally specify a directory containing your YTT configuration files (`.star` files and `.yml` templates) so that you can inject project-specific logic.
|
171
|
+
|
172
|
+
(If you're unfamiliar with YTT, you can [read about it here](https://get-ytt.io/).)
|
173
|
+
|
174
|
+
|
175
|
+
#### Rubies
|
176
|
+
|
177
|
+
These YTT variables are defined by the gem, and can be used in your template:
|
178
|
+
|
179
|
+
```starlark
|
180
|
+
#! ruby.star
|
181
|
+
cruby_versions = {
|
182
|
+
"out_of_support": ["2.4", "2.3", "2.2", "2.1", "2.0.0"],
|
183
|
+
"supported": ["2.5", "2.6", "2.7"],
|
184
|
+
"beta": ["3.0-rc"]
|
185
|
+
}
|
186
|
+
jruby_versions = {
|
187
|
+
"out_of_support": ["9.1"],
|
188
|
+
"supported": ["9.2"],
|
189
|
+
"beta": []
|
190
|
+
}
|
191
|
+
truffleruby_versions = {
|
192
|
+
"supported": ["stable"],
|
193
|
+
"out_of_support": [],
|
194
|
+
"beta": ["nightly"]
|
195
|
+
}
|
196
|
+
```
|
197
|
+
|
198
|
+
Here's a simple example:
|
199
|
+
|
200
|
+
``` yaml
|
201
|
+
# myproject.yml
|
202
|
+
|
203
|
+
#@ load("ruby.star", "cruby_versions")
|
204
|
+
|
205
|
+
---
|
206
|
+
jobs:
|
207
|
+
#@ for ruby_version in cruby_versions["supported"]:
|
208
|
+
- name: #@ "ruby-{}".format(ruby_version)
|
209
|
+
plan:
|
210
|
+
...
|
211
|
+
- task: rake-test
|
212
|
+
config:
|
213
|
+
platform: linux
|
214
|
+
image_resource:
|
215
|
+
type: docker-image
|
216
|
+
source:
|
217
|
+
repository: "ruby"
|
218
|
+
tag: #@ "mri-{}".format(ruby_version)
|
219
|
+
...
|
220
|
+
#@ end
|
221
|
+
```
|
222
|
+
|
223
|
+
|
224
|
+
### Mixing ERB and YTT Templating
|
225
|
+
|
226
|
+
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.
|
227
|
+
|
228
|
+
|
161
229
|
### Secrets
|
162
230
|
|
163
231
|
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 +274,10 @@ Note that when you use the block form:
|
|
206
274
|
* it's not necessary to explicitly call `#create_tasks!`
|
207
275
|
* only the pipelines declared via `#add_pipeline` will be managed
|
208
276
|
|
277
|
+
Note also that `Concourse#add_pipeline` takes additional options:
|
278
|
+
|
279
|
+
* `ytt`: same as the global `ytt` configuration below
|
280
|
+
|
209
281
|
|
210
282
|
## Configuration
|
211
283
|
|
@@ -227,6 +299,15 @@ Concourse.new("myproject", fly_target: "myci").create_tasks! # `fly -t myci <com
|
|
227
299
|
```
|
228
300
|
|
229
301
|
|
302
|
+
### `ytt`: Enable YTT templating
|
303
|
+
|
304
|
+
By default, this option is `false` and pipelines are treated as ERB templates.
|
305
|
+
|
306
|
+
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.
|
307
|
+
|
308
|
+
Setting this to a `String` argument containing a directory path will cause YTT to be invoked with a `-f` option loading that directory.
|
309
|
+
|
310
|
+
|
230
311
|
### `format`: Emit the final pipelines in `fly format-pipeline` canonical format
|
231
312
|
|
232
313
|
If you'd prefer to have your final pipeline files in `fly`'s "canonical format" (via `format-pipeline`), then set this to true!
|
@@ -349,7 +430,7 @@ rake concourse:task[job_task,fly_execute_args] # fly execute the specified task
|
|
349
430
|
|
350
431
|
where:
|
351
432
|
|
352
|
-
* _required_: `job_task` is formatted as `job-name/task-name`, for example, `ruby-2.
|
433
|
+
* _required_: `job_task` is formatted as `job-name/task-name`, for example, `ruby-2.7/rake-test`. (See `concourse:tasks` for a list of all available task names.)
|
353
434
|
* _optional_: `fly_execute_args` will default to map the project directory to a resource with the project name, e.g. `--input=myproject=.`, so your pipeline must name the input resource appropriately in order to use the default.
|
354
435
|
|
355
436
|
|
@@ -390,7 +471,7 @@ You can view that Concourse deployment at `http://127.0.0.1:8080` using the cred
|
|
390
471
|
To target that local cluster, simply prepend the `concourse:local` task on the command line. For example, to `fly execute` a task on the local cluster:
|
391
472
|
|
392
473
|
``` sh
|
393
|
-
rake concourse:local concourse:task[ruby-2.
|
474
|
+
rake concourse:local concourse:task[ruby-2.7/rake-task]
|
394
475
|
```
|
395
476
|
|
396
477
|
Or to push your pipelines to that local cluster:
|
data/lib/concourse.rb
CHANGED
@@ -11,10 +11,11 @@ class Concourse
|
|
11
11
|
|
12
12
|
# these numbers/names align with public docker image names
|
13
13
|
RUBIES = {
|
14
|
-
mri: %w[2.
|
14
|
+
mri: %w[2.5 2.6 2.7 3.0-rc], # docker repository: "ruby"
|
15
15
|
jruby: %w[9.2], # docker repository: "jruby"
|
16
16
|
rbx: %w[latest], # docker repository: "rubinius/docker"
|
17
17
|
windows: %w[2.3 2.4 2.5 2.6], # windows-ruby-dev-tools-release
|
18
|
+
truffle: %w[stable nightly] # docker repository: flavorjones/truffleruby
|
18
19
|
}
|
19
20
|
|
20
21
|
DEFAULT_DIRECTORY = "concourse"
|
@@ -28,6 +29,7 @@ class Concourse
|
|
28
29
|
attr_reader :fly_args
|
29
30
|
attr_reader :secrets_filename
|
30
31
|
attr_reader :format
|
32
|
+
attr_reader :ytt
|
31
33
|
|
32
34
|
CONCOURSE_DOCKER_COMPOSE = "docker-compose.yml"
|
33
35
|
|
@@ -59,6 +61,7 @@ class Concourse
|
|
59
61
|
@directory = options[:directory] || DEFAULT_DIRECTORY
|
60
62
|
@fly_target = options[:fly_target] || DEFAULT_FLY_TARGET
|
61
63
|
@format = options.has_key?(:format) ? options[:format] : false
|
64
|
+
@ytt = options.has_key?(:ytt) ? options[:ytt] : false
|
62
65
|
@fly_args = options.keys.grep(/^fly_args_/).inject({}) do |hash, key|
|
63
66
|
fly_command = key.to_s.gsub(/^fly_args_/, "").gsub("_", "-")
|
64
67
|
hash[fly_command] = options[key]
|
@@ -73,12 +76,12 @@ class Concourse
|
|
73
76
|
block.call(self)
|
74
77
|
create_tasks!
|
75
78
|
else
|
76
|
-
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})
|
77
80
|
end
|
78
81
|
end
|
79
82
|
|
80
|
-
def add_pipeline(name, erb_filename)
|
81
|
-
@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)
|
82
85
|
end
|
83
86
|
|
84
87
|
def pipeline_subcommands(command)
|
@@ -94,9 +97,7 @@ class Concourse
|
|
94
97
|
end
|
95
98
|
|
96
99
|
def rake_pipeline_generate(pipeline)
|
97
|
-
|
98
|
-
f.write erbify_file(pipeline.erb_filename, working_directory: directory)
|
99
|
-
end
|
100
|
+
pipeline.generate
|
100
101
|
fly "validate-pipeline", "-c #{pipeline.filename}"
|
101
102
|
fly "format-pipeline", "-c #{pipeline.filename} -w" if format
|
102
103
|
end
|
@@ -133,8 +134,6 @@ class Concourse
|
|
133
134
|
end
|
134
135
|
|
135
136
|
pipelines.each do |pipeline|
|
136
|
-
CLOBBER.include pipeline.filename if defined?(CLOBBER)
|
137
|
-
|
138
137
|
unless File.exist? pipeline.erb_filename
|
139
138
|
warn "WARNING: concourse template #{pipeline.erb_filename.inspect} does not exist, run `rake concourse:init`"
|
140
139
|
end
|
data/lib/concourse/pipeline.rb
CHANGED
@@ -1,12 +1,31 @@
|
|
1
1
|
class Concourse
|
2
2
|
class Pipeline
|
3
|
-
|
3
|
+
include Concourse::Util
|
4
4
|
|
5
|
-
|
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
|
data/lib/concourse/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
cruby_versions = {
|
2
|
+
"out_of_support": ["2.4", "2.3", "2.2", "2.1", "2.0.0"],
|
3
|
+
"supported": ["2.5", "2.6", "2.7"],
|
4
|
+
"beta": ["3.0-rc"]
|
5
|
+
}
|
6
|
+
jruby_versions = {
|
7
|
+
"out_of_support": ["9.1"],
|
8
|
+
"supported": ["9.2"],
|
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.
|
4
|
+
version: 0.40.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-
|
11
|
+
date: 2020-12-19 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.
|
111
|
+
rubygems_version: 3.1.4
|
111
112
|
signing_key:
|
112
113
|
specification_version: 4
|
113
114
|
summary: Rake tasks for Concourse pipelines.
|