bosh-workspace 0.9.0.rc1 → 0.9.0.rc2

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: a0e593085c05c3aa75cd00f1dd9d94782a3b8688
4
- data.tar.gz: 55aaae5f63c4035d13650769a99605d90e678959
3
+ metadata.gz: 8ccd94bede78be067bb0b528afc2342f80668f00
4
+ data.tar.gz: 460d07d013206e4e0bece716e190107118644f89
5
5
  SHA512:
6
- metadata.gz: 4880764b4fa20f940a5ed3242f8317e58dfc5faeec1f35205b1b1e2dfb2fa729413831eabf71406bf116365d7861e68ca4da3cf3370d6d010454a33777f3d54c
7
- data.tar.gz: 08daea7f845dcc9f5f9c8531b1504d88c6832cc1847dcbf49204830fd9e232bc087cd3efaca31b5afac293978de9d1f94f752f4fdd77c3ccf7e050a1be8d4398
6
+ metadata.gz: e2360dacd6ec5f34e5a7d94aa464611acd4cf24eddf684fd6ca86c399f5c4fa0dbcc0e77bfb5ea2c0b6381a3e6bb7c1a31c10b3e6a744d577096772eb097a15b
7
+ data.tar.gz: bdbd537d2ec1c8577ea211aeb005fc26d6fc09fc8fbd8181e056b47411450ea75190808eea72a3c8215ce685337685f5ef53dd771a5c4de9ed962a3156912e55
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.0
1
+ 2.1.4
@@ -20,12 +20,12 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '>= 2.0.0'
22
22
 
23
- spec.add_runtime_dependency "bosh_cli", ">= 1.2682.0"
24
- spec.add_runtime_dependency "bosh_common", ">= 1.2682.0"
23
+ spec.add_runtime_dependency "bosh_cli", ">= 1.2905.0"
24
+ spec.add_runtime_dependency "bosh_common", ">= 1.2905.0"
25
25
  spec.add_runtime_dependency "semi_semantic", "~> 1.1.0"
26
26
  spec.add_runtime_dependency "membrane", "~> 1.1.0"
27
27
  spec.add_runtime_dependency "hashdiff", "~> 0.2.1"
28
- spec.add_runtime_dependency "rugged", "~> 0.22.0b5"
28
+ spec.add_runtime_dependency "rugged", "~> 0.23.0b1"
29
29
 
30
30
  spec.add_development_dependency "bundler", "~> 1.6"
31
31
  spec.add_development_dependency "rspec", "~> 3.1.0"
@@ -26,6 +26,7 @@ module Bosh::Cli::Command
26
26
 
27
27
  def prepare_release_repos
28
28
  project_deployment_releases.each do |release|
29
+ require_git_url_error if release.git_url.nil?
29
30
  say "Fetching release '#{release.name.make_green}' to satisfy template references"
30
31
  fetch_or_clone_repo(release.repo_dir, release.git_url)
31
32
  release.update_repo
@@ -36,6 +37,11 @@ module Bosh::Cli::Command
36
37
  end
37
38
  end
38
39
 
40
+ def require_git_url_error
41
+ say "`bosh prepare deployment' can not be used:"
42
+ err("`git:' is missing from `release:'".make_red)
43
+ end
44
+
39
45
  def prepare_releases
40
46
  project_deployment_releases.each do |release|
41
47
  prepare_release(release)
@@ -48,7 +54,7 @@ module Bosh::Cli::Command
48
54
  say "Skipping upload"
49
55
  else
50
56
  say "Uploading '#{release.name_version.make_green}'"
51
- release_upload(release.manifest_file)
57
+ release_upload(release.manifest_file, release.repo_dir)
52
58
  end
53
59
  end
54
60
 
@@ -24,7 +24,7 @@ module Bosh::Workspace
24
24
 
25
25
  options = { credentials: require_credetials_for(url) }
26
26
  unless check_connection(repo, url, options)
27
- say "Using credentials from: #{credentials_file}"
27
+ say "Using credentials from: #{git_credentials_file}"
28
28
  err "Invalid credentials for: #{url}"
29
29
  end
30
30
  options
@@ -45,42 +45,42 @@ module Bosh::Workspace
45
45
  Rugged::Repository.new(dir)
46
46
  end
47
47
 
48
- def credentials
49
- @credentials ||= Credentials.new(credentials_file)
48
+ def git_credentials
49
+ @git_credentials ||= Credentials.new(git_credentials_file)
50
50
  end
51
51
 
52
52
  def require_credetials_for(url)
53
- unless File.exist? credentials_file
53
+ unless File.exist? git_credentials_file
54
54
  say("Authentication is required for: #{url}".make_red)
55
- err("Credentials file does not exist: #{credentials_file}".make_red)
55
+ err("Credentials file does not exist: #{git_credentials_file}".make_red)
56
56
  end
57
- unless credentials.valid?
57
+ unless git_credentials.valid?
58
58
  say("Validation errors:".make_red)
59
- credentials.errors.each { |error| say("- #{error}") }
60
- err("'#{credentials_file}' is not valid".make_red)
59
+ git_credentials.errors.each { |error| say("- #{error}") }
60
+ err("'#{git_credentials_file}' is not valid".make_red)
61
61
  end
62
- if creds = credentials.find_by_url(url)
62
+ if creds = git_credentials.find_by_url(url)
63
63
  load_git_credentials(creds)
64
64
  else
65
- say("Credential look up failed in: #{credentials_file}")
65
+ say("Credential look up failed in: #{git_credentials_file}")
66
66
  err("No credentials found for: #{url}".make_red)
67
67
  end
68
68
  end
69
69
 
70
- def credentials_file
70
+ def git_credentials_file
71
71
  File.join work_dir, '.credentials.yml'
72
72
  end
73
73
 
74
- def load_git_credentials(credentials)
75
- case credentials.keys
74
+ def load_git_credentials(git_credentials)
75
+ case git_credentials.keys
76
76
  when %i(private_key)
77
77
  options = {
78
78
  username: 'git',
79
- privatekey: temp_key_file(credentials[:private_key])
79
+ privatekey: temp_key_file(git_credentials[:private_key])
80
80
  }
81
81
  Rugged::Credentials::SshKey.new(options)
82
82
  when %i(username password)
83
- Rugged::Credentials::UserPassword.new(credentials)
83
+ Rugged::Credentials::UserPassword.new(git_credentials)
84
84
  end
85
85
  end
86
86
 
@@ -7,8 +7,10 @@ module Bosh::Workspace
7
7
  remote_release && remote_release["versions"].include?(version.to_s)
8
8
  end
9
9
 
10
- def release_upload(manifest_file)
11
- release_cmd.upload(manifest_file)
10
+ def release_upload(manifest_file, release_dir)
11
+ Dir.chdir(release_dir) do
12
+ release_cmd.upload(manifest_file)
13
+ end
12
14
  end
13
15
 
14
16
  def releases_dir
@@ -26,8 +28,7 @@ module Bosh::Workspace
26
28
  private
27
29
 
28
30
  def release_cmd
29
- @release_cmd ||= Bosh::Cli::Command::Release::UploadRelease.new
31
+ Bosh::Cli::Command::Release::UploadRelease.new
30
32
  end
31
33
  end
32
34
  end
33
-
@@ -44,11 +44,15 @@ module Bosh::Workspace
44
44
  @repo ||= Rugged::Repository.new(repo_dir)
45
45
  end
46
46
 
47
+ def new_style_repo
48
+ dir = File.join(repo_dir, "releases", @name)
49
+ File.directory?(dir) && !File.symlink?(dir)
50
+ end
51
+
47
52
  # transforms releases/foo-1.yml, releases/bar-2.yml to:
48
53
  # { "1" => foo-1.yml, "2" => bar-2.yml }
49
54
  def final_releases
50
55
  @final_releases ||= begin
51
- new_style_repo = File.directory?(File.join(repo_dir, "releases", @name))
52
56
  releases_dir = new_style_repo ? "releases/#{@name}" : "releases"
53
57
 
54
58
  Hash[Dir[File.join(repo_dir, releases_dir, "*.yml")]
@@ -5,12 +5,24 @@ module Bosh::Workspace
5
5
  Membrane::SchemaParser.parse do
6
6
  [{
7
7
  "name" => String,
8
- "version" => enum(Integer, "latest"),
8
+ "version" => ReleaseVersion.new,
9
9
  optional("ref") => enum(String),
10
- "git" => String,
10
+ optional("git") => String,
11
11
  }]
12
12
  end.validate object
13
13
  end
14
14
  end
15
+
16
+ class ReleaseVersion < Membrane::Schemas::Base
17
+ def validate(object)
18
+ return if object == "latest"
19
+ begin
20
+ SemiSemantic::Version.parse(object.to_s)
21
+ rescue SemiSemantic::ParseError
22
+ raise Membrane::SchemaValidationError.new(
23
+ "Should match: latest, Semantic versioning. Given: #{object}")
24
+ end
25
+ end
26
+ end
15
27
  end
16
28
  end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Manifests
3
- VERSION = "0.9.0.rc1"
3
+ VERSION = "0.9.0.rc2"
4
4
  end
5
5
  end
@@ -28,34 +28,49 @@ describe Bosh::Cli::Command::Prepare do
28
28
  let(:stemcells) { [] }
29
29
  let(:ref) { nil }
30
30
 
31
- before do
32
- expect(release).to receive(:update_repo)
33
- expect(release).to receive(:ref).and_return(ref)
34
- expect(command).to receive(:release_uploaded?)
31
+ context "releasewith git " do
32
+ before do
33
+ expect(release).to receive(:update_repo)
34
+ expect(release).to receive(:ref).and_return(ref)
35
+ expect(command).to receive(:release_uploaded?)
35
36
  .with(release.name, release.version).and_return(release_uploaded)
36
- expect(command).to receive(:fetch_or_clone_repo)
37
+ expect(command).to receive(:fetch_or_clone_repo)
37
38
  .with(release.repo_dir, release.git_url)
38
- end
39
+ end
40
+ context "release uploaded" do
41
+ let(:release_uploaded) { true }
39
42
 
40
- context "release uploaded" do
41
- let(:release_uploaded) { true }
43
+ it "does not upload the release" do
44
+ expect(command).to_not receive(:release_upload)
45
+ command.prepare
46
+ end
47
+ end
42
48
 
43
- it "does not upload the release" do
44
- expect(command).to_not receive(:release_upload)
45
- command.prepare
49
+ context "release not uploaded with ref" do
50
+ let(:release_uploaded) { false }
51
+ let(:ref) { "0f910f" }
52
+
53
+ context "without release ref" do
54
+ it "does upload the release" do
55
+ expect(release).to receive(:ref).and_return(ref)
56
+ expect(command).to receive(:release_upload)
57
+ .with(release.manifest_file, release.repo_dir)
58
+ command.prepare
59
+ end
60
+ end
46
61
  end
47
62
  end
48
63
 
49
- context "release not uploaded with ref" do
64
+ context "if the release git_url is not given" do
50
65
  let(:release_uploaded) { false }
51
- let(:ref) { "0f910f" }
66
+ let(:release) do
67
+ instance_double("Bosh::Workspace::Release",
68
+ name: "foo", version: "1", repo_dir: ".releases/foo", git_url: nil,
69
+ name_version: "foo/1", manifest_file: "releases/foo-1.yml")
70
+ end
52
71
 
53
- context "without release ref" do
54
- it "does upload the release" do
55
- expect(release).to receive(:ref).and_return(ref)
56
- expect(command).to receive(:release_upload).with(release.manifest_file)
57
- command.prepare
58
- end
72
+ it "notifies the user that the git property must be specified" do
73
+ expect{ command.prepare }.to raise_error(/`git:' is missing from `release:/)
59
74
  end
60
75
  end
61
76
  end
@@ -66,7 +81,7 @@ describe Bosh::Cli::Command::Prepare do
66
81
 
67
82
  before do
68
83
  expect(command).to receive(:stemcell_uploaded?)
69
- .with(stemcell.name, stemcell.version).and_return(stemcell_uploaded)
84
+ .with(stemcell.name, stemcell.version).and_return(stemcell_uploaded)
70
85
  end
71
86
 
72
87
  context "stemcell uploaded" do
@@ -84,7 +99,7 @@ describe Bosh::Cli::Command::Prepare do
84
99
 
85
100
  before do
86
101
  allow(stemcell).to receive(:downloaded?)
87
- .and_return(stemcell_downloaded)
102
+ .and_return(stemcell_downloaded)
88
103
  end
89
104
 
90
105
  context "stemcell downloaded" do
@@ -26,7 +26,7 @@ describe Bosh::Workspace::ReleaseHelper do
26
26
  end
27
27
 
28
28
  let(:manifest_file) { "foo-1.yml." }
29
- subject { release_helper.release_upload(manifest_file) }
29
+ subject { release_helper.release_upload(manifest_file, work_dir) }
30
30
 
31
31
  it "uploads release" do
32
32
  expect(release_cmd).to receive(:upload).with(manifest_file)
@@ -37,7 +37,7 @@ describe Bosh::Workspace::ReleaseHelper do
37
37
  describe "#release_uploaded?" do
38
38
  let(:releases) { { "versions" => %w(1 2 3) } }
39
39
  subject { release_helper.release_uploaded?("foo", version) }
40
- before do
40
+ before do
41
41
  expect(director).to receive(:get_release)
42
42
  .with("foo").and_return(releases)
43
43
  end
@@ -6,7 +6,7 @@ module Bosh::Workspace::Schemas
6
6
 
7
7
  subject { Releases.new.validate(releases) }
8
8
 
9
- %w(name version git).each do |field_name|
9
+ %w(name version).each do |field_name|
10
10
  context "missing #{field_name}" do
11
11
  let(:releases) { [release.delete_if { |k| k == field_name }] }
12
12
  it { expect { subject }.to raise_error(/#{field_name}.*missing/i) }
@@ -19,13 +19,18 @@ module Bosh::Workspace::Schemas
19
19
  end
20
20
 
21
21
  context "invalid version" do
22
- let(:releases) { release["version"] = "foo"; [release] }
23
- it { expect { subject }.to raise_error(/version.*doesn't validate/i) }
22
+ let(:releases) { release["version"] = "+foo"; [release] }
23
+ it { expect { subject }.to raise_error(/version.*should match/i) }
24
24
  end
25
25
 
26
26
  context "optional ref" do
27
27
  let(:releases) { [release.delete_if { |k| k == "ref" }] }
28
28
  it { expect { subject }.to_not raise_error }
29
29
  end
30
+
31
+ context "optional git" do
32
+ let(:releases) { [release.delete_if { |k| k == "git" }] }
33
+ it { expect { subject }.to_not raise_error }
34
+ end
30
35
  end
31
36
  end
data/spec/spec_helper.rb CHANGED
@@ -5,7 +5,7 @@ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
5
5
 
6
6
  require "rubygems"
7
7
  require "bundler"
8
- Bundler.setup(:default, :test)
8
+ Bundler.setup(:default, :test, :development)
9
9
 
10
10
  $:.unshift(File.expand_path("../../lib", __FILE__))
11
11
 
metadata CHANGED
@@ -1,167 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-workspace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.rc1
4
+ version: 0.9.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruben Koster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-04 00:00:00.000000000 Z
11
+ date: 2015-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bosh_cli
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2682.0
19
+ version: 1.2905.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2682.0
26
+ version: 1.2905.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bosh_common
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2682.0
33
+ version: 1.2905.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.2682.0
40
+ version: 1.2905.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: semi_semantic
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.1.0
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
54
  version: 1.1.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: membrane
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hashdiff
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.2.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.2.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rugged
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.22.0b5
89
+ version: 0.23.0b1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.22.0b5
96
+ version: 0.23.0b1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '1.6'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.6'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: 3.1.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.1.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec-its
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ~>
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: 1.1.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 1.1.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rake
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: archive-zip
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ~>
157
+ - - "~>"
158
158
  - !ruby/object:Gem::Version
159
159
  version: 0.7.0
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ~>
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: 0.7.0
167
167
  description: Manage your bosh workspace
@@ -171,11 +171,11 @@ executables: []
171
171
  extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
- - .gitignore
175
- - .rspec
176
- - .ruby-gemset
177
- - .ruby-version
178
- - .travis.yml
174
+ - ".gitignore"
175
+ - ".rspec"
176
+ - ".ruby-gemset"
177
+ - ".ruby-version"
178
+ - ".travis.yml"
179
179
  - Gemfile
180
180
  - Guardfile
181
181
  - LICENSE.txt
@@ -262,12 +262,12 @@ require_paths:
262
262
  - lib
263
263
  required_ruby_version: !ruby/object:Gem::Requirement
264
264
  requirements:
265
- - - '>='
265
+ - - ">="
266
266
  - !ruby/object:Gem::Version
267
267
  version: 2.0.0
268
268
  required_rubygems_version: !ruby/object:Gem::Requirement
269
269
  requirements:
270
- - - '>'
270
+ - - ">"
271
271
  - !ruby/object:Gem::Version
272
272
  version: 1.3.1
273
273
  requirements: []