minos 0.2.1 → 0.3.1

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: 6e990511ea43438c9374a1205d0a15417da89a57ed4c57c190e1bfa36b72946d
4
- data.tar.gz: 1e7d4a3d6acbcbac2eab3705eb197fa9712e6bda4fe44f8c627801498483846f
3
+ metadata.gz: f3edf8ef19ced58587308297037a6e8b97f52bc7c8ac7b3860103f75590ce1ee
4
+ data.tar.gz: 0eae29c964734492960f12f895bcd6427a682bf7072bbffc19c40af64ae1dd02
5
5
  SHA512:
6
- metadata.gz: 4e810c0cef87e648d29673b417461cf2e8b1a4dd4481372baa00eeccfafdc2fe63824b4b7165158f49d013bf8acfec6d70897626b3e8607fd8dc7068131337d1
7
- data.tar.gz: 4561bf59c5110afd9e6f87ac21d0b16e481a5d6a334ca68d14c02f12b70d49ad7895813f5d24d19d2283929264acb1d3e6b18749bced538c05e5f8dc46a9e5c2
6
+ metadata.gz: 80205457db0bd8e437564c0327bcea5ce5f1c103e2366d51169256068579326c92899291a13e4d2f4dc2f97d57a6799fd6dab2936f15b269c2117cf2e086f454
7
+ data.tar.gz: ed251dbd5fbf9e06495afe41d16127b7115f0ea5474f8d45ea8f9c963f015b80ab7fb8ef2b3c69f39bf3b84783cb1dfe6b4ccbc03e89ae8dc17b142319db8506
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- minos (0.2.1)
4
+ minos (0.3.1)
5
5
  activesupport (~> 5.2)
6
+ dry-matcher (~> 0.7)
7
+ dry-monads (~> 1.2)
6
8
  thor (~> 0.20)
7
- wisper (~> 2.0)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
@@ -15,6 +16,14 @@ GEM
15
16
  minitest (~> 5.1)
16
17
  tzinfo (~> 1.1)
17
18
  concurrent-ruby (1.1.4)
19
+ dry-core (0.4.7)
20
+ concurrent-ruby (~> 1.0)
21
+ dry-equalizer (0.2.1)
22
+ dry-matcher (0.7.0)
23
+ dry-monads (1.2.0)
24
+ concurrent-ruby (~> 1.0)
25
+ dry-core (~> 0.4, >= 0.4.4)
26
+ dry-equalizer
18
27
  i18n (1.5.3)
19
28
  concurrent-ruby (~> 1.0)
20
29
  minitest (5.11.3)
@@ -23,7 +32,6 @@ GEM
23
32
  thread_safe (0.3.6)
24
33
  tzinfo (1.2.5)
25
34
  thread_safe (~> 0.1)
26
- wisper (2.0.0)
27
35
 
28
36
  PLATFORMS
29
37
  ruby
@@ -1,6 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'thor'
3
- require 'wisper'
3
+ require "dry/monads/result"
4
+ require "dry/matcher/result_matcher"
4
5
 
5
6
  require 'minos/artifact'
6
7
  require 'minos/docker'
@@ -2,7 +2,7 @@ require 'active_support/core_ext/string/inflections'
2
2
 
3
3
  module Minos
4
4
  class Artifact
5
- include Wisper::Publisher
5
+ include Dry::Monads::Result::Mixin
6
6
 
7
7
  attr_reader :artifact, :options
8
8
 
@@ -16,8 +16,8 @@ module Minos
16
16
  end
17
17
 
18
18
  def pull
19
- caches.each do |name|
20
- docker_pull(name)
19
+ caches.map do |cache|
20
+ docker_pull(cache)
21
21
  end
22
22
  end
23
23
 
@@ -31,23 +31,29 @@ module Minos
31
31
 
32
32
  private
33
33
 
34
- def docker_pull(name)
35
- broadcast(:pulling_cache_artifact, name)
36
- run "docker inspect #{name} -f '{{json .ID}}' > /dev/null 2>&1 || docker pull #{name} 2> /dev/null"
34
+ def docker_pull(cache)
35
+ if run "docker inspect #{cache} -f '{{json .ID}}' > /dev/null 2>&1 || docker pull #{cache} 2> /dev/null"
36
+ Success(cache)
37
+ else
38
+ Failure(cache)
39
+ end
37
40
  end
38
41
 
39
42
  def docker_build
40
- broadcast(:building_artifact, name)
41
- run "docker build #{to_args(docker)} ."
42
- broadcast(:artifact_built, name)
43
+ if run "docker build #{to_args(docker)} ."
44
+ Success(name)
45
+ else
46
+ Failure(name)
47
+ end
43
48
  end
44
49
 
45
50
  def docker_push
46
- tags.each do |tag|
47
- broadcast(:tagging_artifact, "#{image}:#{target}", "#{image}:#{tag}")
48
- run "docker tag #{image}:#{target} #{image}:#{tag}"
49
- broadcast(:pushing_artifact, "#{image}:#{tag}")
50
- run "docker push #{image}:#{tag}"
51
+ tags.map do |tag|
52
+ if run "docker tag #{image}:#{target} #{image}:#{tag} && docker push #{image}:#{tag}"
53
+ Success("#{image}:#{tag}")
54
+ else
55
+ Failure("#{image}:#{tag}")
56
+ end
51
57
  end
52
58
  end
53
59
 
@@ -10,19 +10,30 @@ module Minos
10
10
  def build
11
11
  artifacts.each do |a|
12
12
  artifact = Artifact.new(a, options: options)
13
- artifact
14
- .on(:pulling_cache_artifact) do |name|
15
- say_status artifact.name, "Pulling #{name}"
16
- end
17
- .on(:building_artifact) do |name|
18
- say_status artifact.name, "Building #{name}"
19
- end
20
- .on(:artifact_built) do |name|
21
- say_status artifact.name, "Successfully built #{name}"
13
+
14
+ # Pull
15
+ artifact.pull.each do |result|
16
+ Dry::Matcher::ResultMatcher.(result) do |m|
17
+ m.success do |name|
18
+ say_status artifact.name, "Using #{name}"
19
+ end
20
+ m.failure do |name|
21
+ # noop
22
+ # failure here means we don't have docker image locally
23
+ end
24
+ end
22
25
  end
23
26
 
24
- artifact.pull
25
- artifact.build
27
+ # Build
28
+ Dry::Matcher::ResultMatcher.(artifact.build) do |m|
29
+ m.success do |name|
30
+ say_status artifact.name, "Successfully built #{name}"
31
+ end
32
+ m.failure do |name|
33
+ say_status artifact.name, "Failed building #{name}", :red
34
+ exit 1
35
+ end
36
+ end
26
37
  end
27
38
  end
28
39
 
@@ -30,15 +41,17 @@ module Minos
30
41
  def push
31
42
  artifacts.each do |a|
32
43
  artifact = Artifact.new(a, options: options)
33
- artifact
34
- .on(:tagging_artifact) do |source, target|
35
- say_status artifact.name, "Successfully tagged #{source} as #{target}"
36
- end
37
- .on(:pushing_artifact) do |name|
38
- say_status artifact.name, "Pushing #{name}"
44
+ artifact.push.each do |result|
45
+ Dry::Matcher::ResultMatcher.(result) do |m|
46
+ m.success do |name|
47
+ say_status artifact.name, "Successfully pushed #{name}"
48
+ end
49
+ m.failure do |name|
50
+ say_status artifact.name, "Failed pushing #{name}", :red
51
+ exit 1
52
+ end
53
+ end
39
54
  end
40
-
41
- artifact.push
42
55
  end
43
56
  end
44
57
 
@@ -1,3 +1,3 @@
1
1
  module Minos
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.1'
3
3
  end
@@ -25,7 +25,8 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency "activesupport", "~> 5.2"
27
27
  spec.add_dependency "thor", "~> 0.20"
28
- spec.add_dependency "wisper", "~> 2.0"
28
+ spec.add_dependency "dry-matcher", "~> 0.7"
29
+ spec.add_dependency "dry-monads", "~> 1.2"
29
30
 
30
31
  spec.add_development_dependency "bundler", "~> 1.17"
31
32
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre-Louis Gottfrois
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-11 00:00:00.000000000 Z
11
+ date: 2019-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -39,19 +39,33 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.20'
41
41
  - !ruby/object:Gem::Dependency
42
- name: wisper
42
+ name: dry-matcher
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: '0.7'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.0'
54
+ version: '0.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: dry-monads
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement