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