product_metadata_tasks 1.0.0
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 +7 -0
- data/lib/product_metadata_tasks.rb +15 -0
- data/lib/product_metadata_tasks/stemcell.rb +44 -0
- data/lib/product_metadata_tasks/stemcell_update_task.rb +61 -0
- data/lib/product_metadata_tasks/tasks.rb +46 -0
- data/lib/product_metadata_tasks/version.rb +17 -0
- data/lib/product_metadata_tasks/version_number_update_task.rb +100 -0
- metadata +119 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6f65924237573761f1db6c2c4c8f9477f2deb035
|
4
|
+
data.tar.gz: b59ca37523e8e1de37e4a5064f8184ab0496a496
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4bcd34fcdbde5ede0b78d987254ae984e34f3f02f2d0685abbd8344f95b39acd2609863c00273a81866017f48137da757298db1cd3e0504d0bfa197641fc2437
|
7
|
+
data.tar.gz: 8781c3f3c237d42a636bac5b44c6e83d1d2e45a555f723314c7bb9f2c955e53776f63f784b373716f61754501b363ce27b02ea0208d6bde62fd19a32cc16ebe3
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'product_metadata_tasks/tasks'
|
2
|
+
|
3
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc. All rights reserved.
|
4
|
+
#
|
5
|
+
# Unauthorized use, copying or distribution of this source code via any
|
6
|
+
# medium is strictly prohibited without the express written consent of
|
7
|
+
# Pivotal Software, Inc.
|
8
|
+
#
|
9
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
10
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
11
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
12
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
13
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
14
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
15
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'httparty'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
module ProductMetadataTasks
|
6
|
+
class Stemcell
|
7
|
+
def initialize(url_string)
|
8
|
+
@url = url_string
|
9
|
+
|
10
|
+
raise "Not a URL: #{url_string}" unless url.is_a?(URI::HTTP)
|
11
|
+
end
|
12
|
+
|
13
|
+
def version
|
14
|
+
/bosh\-stemcell\-([^-]+)/.match(file).captures.first
|
15
|
+
end
|
16
|
+
|
17
|
+
def file
|
18
|
+
url.path.split('/').last
|
19
|
+
end
|
20
|
+
|
21
|
+
def md5
|
22
|
+
response = HTTParty.head(url.to_s)
|
23
|
+
response.headers['etag'].gsub('"','')
|
24
|
+
end
|
25
|
+
|
26
|
+
def url
|
27
|
+
URI.parse(@url)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc. All rights reserved.
|
33
|
+
#
|
34
|
+
# Unauthorized use, copying or distribution of this source code via any
|
35
|
+
# medium is strictly prohibited without the express written consent of
|
36
|
+
# Pivotal Software, Inc.
|
37
|
+
#
|
38
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
39
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
40
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
41
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
42
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
43
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
44
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
require 'product_metadata_tasks/stemcell'
|
4
|
+
|
5
|
+
module ProductMetadataTasks
|
6
|
+
class StemcellUpdateTask
|
7
|
+
def initialize(stemcell_url, binaries_path)
|
8
|
+
@binaries_path = binaries_path
|
9
|
+
@stemcell = Stemcell.new(stemcell_url)
|
10
|
+
|
11
|
+
check_binaries_path!
|
12
|
+
end
|
13
|
+
|
14
|
+
def run(verbose=false)
|
15
|
+
binaries_config = load_binaries_config
|
16
|
+
|
17
|
+
binaries_config['stemcell']['version'] = stemcell.version
|
18
|
+
binaries_config['stemcell']['file'] = stemcell.file
|
19
|
+
binaries_config['stemcell']['md5'] = stemcell.md5
|
20
|
+
|
21
|
+
persist_binaries_config(binaries_config)
|
22
|
+
|
23
|
+
if verbose
|
24
|
+
puts "Updated stemcell to #{stemcell.file}"
|
25
|
+
puts ''
|
26
|
+
puts `git diff #{binaries_path}`
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :binaries_path, :stemcell
|
33
|
+
|
34
|
+
def load_binaries_config
|
35
|
+
YAML.load_file(binaries_path)
|
36
|
+
end
|
37
|
+
|
38
|
+
def persist_binaries_config(config)
|
39
|
+
yaml = config.to_yaml
|
40
|
+
File.open(binaries_path,'w'){ |f| f.write(yaml) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def check_binaries_path!
|
44
|
+
raise "#{binaries_path} not found, are you sure this is an ops manager product directory?" unless File.exist?(binaries_path)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc. All rights reserved.
|
50
|
+
#
|
51
|
+
# Unauthorized use, copying or distribution of this source code via any
|
52
|
+
# medium is strictly prohibited without the express written consent of
|
53
|
+
# Pivotal Software, Inc.
|
54
|
+
#
|
55
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
56
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
57
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
58
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
59
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
60
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
61
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
require 'product_metadata_tasks/stemcell_update_task'
|
4
|
+
require 'product_metadata_tasks/version_number_update_task'
|
5
|
+
|
6
|
+
namespace :metadata do
|
7
|
+
desc 'Available stemcells'
|
8
|
+
task :available_stemcells do
|
9
|
+
output = `bosh public stemcells --full --all`
|
10
|
+
|
11
|
+
puts output.split("\n").select{|l| l =~ /bosh-stemcell/ }.map{|l| l.split("|")[2].strip }
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Update to a specific stemcell'
|
15
|
+
task :update_stemcell, [:url] do |t, args|
|
16
|
+
ProductMetadataTasks::StemcellUpdateTask.new(args[:url], File.expand_path('metadata_parts/binaries.yml')).run(true)
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'Update the version number in the metadata and migrations'
|
20
|
+
task :update_product_version, [:version_number,:minimum_supported_opsman_version] do |t, args|
|
21
|
+
args.with_defaults(minimum_supported_opsman_version: "1.6")
|
22
|
+
ProductMetadataTasks::VersionNumberUpdateTask.new(Dir.pwd).update_version(
|
23
|
+
args[:version_number],
|
24
|
+
args[:minimum_supported_opsman_version]
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
desc 'Create a migration'
|
29
|
+
task :create_migration, [:from_version, :to_version] do |t, args|
|
30
|
+
ProductMetadataTasks::VersionNumberUpdateTask.new(Dir.pwd).create_new_migration(args[:from_version], args[:to_version])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc. All rights reserved.
|
35
|
+
#
|
36
|
+
# Unauthorized use, copying or distribution of this source code via any
|
37
|
+
# medium is strictly prohibited without the express written consent of
|
38
|
+
# Pivotal Software, Inc.
|
39
|
+
#
|
40
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
41
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
42
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
43
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
44
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
45
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
46
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ProductMetadataTasks
|
2
|
+
VERSION = '1.0.0'
|
3
|
+
end
|
4
|
+
|
5
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc. All rights reserved.
|
6
|
+
#
|
7
|
+
# Unauthorized use, copying or distribution of this source code via any
|
8
|
+
# medium is strictly prohibited without the express written consent of
|
9
|
+
# Pivotal Software, Inc.
|
10
|
+
#
|
11
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
12
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
13
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
14
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
15
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
16
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
17
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module ProductMetadataTasks
|
2
|
+
class VersionNumberUpdateTask
|
3
|
+
def initialize(root_directory)
|
4
|
+
raise "root_directory not found" unless File.directory?(root_directory)
|
5
|
+
@root_directory = Pathname.new(root_directory)
|
6
|
+
end
|
7
|
+
|
8
|
+
def update_version(version_number, supported_opsman_version = "1.6")
|
9
|
+
update_binaries_yml(version_number)
|
10
|
+
if Gem::Version.new(supported_opsman_version) < Gem::Version.new("1.7")
|
11
|
+
update_content_migrations(version_number)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_new_migration(version_from, version_to)
|
16
|
+
migration = {
|
17
|
+
"from_version" => version_from,
|
18
|
+
"rules" => [{
|
19
|
+
"type" => "update",
|
20
|
+
"selector" => "product_version",
|
21
|
+
"to" => "#{version_to}$PRERELEASE_VERSION$"
|
22
|
+
}]
|
23
|
+
}
|
24
|
+
write_yaml(migration, File.join(migrations_directory_path, "from_#{version_from}.yml"))
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :root_directory
|
30
|
+
|
31
|
+
def update_binaries_yml(version_number)
|
32
|
+
binaries_yml = get_yaml(binaries_file_path)
|
33
|
+
binaries_yml["product_version"] = version_number + "$PRERELEASE_VERSION$"
|
34
|
+
binaries_yml["provides_product_versions"].each do |element|
|
35
|
+
element["version"] = version_number
|
36
|
+
end
|
37
|
+
write_yaml(binaries_yml, binaries_file_path)
|
38
|
+
end
|
39
|
+
|
40
|
+
def update_content_migrations(version_number)
|
41
|
+
base_yml = get_yaml(base_file_path)
|
42
|
+
old_version = base_yml["to_version"].split("$").first
|
43
|
+
base_yml["to_version"] = version_number + "$PRERELEASE_VERSION$"
|
44
|
+
write_yaml(base_yml, base_file_path)
|
45
|
+
|
46
|
+
migration_file_paths.each do |migration_file|
|
47
|
+
migration_path = migrations_directory_path.join(migration_file)
|
48
|
+
migration_yml = get_yaml(migration_path)
|
49
|
+
migration_yml["rules"].each do |element|
|
50
|
+
element["to"] = version_number + "$PRERELEASE_VERSION$" if element["selector"] == "product_version"
|
51
|
+
end
|
52
|
+
write_yaml(migration_yml, migration_path)
|
53
|
+
end
|
54
|
+
|
55
|
+
create_new_migration(old_version, version_number)
|
56
|
+
end
|
57
|
+
|
58
|
+
def binaries_file_path
|
59
|
+
root_directory.join('metadata_parts/binaries.yml')
|
60
|
+
end
|
61
|
+
|
62
|
+
def base_file_path
|
63
|
+
root_directory.join('content_migrations_parts/base.yml')
|
64
|
+
end
|
65
|
+
|
66
|
+
def migrations_directory_path
|
67
|
+
root_directory.join('content_migrations_parts/migrations')
|
68
|
+
end
|
69
|
+
|
70
|
+
def migration_file_paths
|
71
|
+
Dir.entries(migrations_directory_path).select do |entry|
|
72
|
+
entry.end_with?('.yml')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def write_yaml(yaml, path)
|
77
|
+
File.open(path, 'w') do |f|
|
78
|
+
f.write yaml.to_yaml
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def get_yaml(path)
|
83
|
+
YAML.load(File.read(path))
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc. All rights reserved.
|
89
|
+
#
|
90
|
+
# Unauthorized use, copying or distribution of this source code via any
|
91
|
+
# medium is strictly prohibited without the express written consent of
|
92
|
+
# Pivotal Software, Inc.
|
93
|
+
#
|
94
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
95
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
96
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
97
|
+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
98
|
+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
99
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
100
|
+
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: product_metadata_tasks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- CF London
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: gemfury
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.1.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec-mocks
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.1.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.1.0
|
83
|
+
description: A library of rake tasks for repetitive updates to product metadata.
|
84
|
+
email:
|
85
|
+
- cf-london-eng@pivotal.io
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- lib/product_metadata_tasks.rb
|
91
|
+
- lib/product_metadata_tasks/stemcell.rb
|
92
|
+
- lib/product_metadata_tasks/stemcell_update_task.rb
|
93
|
+
- lib/product_metadata_tasks/tasks.rb
|
94
|
+
- lib/product_metadata_tasks/version.rb
|
95
|
+
- lib/product_metadata_tasks/version_number_update_task.rb
|
96
|
+
homepage:
|
97
|
+
licenses: []
|
98
|
+
metadata: {}
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 2.6.4
|
116
|
+
signing_key:
|
117
|
+
specification_version: 4
|
118
|
+
summary: A library of rake tasks for repetitive updates to product metadata.
|
119
|
+
test_files: []
|