opskeleton 0.9.3 → 0.9.4

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
  SHA1:
3
- metadata.gz: db0cc5b42bae8a325f0dc39601081e56e4ffe78d
4
- data.tar.gz: acd80a01463506ae34c11de387f612701d42b68b
3
+ metadata.gz: 23dd029f2dfd870048e84db9f1697b4e70345807
4
+ data.tar.gz: aad74fe64226e511e7f4e81510cee8a7daa4d120
5
5
  SHA512:
6
- metadata.gz: b6e1fcb1c227fc69cc80522195605ec8e1f8f8a44ee51aba55bb29a81c974b6be69fa6357d67cd935564819fff58b05c28ec7365d4600b6d42fae90f9ad7105c
7
- data.tar.gz: 0061f5575d2a0862f287d61a0072068ba2eb0b54a41f9cfec838f97e82fc5853f4ef6e7980253b264cd9f043f2e0fdfeb24285b38f219ff4864b97f57aec179e
6
+ metadata.gz: eba347ecad77000f8de4708550b9cb2f19db7fddc1bd36974d68c4b705b3e46c5c6a7a05b6314d69293c4aed69e1678d66bfba8771c9a515e18239beeebd320a
7
+ data.tar.gz: a275be5c7b3b534ebd522463a030d4ea8c2e1c16fe4aa265993486949873a7c2be8a467bf36a57d9cd4cd459e01ab008797196e6976ba8c55ea4f5dca36683bc
data/Gemfile.lock CHANGED
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- opskeleton (0.9.3)
4
+ opskeleton (0.9.4)
5
5
  aws-sdk (~> 2)
6
6
  bintray_deploy
7
7
  git
8
+ git_clone_url
8
9
  net-scp
9
10
  thor
10
11
 
@@ -22,12 +23,12 @@ GEM
22
23
  thread_safe (~> 0.3, >= 0.3.4)
23
24
  tzinfo (~> 1.1)
24
25
  asciidoctor (1.5.2)
25
- aws-sdk (2.1.3)
26
- aws-sdk-resources (= 2.1.3)
27
- aws-sdk-core (2.1.3)
26
+ aws-sdk (2.1.7)
27
+ aws-sdk-resources (= 2.1.7)
28
+ aws-sdk-core (2.1.7)
28
29
  jmespath (~> 1.0)
29
- aws-sdk-resources (2.1.3)
30
- aws-sdk-core (= 2.1.3)
30
+ aws-sdk-resources (2.1.7)
31
+ aws-sdk-core (= 2.1.7)
31
32
  bintray_deploy (0.0.4)
32
33
  configuration
33
34
  rest-client
@@ -76,11 +77,13 @@ GEM
76
77
  faraday (0.9.1)
77
78
  multipart-post (>= 1.2, < 3)
78
79
  ffi (1.9.10)
79
- ffi-yajl (2.2.0)
80
+ ffi-yajl (2.2.2)
80
81
  libyajl2 (~> 1.2)
81
82
  formatador (0.2.5)
82
83
  git (1.2.9.1)
83
- guard (2.12.8)
84
+ git_clone_url (0.1.0)
85
+ uri-ssh_git
86
+ guard (2.12.9)
84
87
  formatador (>= 0.2.4)
85
88
  listen (>= 2.7, <= 4.0)
86
89
  lumberjack (~> 1.0)
@@ -201,15 +204,15 @@ GEM
201
204
  rspec-core (~> 3.3.0)
202
205
  rspec-expectations (~> 3.3.0)
203
206
  rspec-mocks (~> 3.3.0)
204
- rspec-core (3.3.1)
207
+ rspec-core (3.3.2)
205
208
  rspec-support (~> 3.3.0)
206
- rspec-expectations (3.3.0)
209
+ rspec-expectations (3.3.1)
207
210
  diff-lcs (>= 1.2.0, < 2.0)
208
211
  rspec-support (~> 3.3.0)
209
212
  rspec-its (1.2.0)
210
213
  rspec-core (>= 3.0.0)
211
214
  rspec-expectations (>= 3.0.0)
212
- rspec-mocks (3.3.1)
215
+ rspec-mocks (3.3.2)
213
216
  diff-lcs (>= 1.2.0, < 2.0)
214
217
  rspec-support (~> 3.3.0)
215
218
  rspec-puppet (2.2.0)
@@ -219,15 +222,15 @@ GEM
219
222
  builder (< 4)
220
223
  rspec-core (>= 2, < 4, != 2.12.0)
221
224
  rsync (1.0.9)
222
- serverspec (2.19.0)
225
+ serverspec (2.20.0)
223
226
  multi_json
224
227
  rspec (~> 3.0)
225
228
  rspec-its
226
- specinfra (~> 2.35)
229
+ specinfra (~> 2.38)
227
230
  sfl (2.2)
228
231
  shellany (0.0.1)
229
232
  slop (3.6.0)
230
- specinfra (2.37.1)
233
+ specinfra (2.38.1)
231
234
  net-scp
232
235
  net-ssh (~> 2.7)
233
236
  net-telnet
@@ -241,6 +244,7 @@ GEM
241
244
  unf (0.1.4)
242
245
  unf_ext
243
246
  unf_ext (0.0.7.1)
247
+ uri-ssh_git (0.1.1)
244
248
  uuidtools (2.1.5)
245
249
  wmi-lite (1.0.0)
246
250
  yajl-ruby (1.2.1)
data/docs/doc.adoc CHANGED
@@ -33,7 +33,7 @@ Perquisites (on Ubuntu):
33
33
 
34
34
  * Vagrant 1.7.x
35
35
  * RVM
36
- * Ruby 2.1.x
36
+ * Ruby >= 2.1.2
37
37
 
38
38
  ```bash
39
39
  $ rvm use system
@@ -83,7 +83,7 @@ Opskelaton defines a module life cycle:
83
83
 
84
84
  1. Internal non reusable modules (usually specific to a client site) go under static-modules
85
85
  2. If we create a general reusable module which is ready for prime time we pull out to a new git repository.
86
- 3. The extracted module is added back as a third party (using link:https://github.com/rodjek/librarian-puppet[librarian-puppet] module which resides under modules folder.
86
+ 3. The extracted module is added (using link:https://github.com/rodjek/librarian-puppet[librarian-puppet]) back as a third party module under modules folder.
87
87
 
88
88
  Life cycle scheme:
89
89
 
@@ -151,6 +151,20 @@ Commit message:
151
151
  This is a nice change
152
152
  ```
153
153
 
154
+ For more commit options:
155
+
156
+ ```bash
157
+ $ opsk help commit
158
+
159
+ Usage:
160
+ opsk commit [message]
161
+
162
+ Options:
163
+ [--message=MESSAGE] # optional commit message
164
+ [--all], [--no-all] # commit all
165
+
166
+ commit each changed puppet module under modules folder
167
+ ```
154
168
 
155
169
  Once commits are made we can push the changes:
156
170
 
@@ -160,7 +174,24 @@ Push modules/artifactory? (y/n) y
160
174
  pushing modules/artifactory ..
161
175
  ```
162
176
 
177
+ Opsk will add a remote writable repository for each submodule substituting the readonly protocol with a write enabled one, the default protocol is ssh (customizable by using --protocol).
163
178
 
179
+ For more options:
180
+
181
+ ```bash
182
+ $ opsk help push
183
+
184
+ Usage:
185
+ opsk push
186
+
187
+ Options:
188
+ [--protocol=PROTOCOL] # remote ssh protocol (https or ssh)
189
+ # Default: ssh
190
+ [--dry], [--no-dry] # dry mode
191
+ [--all], [--no-all] # push all without asking
192
+
193
+ push each changed puppet module under modules folder
194
+ ```
164
195
  === Testing
165
196
 
166
197
  Opskelaton supports two levels of testing:
@@ -292,7 +323,7 @@ Opskelaton defines a simple cookbook life cycle:
292
323
 
293
324
  1. Internal non reusable cookbooks (usually specific to a client site) go under static-cookbooks
294
325
  2. If we create a general reusable cookbook which is ready for prime time we pull out to a new git repository.
295
- 3. The extracted cookbook is added back as a third party (using [librarian-chef](https://github.com/applicationsonline/librarian-chef) thatd will place them under cookbooks folder).
326
+ 3. The extracted cookbook is added back as a third party (using link:https://github.com/applicationsonline/librarian-chef[librarian-chef]) cookbook under cookbooks folder).
296
327
 
297
328
  Life cycle scheme:
298
329
 
@@ -1,28 +1,36 @@
1
1
 
2
- GIT_PROTO = { ssh:'git@', https: 'https://' }
2
+ require 'git_clone_url'
3
3
 
4
- def add_pre(url)
5
- res = url.split('/')
6
- res[0] = "#{res[0]}:"
7
- res.join('/')
4
+ def normalize_url(readonly,options)
5
+ url = GitCloneUrl.parse(readonly)
6
+ proto = options['protocol'] || 'ssh'
7
+ port = options['port']? ":#{options['port']}" : ''
8
+ user = options['user']? "#{options['user']}@" : ''
9
+ "#{proto}://#{user}#{url.host}#{port}#{url.path}"
8
10
  end
9
11
 
10
- def add_writable(g,proto)
12
+ def add_writable(g,options)
11
13
  readonly = g.remotes.find{|r|r.name.eql?('origin')}.url
12
- writable = readonly.gsub(/git\:\/\//,GIT_PROTO[proto])
13
- writable = add_pre(writable) if proto.eql?(:ssh)
14
+ writable = normalize_url(readonly,options)
14
15
  remote_exists = g.remotes.map {|r| r.name}.include?('writable')
15
16
  unless readonly.eql?(writable) or remote_exists
16
17
  g.add_remote('writable',writable)
17
18
  end
18
19
  end
19
20
 
21
+ # ruby-git cannot do this (lame)
22
+ def local_ahead?(d)
23
+ %x{git --git-dir=#{d}/.git --work-tree=#{d}}.include?('ahead')
24
+ end
25
+
20
26
  module Opsk
21
27
  class Push < Thor::Group
22
28
  include Thorable, Thor::Actions
23
29
 
24
30
  class_option :protocol, :type=> :string, :desc => 'remote ssh protocol (https or ssh)', :default => 'ssh'
25
31
  class_option :dry, :type=> :boolean, :desc => 'dry mode', :default => false
32
+ class_option :user, :type=> :string, :desc => 'ssh protocol user'
33
+ class_option :port, :type=> :string, :desc => 'remote repo port'
26
34
  class_option :all, :type=> :boolean, :desc => 'push all without asking', :default => false
27
35
 
28
36
  def validate
@@ -34,9 +42,9 @@ module Opsk
34
42
  Dir["modules/*"].reject{|o| not File.directory?(o)}.each do |d|
35
43
  begin
36
44
  if File.exists?("#{d}/.git")
37
- g = Git.init(d)
38
- add_writable(g,options['protocol'].to_sym)
39
- if !options['dry'] and g.diff('origin').stats[:files].keys.length > 0
45
+ g = Git.open(d)
46
+ add_writable(g,options)
47
+ if !options['dry'] and local_ahead?(d)
40
48
  resp = yes?("Push #{d}? (y/n)") unless options['all']
41
49
  if(options['all'] or resp)
42
50
  say "pushing #{d} .."
@@ -1,3 +1,3 @@
1
1
  module Opskeleton
2
- VERSION = '0.9.3'
2
+ VERSION = '0.9.4'
3
3
  end
data/opskeleton.gemspec CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.add_dependency('aws-sdk', '~> 2')
17
17
  gem.add_dependency('net-scp')
18
18
  gem.add_dependency('git')
19
+ gem.add_dependency('git_clone_url')
19
20
  gem.add_development_dependency('puppet','=3.7.5')
20
21
  gem.add_development_dependency('chef')
21
22
  gem.add_development_dependency('rspec-puppet')
data/test/git_test.rb CHANGED
@@ -47,4 +47,14 @@ class GitTest < MiniTest::Unit::TestCase
47
47
  g = Git.init(ROOT)
48
48
  assert g.remotes.length == 2
49
49
  end
50
+
51
+ def test_urls
52
+ readonly = 'git://github.com/pulling-strings/puppet-jdk.git'
53
+ norm = normalize_url(readonly,{})
54
+ assert norm == 'ssh://github.com/pulling-strings/puppet-jdk.git'
55
+ norm = normalize_url(readonly,{'protocol' => 'https','port' => '1234'})
56
+ assert norm == 'https://github.com:1234/pulling-strings/puppet-jdk.git'
57
+ norm = normalize_url(readonly,{'user' => 'ronen', 'protocol' => 'ssh','port' => '1234'})
58
+ assert norm == 'ssh://ronen@github.com:1234/pulling-strings/puppet-jdk.git'
59
+ end
50
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opskeleton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - narkisr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-15 00:00:00.000000000 Z
11
+ date: 2015-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: git_clone_url
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: puppet
85
99
  requirement: !ruby/object:Gem::Requirement