rake-tasks-docker 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 119f1621e3e67d4a1f4d2435881dc7963c2fd8ca
4
+ data.tar.gz: 5e486310416959a0d4c46be1edc9c655d57398b8
5
+ SHA512:
6
+ metadata.gz: 315fd879188238fa0c0232eedbc0a793342320f1ff1c47018d278fe35e6bef5b9fc6cc6ead8ed32c8eaf3bc1cc29fd2e2d5f3c18b0429899a4b3cdf999daf208
7
+ data.tar.gz: 61d7b02414adb36a9c4f583f81c51d3a056339888eacd2a4ac40fb45f69b729a335437470179fee24aef3718ef5cbcff394c03b5298751bbeffc0622346ca581
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hem-tasks-magento1.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,34 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rake-tasks-docker (0.1.0)
5
+ rake (>= 10.0, <= 12)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.3)
11
+ rake (12.0.0)
12
+ rspec (3.6.0)
13
+ rspec-core (~> 3.6.0)
14
+ rspec-expectations (~> 3.6.0)
15
+ rspec-mocks (~> 3.6.0)
16
+ rspec-core (3.6.0)
17
+ rspec-support (~> 3.6.0)
18
+ rspec-expectations (3.6.0)
19
+ diff-lcs (>= 1.2.0, < 2.0)
20
+ rspec-support (~> 3.6.0)
21
+ rspec-mocks (3.6.0)
22
+ diff-lcs (>= 1.2.0, < 2.0)
23
+ rspec-support (~> 3.6.0)
24
+ rspec-support (3.6.0)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ rake-tasks-docker!
31
+ rspec (~> 3.6)
32
+
33
+ BUNDLED WITH
34
+ 1.12.5
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,2 @@
1
+ require_relative 'rake-tasks-docker/services'
2
+ require_relative 'rake-tasks-docker/version'
@@ -0,0 +1,44 @@
1
+
2
+ require 'timeout'
3
+
4
+ require_relative 'services'
5
+
6
+ namespace :docker do
7
+ task :status, :services do |task, args|
8
+ services = RakeTasksDocker::Services.new(args[:services] ? args[:services].split(' ') : [])
9
+ puts services.status
10
+ exit(1) if services.status != 'started'
11
+ end
12
+
13
+ task :up, :services do |task, args|
14
+ services = RakeTasksDocker::Services.new(args[:services] ? args[:services].split(' ') : [])
15
+ pid = nil
16
+
17
+ begin
18
+ Timeout::timeout(ENV['RAKE_DOCKER_TIMEOUT'].to_i || 0) do
19
+ Process.wait(services.up)
20
+ if $?.exitstatus > 0
21
+ STDERR.puts 'The project failed to start'
22
+ exit(1)
23
+ end
24
+
25
+ pid = services.logs
26
+
27
+ loop do
28
+ services.refresh
29
+ case services.status
30
+ when 'failed'
31
+ STDERR.puts 'The project failed to start'
32
+ exit(1)
33
+ when 'started'
34
+ STDERR.puts 'The project completed startup'
35
+ exit(0)
36
+ end
37
+ sleep 1
38
+ end
39
+ end
40
+ ensure
41
+ Process.kill('TERM', pid) unless pid.nil?
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,57 @@
1
+ require 'json'
2
+
3
+ module RakeTasksDocker
4
+ class Services
5
+ def initialize(services = [])
6
+ @services = services
7
+ end
8
+
9
+ def refresh
10
+ containers = `docker-compose ps -q #{@services.join(' ')}`.split("\n")
11
+ @inspections = []
12
+ containers.each do |container_ref|
13
+ @inspections << JSON.parse(`docker inspect #{container_ref}`).first
14
+ end
15
+ end
16
+
17
+ def states
18
+ states = {}
19
+ @inspections.each do |inspection|
20
+ if inspection['State']
21
+ state = inspection['State']
22
+ if state['Running'] && state['Health']
23
+ states[inspection['Name']] = "#{state['Status']} (#{state['Health']['Status']})"
24
+ elsif state['ExitCode'] > 0
25
+ states[inspection['Name']] = "#{state['Status']} (non-zero exit code)"
26
+ else
27
+ states[inspection['Name']] = state['Status']
28
+ end
29
+ end
30
+ end
31
+ states
32
+ end
33
+
34
+ def status_from_states(states)
35
+ if states.empty? || !(states.values & ['exited (non-zero exit code)', 'running (unhealthy)', 'restarting', 'dead']).empty?
36
+ return 'failed'
37
+ elsif !(states.values & ['created', 'running (starting)']).empty?
38
+ return 'starting'
39
+ else
40
+ return 'started'
41
+ end
42
+ end
43
+
44
+ def status
45
+ refresh unless @inspections
46
+ status_from_states(states)
47
+ end
48
+
49
+ def up
50
+ Process.spawn 'docker-compose', 'up', '-d', *@services
51
+ end
52
+
53
+ def logs
54
+ Process.spawn 'docker-compose', 'logs', '-f', *@services
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,3 @@
1
+ module RakeTasksDocker
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'rake-tasks-docker/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "rake-tasks-docker"
9
+ spec.version = RakeTasksDocker::VERSION
10
+ spec.authors = ["Andy Thompson"]
11
+ spec.email = ["athompson@inviqa.com"]
12
+
13
+ spec.summary = %q{Docker tasks for Rake}
14
+ spec.description = %q{Docker tasks for Rake}
15
+ spec.homepage = ""
16
+ spec.licenses = ["MIT"]
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "rake", ">= 10.0", "<= 12"
22
+
23
+ spec.add_development_dependency "rspec", "~> 3.6"
24
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake-tasks-docker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andy Thompson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '10.0'
20
+ - - "<="
21
+ - !ruby/object:Gem::Version
22
+ version: '12'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '10.0'
30
+ - - "<="
31
+ - !ruby/object:Gem::Version
32
+ version: '12'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.6'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.6'
47
+ description: Docker tasks for Rake
48
+ email:
49
+ - athompson@inviqa.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - ".rspec"
55
+ - Gemfile
56
+ - Gemfile.lock
57
+ - Rakefile
58
+ - lib/rake-tasks-docker.rb
59
+ - lib/rake-tasks-docker/rake_task.rb
60
+ - lib/rake-tasks-docker/services.rb
61
+ - lib/rake-tasks-docker/version.rb
62
+ - rake-tasks-docker.gemspec
63
+ homepage: ''
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.4.8
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Docker tasks for Rake
87
+ test_files: []