dapp 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OWI0MGM4MWU0MjU2MWUxZWY0NWNkMTczNzEyNzJmMWQ2NDhjMzlkYQ==
4
+ YTNlMjdkNDQxZTM1ZmMxZTA3NzU4MTIyMGRmZWUwMWFmZmE1MDgwOA==
5
5
  data.tar.gz: !binary |-
6
- MDdmMzhiNTE1ZTM0MjcyMDFmNGEzMzYyNjI2ZmNiNjZlYjA2ZGU0MA==
6
+ ZDdmYmNhYjc4ZjQxMzBhZTE1MzBkN2Y2YjVjOTRlNmNmYTRmNWI2MA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDlmZDU3NDYzYTA5YzgwZDRkOGI0MmJmMjU3ZTc1ZGEyOGRkYWQyM2I3NTI3
10
- MmI2YzRmNmNhM2JjZjZmMzQxNzk1YjZmNGNiZjJhODI0YjU1MWMzODE5YjJi
11
- ZDcwMGNiNmQ5Y2M3NTU0ZGNjZTg5OTRiZjE4M2I0YTAwMWE1ZDg=
9
+ ZjM2ODRiZmRlNzM3NTQ2OGE0NjY0OGQzYjlkODIwNjBkNGI3MTYyYTQwZWUy
10
+ YTVmZWViZjVmNmVhNWFjOWU1ZWQwNGY1ZGJjNGZmNjA2OTc4NGVjYjcwMGUx
11
+ YmZjMTI3MDgwYmY2YzQ1YWJmODZkYThlNTZiMWE5NGIyYjNmMDM=
12
12
  data.tar.gz: !binary |-
13
- NTQ5OGJhMjRkZjI2MTU0ZDEzNzE5ZTdlMjVmYzI2MzcyODkxMThmM2NiMDMx
14
- NTE0MTM2YTc4MzhjOWJmMmI2OGRjNDA5ZmU2NmU0ZTcwZjNmOTMxZDhiNjVl
15
- MTk2MmRiODU1YjRkN2U0M2I3ZDIzMjAyM2M4ZDkyMGE5NTJhN2Q=
13
+ Y2VhMTRlYzg4MGY2ODJkYzU5YjIyNWNjOGIzN2NiMDhhMmUxZDA4MTBmNjI2
14
+ NGE0MzBhMDM1OWJlNTBmZTdjNDczZDdmODljZTkwMDdiNzE0NWM3YTQzMGMz
15
+ ZjA2ZTRlZjAzZjBmYTg2ZWQ3MTBmOGRiYmIzMWQ5ZDE1MWU1NDA=
data/lib/dapp.rb CHANGED
@@ -11,6 +11,9 @@ require 'dapp/cli'
11
11
  require 'dapp/cli/build'
12
12
  require 'dapp/builder/chefify'
13
13
  require 'dapp/builder/centos7'
14
+ require 'dapp/builder/ci_tagging'
15
+ require 'dapp/builder/manual_tagging'
16
+ require 'dapp/builder/git_tagging'
14
17
  require 'dapp/builder/cascade_tagging'
15
18
  require 'dapp/filelock'
16
19
  require 'dapp/builder'
data/lib/dapp/builder.rb CHANGED
@@ -3,6 +3,9 @@ module Dapp
3
3
  class Builder
4
4
  include Chefify
5
5
  include Centos7
6
+ include CiTagging
7
+ include ManualTagging
8
+ include GitTagging
6
9
  include CascadeTagging
7
10
  include Filelock
8
11
 
@@ -153,6 +156,7 @@ module Dapp
153
156
  artifact.add_multilayer!
154
157
  end
155
158
 
159
+ # rubocop:disable Metrics/AbcSize
156
160
  def build(**_kwargs)
157
161
  # check app name
158
162
  unless !opts[:app_filter] || File.fnmatch("#{opts[:app_filter]}*", name)
@@ -164,8 +168,10 @@ module Dapp
164
168
  log 'Building'
165
169
  image_id = docker.build
166
170
 
167
- # apply cascade tagging
168
- tag_cascade image_id
171
+ # apply tagging
172
+ %w(ci manual git cascade).each do |strategy|
173
+ send "tag_#{strategy}", image_id
174
+ end
169
175
 
170
176
  # push to registry
171
177
  if opts[:docker_registry]
@@ -178,6 +184,7 @@ module Dapp
178
184
 
179
185
  image_id
180
186
  end
187
+ # rubocop:enable Metrics/AbcSize
181
188
 
182
189
  def tag(image_id, name: nil, tag: nil, registry: nil)
183
190
  return unless name && tag
@@ -0,0 +1,53 @@
1
+ module Dapp
2
+ class Builder
3
+ # CI tagging strategy
4
+ module CiTagging
5
+ def tag_ci(image_id)
6
+ return unless opts[:tag_ci] || opts[:tag_build_id]
7
+
8
+ raise 'CI environment required (Travis or GitLab CI)' unless ENV['GITLAB_CI'] || ENV['TRAVIS']
9
+
10
+ spec = {
11
+ name: name,
12
+ registry: opts[:docker_registry]
13
+ }
14
+
15
+ tag_ci_branch_and_tag image_id, spec
16
+ tag_ci_build_id image_id, spec
17
+ end
18
+
19
+ private
20
+
21
+ def tag_ci_branch_and_tag(image_id, spec)
22
+ return unless opts[:tag_ci]
23
+
24
+ log 'Applying CI tagging strategy'
25
+
26
+ if ENV['GITLAB_CI']
27
+ branch = ENV['CI_BUILD_REF_NAME']
28
+ tag = ENV['CI_BUILD_TAG']
29
+ elsif ENV['TRAVIS']
30
+ branch = ENV['TRAVIS_BRANCH']
31
+ tag = ENV['TRAVIS_TAG']
32
+ end
33
+
34
+ docker.tag image_id, spec.merge(tag: tag) if tag
35
+ docker.tag image_id, spec.merge(tag: branch) if branch
36
+ end
37
+
38
+ def tag_ci_build_id(image_id, spec)
39
+ return unless opts[:tag_build_id]
40
+
41
+ log 'Applying CI build id tag'
42
+
43
+ if ENV['GITLAB_CI']
44
+ build_id = ENV['CI_BUILD_ID']
45
+ elsif ENV['TRAVIS']
46
+ build_id = ENV['TRAVIS_BUILD_NUMBER']
47
+ end
48
+
49
+ docker.tag image_id, spec.merge(tag: build_id) if build_id
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,25 @@
1
+ module Dapp
2
+ class Builder
3
+ # Git tagging strategy
4
+ module GitTagging
5
+ def tag_git(image_id)
6
+ spec = {
7
+ name: name,
8
+ registry: opts[:docker_registry]
9
+ }
10
+
11
+ if opts[:tag_commit]
12
+ log 'Applying git commit tag'
13
+
14
+ docker.tag image_id, spec.merge(tag: shellout("git -C #{home_path} rev-parse HEAD").stdout.strip)
15
+ end
16
+
17
+ if opts[:tag_branch]
18
+ log 'Applying git branch tag'
19
+
20
+ docker.tag image_id, spec.merge(tag: shellout("git -C #{home_path} rev-parse --abbrev-ref HEAD").stdout.strip)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ module Dapp
2
+ class Builder
3
+ # Manual tagging strategy
4
+ module ManualTagging
5
+ def tag_manual(image_id)
6
+ return unless opts[:tags]
7
+
8
+ log 'Applying manual tags'
9
+
10
+ opts[:tags].each do |tag|
11
+ spec = {
12
+ name: name,
13
+ tag: tag,
14
+ registry: opts[:docker_registry]
15
+ }
16
+
17
+ docker.tag image_id, spec
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -20,11 +20,11 @@ BANNER
20
20
  class << self
21
21
  def option(name, args)
22
22
  if args.delete :builder_opt
23
- args[:proc] = if args[:boolean]
24
- proc { Dapp::Builder.default_opts[name] = true }
25
- else
26
- proc { |v| Dapp::Builder.default_opts[name] = v }
27
- end
23
+ args[:proc] ||= if args[:boolean]
24
+ proc { Dapp::Builder.default_opts[name] = true }
25
+ else
26
+ proc { |v| Dapp::Builder.default_opts[name] = v }
27
+ end
28
28
  end
29
29
 
30
30
  super(name, args)
@@ -83,11 +83,41 @@ BANNER
83
83
  builder_opt: true
84
84
 
85
85
  option :cascade_tagging,
86
- long: '--cascade_tagging',
86
+ long: '--cascade-tagging',
87
87
  description: 'Use cascade tagging',
88
88
  boolean: true,
89
89
  builder_opt: true
90
90
 
91
+ option :tag_ci,
92
+ long: '--tag-ci',
93
+ description: 'Tag by CI branch and tag',
94
+ boolean: true,
95
+ builder_opt: true
96
+
97
+ option :tag_build_id,
98
+ long: '--tag-build-id',
99
+ description: 'Tag by CI build id',
100
+ boolean: true,
101
+ builder_opt: true
102
+
103
+ option :tag,
104
+ long: '--tag TAG',
105
+ description: 'Add tag (can be used one or more times)',
106
+ on: :tail,
107
+ proc: proc { |v| (Dapp::Builder.default_opts[:tags] ||= []) << v }
108
+
109
+ option :tag_commit,
110
+ long: '--tag-commit',
111
+ description: 'Tag by git commit',
112
+ boolean: true,
113
+ builder_opt: true
114
+
115
+ option :tag_branch,
116
+ long: '--tag-branch',
117
+ description: 'Tag by git branch',
118
+ boolean: true,
119
+ builder_opt: true
120
+
91
121
  option :git_artifact_branch,
92
122
  long: '--git-artifact-branch BRANCH',
93
123
  description: 'Default branch to archive artifacts from',
data/lib/dapp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dapp
2
- VERSION = '0.0.3'.freeze
2
+ VERSION = '0.0.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-02 00:00:00.000000000 Z
12
+ date: 2016-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mixlib-shellout
@@ -217,6 +217,9 @@ files:
217
217
  - lib/dapp/builder/cascade_tagging.rb
218
218
  - lib/dapp/builder/centos7.rb
219
219
  - lib/dapp/builder/chefify.rb
220
+ - lib/dapp/builder/ci_tagging.rb
221
+ - lib/dapp/builder/git_tagging.rb
222
+ - lib/dapp/builder/manual_tagging.rb
220
223
  - lib/dapp/cli.rb
221
224
  - lib/dapp/cli/build.rb
222
225
  - lib/dapp/docker.rb