dapp 0.0.3 → 0.0.4

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 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