bosh-workspace 0.9.0 → 0.9.1
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 +4 -4
- data/README.md +9 -0
- data/bosh-workspace.gemspec +1 -1
- data/lib/bosh/cli/commands/project_deployment.rb +3 -1
- data/lib/bosh/workspace/project_deployment.rb +1 -1
- data/lib/bosh/workspace/release.rb +14 -8
- data/lib/bosh/workspace/schemas/stemcells.rb +2 -2
- data/lib/bosh/workspace/version.rb +1 -1
- data/spec/assets/foo-bar-boshrelease-repo.zip +0 -0
- data/spec/commands/project_deployment_spec.rb +14 -0
- data/spec/project_deployment_spec.rb +2 -1
- data/spec/release_spec.rb +38 -0
- data/spec/schemas/releases_spec.rb +5 -0
- data/spec/schemas/stemcells_spec.rb +10 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 607445472fd952b1af30e2c82b6f3a0cb41d428d
|
4
|
+
data.tar.gz: f0f76de3b79dce0572d2fbec1abb7639b8371cd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b78a7da1250d9063edf88d3be266d7de2b22a028527a85ff7db45b3d5fb0addb6dbb71a8737116c3a7c242f1151462ffb0d8370bed1877be4662eaaceb5be71
|
7
|
+
data.tar.gz: abc262a9c39cd72eefe22ed7a73bd6bf8fb2be7d99893f8f40f926278c7018488b519c5f72a7e91de79b7844db4f4b54b2662e97bbe3410d2b65859ee7acb053
|
data/README.md
CHANGED
@@ -123,6 +123,15 @@ Example `.credentials.yml` file:
|
|
123
123
|
-----END RSA PRIVATE KEY-----
|
124
124
|
```
|
125
125
|
|
126
|
+
## Install Notes
|
127
|
+
|
128
|
+
### Ubuntu
|
129
|
+
cmake and libcurl4-openssl-dev is needed for rugged install
|
130
|
+
|
131
|
+
```
|
132
|
+
sudo apt-get install cmake libcurl4-openssl-dev
|
133
|
+
```
|
134
|
+
|
126
135
|
## Experimental
|
127
136
|
### dns support
|
128
137
|
Dns support can be enabled by adding a `domain_name` property to your deployment.
|
data/bosh-workspace.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
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.23.
|
28
|
+
spec.add_runtime_dependency "rugged", "~> 0.23.0b3"
|
29
29
|
|
30
30
|
spec.add_development_dependency "bundler", "~> 1.6"
|
31
31
|
spec.add_development_dependency "rspec", "~> 3.1.0"
|
@@ -7,7 +7,7 @@ module Bosh::Workspace
|
|
7
7
|
def initialize(file)
|
8
8
|
@file = file
|
9
9
|
err("Deployment file does not exist: #{file}") unless File.exist? @file
|
10
|
-
@manifest =
|
10
|
+
@manifest = Psych.load(ERB.new(File.read(@file)).result)
|
11
11
|
end
|
12
12
|
|
13
13
|
def perform_validation(options = {})
|
@@ -90,22 +90,28 @@ module Bosh::Workspace
|
|
90
90
|
# [ { version: "1", commit: ee8d52f5d, manifest: releases/foo-1.yml } ]
|
91
91
|
def final_releases
|
92
92
|
@final_releases ||= begin
|
93
|
-
final_releases =
|
93
|
+
final_releases = []
|
94
94
|
releases_tree.walk_blobs(:preorder) do |_, entry|
|
95
95
|
next if entry[:filemode] == 40960 # Skip symlinks
|
96
96
|
path = File.join(releases_dir, entry[:name])
|
97
|
-
blame = Rugged::Blame.new(repo, path)
|
98
|
-
|
97
|
+
blame = Rugged::Blame.new(repo, path).reduce { |memo, hunk|
|
98
|
+
if memo.nil? || hunk[:final_signature][:time] > memo[:final_signature][:time]
|
99
|
+
hunk
|
100
|
+
else
|
101
|
+
memo
|
102
|
+
end
|
103
|
+
}
|
99
104
|
commit_id = blame[:final_commit_id]
|
100
105
|
manifest = blame[:orig_path]
|
101
106
|
version = entry[:name][/#{@name}-(.+)\.yml/, 1]
|
102
|
-
|
103
|
-
|
104
|
-
|
107
|
+
if ! version.nil?
|
108
|
+
final_releases.push({
|
109
|
+
version: version, manifest: manifest, commit: commit_id
|
110
|
+
})
|
111
|
+
end
|
105
112
|
end
|
106
113
|
|
107
|
-
final_releases.
|
108
|
-
.map { |a| a[1] }.reject { |f| f[:manifest][/index.yml/] }
|
114
|
+
final_releases.sort! { |a, b| a[:version].to_i <=> b[:version].to_i }
|
109
115
|
end
|
110
116
|
end
|
111
117
|
|
@@ -16,9 +16,9 @@ module Bosh::Workspace
|
|
16
16
|
return if object.is_a? Integer
|
17
17
|
return if object.is_a? Float
|
18
18
|
return if object == "latest"
|
19
|
-
return if object.to_s =~ /^\d
|
19
|
+
return if object.to_s =~ /^\d+(\.\d+){1,2}$/
|
20
20
|
raise Membrane::SchemaValidationError.new(
|
21
|
-
"Should match: latest, version.patch or version. Given: #{object}")
|
21
|
+
"Should match: latest, version.patch.micropatch, version.patch or version. Given: #{object}")
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
Binary file
|
@@ -66,10 +66,12 @@ describe Bosh::Cli::Command::ProjectDeployment do
|
|
66
66
|
expect(command).to receive(:project_deployment?)
|
67
67
|
.and_return(is_project_deployment)
|
68
68
|
expect(deployment_cmd).to receive(:perform)
|
69
|
+
expect(deployment_cmd).to receive(:exit_code).and_return(exit_code)
|
69
70
|
end
|
70
71
|
|
71
72
|
context "with project deployment" do
|
72
73
|
let(:is_project_deployment) { true }
|
74
|
+
let(:exit_code) { 0 }
|
73
75
|
|
74
76
|
it "requires project deployment" do
|
75
77
|
expect(command).to receive(:require_project_deployment)
|
@@ -80,9 +82,21 @@ describe Bosh::Cli::Command::ProjectDeployment do
|
|
80
82
|
|
81
83
|
context "with normal deployment" do
|
82
84
|
let(:is_project_deployment) { false }
|
85
|
+
let(:exit_code) { 0 }
|
83
86
|
|
84
87
|
it "deploys" do
|
85
88
|
subject
|
89
|
+
expect(command.exit_code).to eq(0)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "with failing deployment" do
|
94
|
+
let(:is_project_deployment) { false }
|
95
|
+
let(:exit_code) { 1 }
|
96
|
+
|
97
|
+
it "reports the exit_code correctly" do
|
98
|
+
subject
|
99
|
+
expect(command.exit_code).to eq(1)
|
86
100
|
end
|
87
101
|
end
|
88
102
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Bosh::Workspace
|
2
2
|
describe ProjectDeployment do
|
3
3
|
subject { Bosh::Workspace::ProjectDeployment.new manifest_file }
|
4
|
-
let(:manifest_file) { get_tmp_file_path(manifest.to_yaml, file_name) }
|
4
|
+
let(:manifest_file) { get_tmp_file_path(ruby_code + manifest.to_yaml, file_name) }
|
5
5
|
let(:file_name) { "foo.yml" }
|
6
6
|
let(:manifest) { :manifest }
|
7
|
+
let(:ruby_code) { "<% ruby_var=42 %>" }
|
7
8
|
|
8
9
|
describe ".new" do
|
9
10
|
context "deployment file does not exist" do
|
data/spec/release_spec.rb
CHANGED
@@ -86,6 +86,44 @@ describe Bosh::Workspace::Release do
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
+
context "given a release with index + release v1 last touched on the same commit" do
|
90
|
+
let(:repo) { extracted_asset_dir("foo-bar", "foo-bar-boshrelease-repo.zip") }
|
91
|
+
let(:name) { "foo-bar" }
|
92
|
+
|
93
|
+
before do
|
94
|
+
FileUtils.rm_rf(releases_dir)
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#update_repo" do
|
98
|
+
subject do
|
99
|
+
Dir[File.join(releases_dir, name, "releases/foo-bar/foo-bar*.yml")].to_s
|
100
|
+
end
|
101
|
+
|
102
|
+
context "latest version" do
|
103
|
+
before { release.update_repo }
|
104
|
+
let(:version) { "latest" }
|
105
|
+
it "checks out repo" do
|
106
|
+
expect(subject).to match(/releases\/foo-bar\/foo-bar-2.yml/)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "attributes" do
|
112
|
+
let(:version) { "1" }
|
113
|
+
subject { release }
|
114
|
+
its(:name) { should eq name}
|
115
|
+
its(:git_url) { should eq repo }
|
116
|
+
its(:repo_dir) { should match(/\/#{name}$/) }
|
117
|
+
its(:manifest) { should match "releases/#{name}/#{name}-#{version}.yml$" }
|
118
|
+
its(:name_version) { should eq "#{name}/#{version}" }
|
119
|
+
its(:version) { should eq version }
|
120
|
+
its(:manifest_file) do
|
121
|
+
should match(/\/releases\/#{name}\/#{name}-#{version}.yml$/)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
|
89
127
|
context "given a release with submodule templates" do
|
90
128
|
let(:repo) { extracted_asset_dir("supermodule", "supermodule-boshrelease-repo.zip") }
|
91
129
|
let(:subrepo) { extracted_asset_dir("submodule-boshrelease", "submodule-boshrelease-repo.zip") }
|
@@ -24,6 +24,11 @@ module Bosh::Workspace::Schemas
|
|
24
24
|
it { expect { subject }.to_not raise_error }
|
25
25
|
end
|
26
26
|
|
27
|
+
context "semantic version" do
|
28
|
+
let(:releases) { release["version"] = "1.2.3"; [release] }
|
29
|
+
it { expect { subject }.to_not raise_error }
|
30
|
+
end
|
31
|
+
|
27
32
|
context "invalid version" do
|
28
33
|
let(:releases) { release["version"] = "+foo"; [release] }
|
29
34
|
it { expect { subject }.to raise_error(/version.*should match/i) }
|
@@ -23,6 +23,16 @@ module Bosh::Workspace::Schemas
|
|
23
23
|
it { expect { subject }.to_not raise_error }
|
24
24
|
end
|
25
25
|
|
26
|
+
context "patch version with multiple dots" do
|
27
|
+
let(:stemcells) { stemcell["version"] = "1.2.3"; [stemcell] }
|
28
|
+
it { expect { subject }.to_not raise_error }
|
29
|
+
end
|
30
|
+
|
31
|
+
context "fails for versions with too many dots" do
|
32
|
+
let(:stemcells) { stemcell["version"] = "1.2.3.4"; [stemcell] }
|
33
|
+
it { expect { subject }.to raise_error(/version.*should match/i) }
|
34
|
+
end
|
35
|
+
|
26
36
|
context "patch version float" do
|
27
37
|
let(:stemcells) { stemcell["version"] = 2719.1; [stemcell] }
|
28
38
|
it { expect { subject }.to_not raise_error }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh-workspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
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-
|
11
|
+
date: 2015-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bosh_cli
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.23.
|
89
|
+
version: 0.23.0b3
|
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.23.
|
96
|
+
version: 0.23.0b3
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: bundler
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- spec/assets/dns/networks-no-manual.yml
|
219
219
|
- spec/assets/dns/properties.yml
|
220
220
|
- spec/assets/empty-manifests-repo/.keep
|
221
|
+
- spec/assets/foo-bar-boshrelease-repo.zip
|
221
222
|
- spec/assets/foo-boshrelease-repo-new-structure.zip
|
222
223
|
- spec/assets/foo-boshrelease-repo-subdir.zip
|
223
224
|
- spec/assets/foo-boshrelease-repo-updated.zip
|
@@ -290,6 +291,7 @@ test_files:
|
|
290
291
|
- spec/assets/dns/networks-no-manual.yml
|
291
292
|
- spec/assets/dns/properties.yml
|
292
293
|
- spec/assets/empty-manifests-repo/.keep
|
294
|
+
- spec/assets/foo-bar-boshrelease-repo.zip
|
293
295
|
- spec/assets/foo-boshrelease-repo-new-structure.zip
|
294
296
|
- spec/assets/foo-boshrelease-repo-subdir.zip
|
295
297
|
- spec/assets/foo-boshrelease-repo-updated.zip
|