concourse 0.24.0 → 0.25.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: 69454c7a7cfcaa97aa0ae0e60154643107ec31e27f4870fb2c03e3cb5cf8e53a
4
- data.tar.gz: b2d936d3806d0725a78549f984b5d25bd0bb02bb171d6cbcb13b47ecf0c61bf3
3
+ metadata.gz: d4b1fac24b6a006de483423b88d279800eace3d340f06ff3e44bd245c06b56ae
4
+ data.tar.gz: c31951fe43411e6b9249d78e084f5e06c65e1003a8529c4b695df265bf61f30d
5
5
  SHA512:
6
- metadata.gz: 279c5aea4104ccb041bbfa02700625356dc31dbdf2e21f0c9f2cdd928883108f55f149609f06cc7e7a174434abc899760e744c50423ebca1753ab514fae52130
7
- data.tar.gz: d298b46e242c2230984d7b7e503fd82ab6fd4ff6aa6d1b2803e6fd9731fa5733f1ac27ae53f7a6050c73269d9fb193b5f18f7f0b0581f2f194e6e07b52f03f93
6
+ metadata.gz: ffb2453c377421f1f7b35f2eafb17e8933471d716525c7bd8c7edf05d5839a280198b17d356d365e3fc96e7f6dcf4b5b02b5443a5a5e70894201ba76c52448fb
7
+ data.tar.gz: 9a136ccc848d40e06e58a8d98bf5a36dec2fdb814f2a423cbe9910b032763ca79b78d455cdb2ec261d9e81a078987e5a22831cd0ee95566e951ec2a9e90e6774
@@ -1,5 +1,10 @@
1
1
  # concourse-gem changelog
2
2
 
3
+ ## 0.25.0 / 2019-02-02
4
+
5
+ * Support running a local ephemeral Concourse cluster with `docker-compose`.
6
+
7
+
3
8
  ## 0.24.0 / 2019-01-24
4
9
 
5
10
  ### Features
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # concourse (the rubygem)
2
2
 
3
- The `concourse` gem provides rake tasks to help you manage Concourse pipelines, jobs, and workers, and to assist in running tasks with `fly execute`.
3
+ The `concourse` gem provides rake tasks to help you manage Concourse pipelines, jobs, and workers, to assist in running tasks with `fly execute`, and even run a local ephemeral deployment of Concourse on your development machine.
4
4
 
5
5
  If you're not familiar with Concourse CI, you can read up on it at https://concourse.ci
6
6
 
@@ -31,6 +31,10 @@ If you're not familiar with Concourse CI, you can read up on it at https://conco
31
31
  * [Run a Concourse task with `fly execute`](#run-a-concourse-task-with-fly-execute)
32
32
  * [Abort running builds](#abort-running-builds)
33
33
  * [Prune stalled concourse workers](#prune-stalled-concourse-workers)
34
+ - [Running a local ephemeral Concourse](#running-a-local-ephemeral-concourse)
35
+ * [Spinning up a local deployment](#spinning-up-a-local-deployment)
36
+ * [Doing things with the local deployment](#doing-things-with-the-local-deployment)
37
+ * [Shutting down the local deployment](#shutting-down-the-local-deployment)
34
38
  - [Contributing](#contributing)
35
39
  - [License](#license)
36
40
 
@@ -319,6 +323,45 @@ rake concourse:prune-stalled-workers # prune any stalled workers
319
323
  ```
320
324
 
321
325
 
326
+ ## Running a local ephemeral Concourse
327
+
328
+ You can run a local Concourse deployment on your development system, if you have `docker` and `docker-compose` installed.
329
+
330
+
331
+ ### Spinning up a local deployment
332
+
333
+ To spin up the local cluster:
334
+
335
+ ``` sh
336
+ rake concourse:local:up
337
+ ```
338
+
339
+ You can view that Concourse deployment at `http://127.0.0.1:8080` using the credentials `test`/`test`.
340
+
341
+
342
+ ### Doing things with the local deployment
343
+
344
+ 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:
345
+
346
+ ``` sh
347
+ rake concourse:local concourse:task[ruby-2.4/rake-task]
348
+ ```
349
+
350
+ Or to push your pipelines to that local cluster:
351
+
352
+ ``` sh
353
+ rake concourse:local concourse:set
354
+ ```
355
+
356
+ ### Shutting down the local deployment
357
+
358
+ Finally, to spin down the cluster (when you're done with it):
359
+
360
+ ``` sh
361
+ rake concourse:local:down
362
+ ```
363
+
364
+
322
365
  ## Contributing
323
366
 
324
367
  Bug reports and pull requests are welcome on GitHub at https://github.com/flavorjones/concourse-gem. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. See [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md).
@@ -3,6 +3,7 @@ require "concourse/util"
3
3
  require "concourse/pipeline"
4
4
  require "yaml"
5
5
  require "tempfile"
6
+ require "open-uri"
6
7
 
7
8
  class Concourse
8
9
  include Rake::DSL
@@ -17,6 +18,8 @@ class Concourse
17
18
  }
18
19
 
19
20
  DEFAULT_DIRECTORY = "concourse"
21
+ DEFAULT_FLY_TARGET = "default"
22
+ DEFAULT_SECRETS = "private.yml"
20
23
 
21
24
  attr_reader :project_name
22
25
  attr_reader :directory
@@ -24,6 +27,8 @@ class Concourse
24
27
  attr_reader :fly_target
25
28
  attr_reader :secrets_filename
26
29
 
30
+ CONCOURSE_DOCKER_COMPOSE = "docker-compose.yml"
31
+
27
32
  def self.url_for fly_target
28
33
  matching_line = `fly targets`.split("\n").grep(/^#{fly_target}/).first
29
34
  raise "invalid fly target #{fly_target}" unless matching_line
@@ -50,9 +55,9 @@ class Concourse
50
55
  @project_name = project_name
51
56
 
52
57
  @directory = options[:directory] || DEFAULT_DIRECTORY
53
- @fly_target = options[:fly_target] || "default"
58
+ @fly_target = options[:fly_target] || DEFAULT_FLY_TARGET
54
59
 
55
- base_secrets_filename = options[:secrets_filename] || "private.yml"
60
+ base_secrets_filename = options[:secrets_filename] || DEFAULT_SECRETS
56
61
  @secrets_filename = File.join(@directory, base_secrets_filename)
57
62
 
58
63
  @pipelines = []
@@ -85,7 +90,32 @@ class Concourse
85
90
  File.open pipeline.filename, "w" do |f|
86
91
  f.write erbify_file(pipeline.erb_filename, working_directory: directory)
87
92
  end
88
- sh "fly validate-pipeline -c #{pipeline.filename}"
93
+ fly "validate-pipeline -c #{pipeline.filename}"
94
+ end
95
+
96
+ def rake_concourse_local
97
+ ensure_docker_compose_file
98
+ @fly_target = "local"
99
+ fly "login -u test -p test -c http://127.0.0.1:8080"
100
+ end
101
+
102
+ def ensure_docker_compose_file
103
+ return if File.exist?(docker_compose_path)
104
+ note "fetching docker compose file ..."
105
+ File.open(docker_compose_path, "w") do |f|
106
+ f.write open("https://concourse-ci.org/docker-compose.yml").read
107
+ end
108
+ end
109
+
110
+ def rake_concourse_local_up
111
+ ensure_docker_compose_file
112
+ docker_compose "up -d"
113
+ docker_compose "ps"
114
+ end
115
+
116
+ def rake_concourse_local_down
117
+ ensure_docker_compose_file
118
+ docker_compose "down"
89
119
  end
90
120
 
91
121
  def create_tasks!
@@ -137,7 +167,7 @@ class Concourse
137
167
  note "using #{secrets_filename} to resolve template vars in #{pipeline.filename}"
138
168
  options << "-l '#{secrets_filename}'"
139
169
  end
140
- sh "fly -t #{fly_target} set-pipeline #{options.join(" ")}"
170
+ fly "set-pipeline #{options.join(" ")}"
141
171
  end
142
172
  end
143
173
 
@@ -148,7 +178,7 @@ class Concourse
148
178
  pipelines.each do |pipeline|
149
179
  desc "#{command} the #{pipeline.name} pipeline"
150
180
  task "#{command}:#{pipeline.name}" do
151
- sh "fly -t #{fly_target} #{command}-pipeline -p #{pipeline.name}"
181
+ fly "#{command}-pipeline -p #{pipeline.name}"
152
182
  end
153
183
  end
154
184
  end
@@ -194,7 +224,7 @@ class Concourse
194
224
  f.write concourse_task["config"].to_yaml
195
225
  f.close
196
226
  Bundler.with_clean_env do
197
- sh "fly -t #{fly_target} execute #{fly_execute_args} -c #{f.path}"
227
+ fly "execute #{fly_execute_args} -c #{f.path}"
198
228
  end
199
229
  end
200
230
  end
@@ -208,7 +238,7 @@ class Concourse
208
238
  pipeline_job, build_id, status = *line.split(/\s+/)[1,3]
209
239
  next unless status == "started"
210
240
 
211
- sh "fly -t #{fly_target} abort-build -j #{pipeline_job} -b #{build_id}"
241
+ fly "abort-build -j #{pipeline_job} -b #{build_id}"
212
242
  end
213
243
  end
214
244
 
@@ -219,7 +249,26 @@ class Concourse
219
249
  task "prune-stalled-workers" do
220
250
  `fly -t #{fly_target} workers | fgrep stalled`.each_line do |line|
221
251
  worker_id = line.split.first
222
- system("fly -t #{fly_target} prune-worker -w #{worker_id}")
252
+ fly "prune-worker -w #{worker_id}"
253
+ end
254
+ end
255
+
256
+ #
257
+ # docker commands
258
+ #
259
+ task "local" do
260
+ rake_concourse_local
261
+ end
262
+
263
+ namespace "local" do
264
+ desc "start up a docker-compose cluster for local CI"
265
+ task "up" do
266
+ rake_concourse_local_up
267
+ end
268
+
269
+ desc "shut down the docker-compose cluster"
270
+ task "down" do
271
+ rake_concourse_local_down
223
272
  end
224
273
  end
225
274
  end
@@ -18,6 +18,18 @@ class Concourse
18
18
  File.open(GITIGNORE_FILE, "a") { |f| f.puts file_glob }
19
19
  end
20
20
 
21
+ def fly command
22
+ sh "fly -t #{fly_target} #{command}"
23
+ end
24
+
25
+ def docker_compose command
26
+ sh "docker-compose -f #{docker_compose_path} #{command}"
27
+ end
28
+
29
+ def docker_compose_path
30
+ File.join(directory, CONCOURSE_DOCKER_COMPOSE)
31
+ end
32
+
21
33
  def sh command
22
34
  running "(in #{Dir.pwd}) #{command}"
23
35
  Rake.sh command, verbose: false
@@ -2,5 +2,5 @@ require "rake"
2
2
  require "erb"
3
3
 
4
4
  class Concourse
5
- VERSION = "0.24.0"
5
+ VERSION = "0.25.0"
6
6
  end
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.24.0
4
+ version: 0.25.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: 2019-01-25 00:00:00.000000000 Z
11
+ date: 2019-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: term-ansicolor