bosh-workspace 0.9.0 → 0.9.1

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: 71d72e3aae686056ee3d786b534ab08899f9bd27
4
- data.tar.gz: cbddbed1e9069bf8bd2472d7e299d48418461008
3
+ metadata.gz: 607445472fd952b1af30e2c82b6f3a0cb41d428d
4
+ data.tar.gz: f0f76de3b79dce0572d2fbec1abb7639b8371cd3
5
5
  SHA512:
6
- metadata.gz: 7d9c43f7372bac130ec5ce6d76d6871437109dbfa2c6323f26d57f8856f29262c840e0a56fecb12a438f2a4ab2402bd54770f2714afab6e54c0df893dcc50156
7
- data.tar.gz: fc77d521f723b6cdf85d26196d434d149a562e3f13e7f109a28773f5ad1cb852587469828edb68640d56be08ce5237cd62a74227acf458cbf28bb01a7f0e92ac
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.
@@ -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.0b1"
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"
@@ -38,7 +38,9 @@ module Bosh::Cli::Command
38
38
  build_project_deployment
39
39
  end
40
40
 
41
- deployment_cmd(options).perform
41
+ command = deployment_cmd(options)
42
+ command.perform
43
+ @exit_code = command.exit_code
42
44
  end
43
45
 
44
46
  private
@@ -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 = YAML.load_file @file
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)[0]
98
- time = blame[:final_signature][:time]
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
- final_releases[time] = {
103
- version: version, manifest: manifest, commit: commit_id
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.sort_by { |k, _| k }
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+\.\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
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Manifests
3
- VERSION = "0.9.0"
3
+ VERSION = "0.9.1"
4
4
  end
5
5
  end
@@ -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.0
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-05-29 00:00:00.000000000 Z
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.0b1
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.0b1
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