simp-build-helpers 0.1.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 +15 -0
- data/.document +3 -0
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.travis.yml +7 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +7 -0
- data/Gemfile +11 -0
- data/Guardfile +98 -0
- data/LICENSE +27 -0
- data/README.md +41 -0
- data/Rakefile +28 -0
- data/lib/simp/build/helpers.rb +1 -0
- data/lib/simp/build/helpers/version.rb +27 -0
- data/lib/simp/build/release_mapper.rb +144 -0
- data/simp-build-helpers.gemspec +36 -0
- data/spec/files/fake_isos/CentOS-6.7-false-positive.iso +1 -0
- data/spec/files/fake_isos/CentOS-6.7-x86_64-bin-DVD1.iso +1 -0
- data/spec/files/fake_isos/CentOS-6.7-x86_64-bin-DVD2.iso +1 -0
- data/spec/files/fake_isos/CentOS-7-x86_64-DVD-1503-01.iso +1 -0
- data/spec/files/fake_isos/CentOS-7-x86_64-DVD-1511.iso +1 -0
- data/spec/files/fake_isos/RedHat-7.2-x86_64-DVD.iso +1 -0
- data/spec/files/fake_isos_empty/.gitkeep +1 -0
- data/spec/files/release_mappings.yaml +35 -0
- data/spec/helpers_spec.rb +8 -0
- data/spec/release_mapper_spec.rb +143 -0
- data/spec/spec_helper.rb +4 -0
- metadata +136 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
Njg1Y2M5ZjZjMTUyMDE4ZjFkNGFhZDczNzJlOTlmNzkxOWIwYmMyYQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NDFlOTY0YTBkZWM5NzJmNWEyMTQ2MzViM2RhOGJmNzU4MGM5ZmEzNg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDU0ZjQxZTU1NTc2NWNkM2I3YWNiNTViYjgyMTIwOGU4MWM1ZGUwZWE3MzBh
|
10
|
+
NjMxZGRlNWU3NTRjZDVhYmFmMWNlOWYzODMwOWM4NmVkYTg4MTVkMDgxZDli
|
11
|
+
NTRhZjBmYjU4ZTE3YTEyMTI3NzNmNjRjYTY5YzVlNTg1YWNiZmU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ODBhMGJiZDcxMzEwYWNlMDBiZjY2YjgzY2YyOWY1NDNiMDExODQwMDAwODAz
|
14
|
+
YWU1NWVlYThiZTQyNzUzZGVkZDc5OWIyMDZmZTVhMjk4MmEwY2MxMWFjMzk0
|
15
|
+
MTNkNDk5YTRhNDVlNWY4YTcyZjQ1YzBkMzgyY2I0ZTQ0NzE1ZDE=
|
data/.document
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour --format documentation
|
data/.travis.yml
ADDED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown --title "simp-build-helpers Documentation" --protected
|
data/ChangeLog.md
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec feature)
|
6
|
+
|
7
|
+
## Uncomment to clear the screen before every task
|
8
|
+
# clearing :on
|
9
|
+
|
10
|
+
## Make Guard exit when config is changed so it can be restarted
|
11
|
+
#
|
12
|
+
## Note: if you want Guard to automatically start up again, run guard in a
|
13
|
+
## shell loop, e.g.:
|
14
|
+
#
|
15
|
+
# $ while bundle exec guard; do echo "Restarting Guard..."; done
|
16
|
+
#
|
17
|
+
## Note: if you are using the `directories` clause above and you are not
|
18
|
+
## watching the project directory ('.'), the you will want to move the Guardfile
|
19
|
+
## to a watched dir and symlink it back, e.g.
|
20
|
+
#
|
21
|
+
# $ mkdir config
|
22
|
+
# $ mv Guardfile config/
|
23
|
+
# $ ln -s config/Guardfile .
|
24
|
+
#
|
25
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
26
|
+
#
|
27
|
+
watch 'Guardfile' do
|
28
|
+
UI.info 'Exiting because Guard must be restarted for changes to take effect'
|
29
|
+
exit 0
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
# shell commands
|
34
|
+
guard :shell do
|
35
|
+
# test that the .gemspec still works
|
36
|
+
watch %r{^.*\.gemspec$} do |m|
|
37
|
+
cmd = "bundle exec gem build '#{m[0]}'"
|
38
|
+
p "== #{cmd}"
|
39
|
+
`#{cmd}`
|
40
|
+
end
|
41
|
+
|
42
|
+
### watch /.*\.rb$/ do |m|
|
43
|
+
### if !system("ruby -c #{m[0]} &> /dev/null")
|
44
|
+
### #n "#{m[0]} is incorrect", 'Ruby Syntax', :failed
|
45
|
+
### else
|
46
|
+
### #n "#{m[0]} is correct", 'Ruby Syntax', :success
|
47
|
+
### end
|
48
|
+
### end
|
49
|
+
# environment variables:
|
50
|
+
# - SIMP_GUARD_SHELL_TESTS = when 1, run `simp config`
|
51
|
+
# - SIMP_NIC = when set, tack on "-i ${SIMP_NIC}"
|
52
|
+
# Run `simp config` when core files change
|
53
|
+
### watch %r{^(bin/simp|lib/simp/(cli.rb|cli/(commands|config(/item)?)/.*\.rb))} do |m|
|
54
|
+
### if ENV.fetch( 'SIMP_GUARD_SHELL_TESTS', false ) == '1'
|
55
|
+
### m[0] + " has changed"
|
56
|
+
### cmd = "bundle exec ruby bin/simp config -ffy"
|
57
|
+
### cmd += " -i #{ENV['SIMP_NIC']}" if ENV.fetch( 'SIMP_NIC', false )
|
58
|
+
### puts "== #{cmd}"
|
59
|
+
### `#{cmd}`
|
60
|
+
### end
|
61
|
+
### end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# Run rspec tests when things change
|
66
|
+
guard :rspec, cmd: 'bundle exec rspec ' do
|
67
|
+
watch(%r{^spec/.+_spec\.rb$})
|
68
|
+
|
69
|
+
# when a file changes run the tests for that file
|
70
|
+
watch(%r{^lib/(.+)\.rb$}) do |m|
|
71
|
+
File.join( 'spec', "#{File.basename(m[1])}_spec.rb" )
|
72
|
+
end
|
73
|
+
|
74
|
+
watch('spec/spec_helper.rb') { "spec" }
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# tmux 1.7+ can send rspec results to the TMUX status pane.
|
79
|
+
notification( :tmux, {
|
80
|
+
display_message: true,
|
81
|
+
timeout: 5, # in seconds
|
82
|
+
default_message_format: '%s >> %s',
|
83
|
+
# the first %s will show the title, the second the message
|
84
|
+
# Alternately you can also configure *success_message_format*,
|
85
|
+
# *pending_message_format*, *failed_message_format*
|
86
|
+
line_separator: ' > ', # since we are single line we need a separator
|
87
|
+
color_location: 'status-left-bg', # to customize which tmux element will change color
|
88
|
+
|
89
|
+
# Other options:
|
90
|
+
default_message_color: 'black',
|
91
|
+
success: 'colour150',
|
92
|
+
failure: 'colour174',
|
93
|
+
pending: 'colour179',
|
94
|
+
# Notify on all tmux clients
|
95
|
+
|
96
|
+
display_on_all_clients: false
|
97
|
+
}) if ( ENV.fetch( 'TMUX', false ) && (%x{tmux -V}.split(' ').last.split('.').last.to_i > 6 ))
|
98
|
+
# vim:set syntax=ruby:
|
data/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
simp-build-helpers - SIMP build helpers
|
2
|
+
|
3
|
+
--
|
4
|
+
|
5
|
+
Per Section 105 of the Copyright Act of 1976, these works are not entitled to
|
6
|
+
domestic copyright protection under US Federal law.
|
7
|
+
|
8
|
+
The US Government retains the right to pursue copyright protections outside of
|
9
|
+
the United States.
|
10
|
+
|
11
|
+
The United States Government has unlimited rights in this software and all
|
12
|
+
derivatives thereof, pursuant to the contracts under which it was developed and
|
13
|
+
the License under which it falls.
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
18
|
+
you may not use this file except in compliance with the License.
|
19
|
+
You may obtain a copy of the License at
|
20
|
+
|
21
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
22
|
+
|
23
|
+
Unless required by applicable law or agreed to in writing, software
|
24
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
25
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
26
|
+
See the License for the specific language governing permissions and
|
27
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
[](https://travis-ci.org/simp/rubygem-simp-build-helpers)
|
2
|
+
[](http://www.apache.org/licenses/LICENSE-2.0.html)
|
3
|
+
# simp-build-helpers
|
4
|
+
|
5
|
+
SIMP build helpers
|
6
|
+
|
7
|
+
#### Table of Contents
|
8
|
+
1. [Overview](#overview)
|
9
|
+
2. [Setup](#setup)
|
10
|
+
* [Beginning with simp-build-helpers](#beginning-with-simp-build-helpers)
|
11
|
+
3. [Methods](#methods)
|
12
|
+
4. [Environment variables](#environment-variables)
|
13
|
+
5. [Examples](#examples)
|
14
|
+
6. [License](#license)
|
15
|
+
|
16
|
+
## Overview
|
17
|
+
|
18
|
+
Provides helper methods for building SIMP
|
19
|
+
|
20
|
+
## Setup
|
21
|
+
|
22
|
+
### Beginning with simp-build-helpers
|
23
|
+
|
24
|
+
Add this to your project's `Gemfile`:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
gem 'simp-build-helpers'
|
28
|
+
```
|
29
|
+
|
30
|
+
## Methods
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
## Environment variables
|
35
|
+
|
36
|
+
|
37
|
+
## Examples
|
38
|
+
|
39
|
+
|
40
|
+
## License
|
41
|
+
See [LICENSE](LICENSE)
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bundler/setup'
|
7
|
+
rescue LoadError => e
|
8
|
+
abort e.message
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'rake'
|
12
|
+
|
13
|
+
|
14
|
+
require 'rspec/core/rake_task'
|
15
|
+
RSpec::Core::RakeTask.new
|
16
|
+
|
17
|
+
task :test => :spec
|
18
|
+
task :default => :spec
|
19
|
+
|
20
|
+
require 'rubygems/package_task'
|
21
|
+
Gem::PackageTask.new(Gem::Specification.load('simp-build-helpers.gemspec')) do |pkg|
|
22
|
+
pkg.need_tar = true
|
23
|
+
pkg.need_zip = false
|
24
|
+
end
|
25
|
+
|
26
|
+
require 'yard'
|
27
|
+
YARD::Rake::YardocTask.new
|
28
|
+
task :doc => :yard
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'simp/build/helpers/version'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
4
|
+
# distributed with this work for additional information
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
7
|
+
# "License"); you may not use this file except in compliance
|
8
|
+
# with the License. You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
13
|
+
# software distributed under the License is distributed on an
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15
|
+
# KIND, either express or implied. See the License for the
|
16
|
+
# specific language governing permissions and limitations
|
17
|
+
# under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
module Simp
|
21
|
+
module Build
|
22
|
+
module Helpers
|
23
|
+
# simp-build-helpers version
|
24
|
+
VERSION = "0.1.0"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
|
5
|
+
module Simp::Build
|
6
|
+
class SIMPBuildException < Exception; end
|
7
|
+
class ReleaseMapper
|
8
|
+
attr_accessor :do_checksums, :verbose
|
9
|
+
|
10
|
+
def initialize( target_release, mappings_file, do_checksums = false )
|
11
|
+
@target_release = target_release
|
12
|
+
@mappings_file = mappings_file
|
13
|
+
@release_mappings = YAML.load_file( mappings_file )
|
14
|
+
@target_data = get_release_mappings_for_target( @target_release, @release_mappings )
|
15
|
+
@do_checksums = do_checksums
|
16
|
+
@verbose = false
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def get_release_mappings_for_target( target_release, release_mappings )
|
21
|
+
unless target_data = release_mappings
|
22
|
+
.fetch('simp_releases')
|
23
|
+
.fetch( target_release, false )
|
24
|
+
|
25
|
+
raise SIMPBuildException, "'#{target_release}' is not a recognized SIMP release." +
|
26
|
+
"\n\n## Recognized SIMP releases:\n" +
|
27
|
+
release_mappings.fetch('simp_releases')
|
28
|
+
.keys
|
29
|
+
.map{|x| " - #{x}\n"}
|
30
|
+
.join +
|
31
|
+
"\n\n"
|
32
|
+
end
|
33
|
+
target_data
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# given a path string of files or directories, return a list of .iso files
|
38
|
+
# - if all paths are bad, the result is an empty arrays
|
39
|
+
# - directories are scanned for .iso files
|
40
|
+
def sanitize_iso_list( paths_string )
|
41
|
+
paths_string.split(':')
|
42
|
+
.map do |path|
|
43
|
+
if File.exists?( path )
|
44
|
+
if File.directory? path
|
45
|
+
Dir[File.join(path, '*.iso')]
|
46
|
+
elsif File.file? path
|
47
|
+
path
|
48
|
+
else
|
49
|
+
[]
|
50
|
+
end
|
51
|
+
else
|
52
|
+
[]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
.flatten
|
56
|
+
.sort
|
57
|
+
.uniq
|
58
|
+
end
|
59
|
+
|
60
|
+
# Given a list of isos: see if any match the complete set of ISOs for one
|
61
|
+
# of the target_release's flavors. the target release. If it matches,
|
62
|
+
# return a Hash containing the flavor and the matched ISOs. If they didn't
|
63
|
+
# match any known distros, return nil
|
64
|
+
#
|
65
|
+
# Some of the `isos` lists might be superfluous
|
66
|
+
def get_flavor( isos )
|
67
|
+
iso_sizes = Hash[isos.map{|iso| [iso,File.size(iso)]}.sort]
|
68
|
+
result = false
|
69
|
+
result_isos = []
|
70
|
+
@target_data['flavors'].each do |flavor,data|
|
71
|
+
sizes = data['isos'].map{|x| x['size']}.sort
|
72
|
+
next unless sizes.uniq == sizes & iso_sizes.values
|
73
|
+
matched_isos = iso_sizes.select{|k,v| sizes.include?(v) }.keys
|
74
|
+
result_isos = matched_isos
|
75
|
+
|
76
|
+
if @do_checksums || (sizes.uniq.size != sizes.size)
|
77
|
+
result_isos = []
|
78
|
+
checksums = data['isos'].map{|x| x['checksum']}
|
79
|
+
iso_checksums = Hash[matched_isos.map do |iso|
|
80
|
+
puts "=== getting checksum of '#{iso}'" if @verbose
|
81
|
+
sum = `sha256sum "#{iso}"`.split(/ +/).first
|
82
|
+
[iso,sum]
|
83
|
+
end]
|
84
|
+
|
85
|
+
matched_isos = iso_checksums.select{|k,v| checksums.include?(v) }
|
86
|
+
if ( matched_isos.values.map{|sum| checksums.include? sum }
|
87
|
+
.all?{|x| x.class == TrueClass } ) &&
|
88
|
+
( matched_isos.values.uniq.size == checksums.uniq.size )
|
89
|
+
result = flavor
|
90
|
+
result_isos = matched_isos.keys.dup
|
91
|
+
break
|
92
|
+
end
|
93
|
+
end
|
94
|
+
result = flavor
|
95
|
+
break
|
96
|
+
end
|
97
|
+
|
98
|
+
if result
|
99
|
+
@target_data['flavors'][result]
|
100
|
+
.merge({'flavor' => result})
|
101
|
+
.merge({'isos' =>result_isos})
|
102
|
+
else
|
103
|
+
nil
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def autoscan_unpack_list( paths_string )
|
108
|
+
iso_paths = sanitize_iso_list( paths_string )
|
109
|
+
|
110
|
+
if iso_paths.empty?
|
111
|
+
raise SIMPBuildException,
|
112
|
+
'ERROR: No suitable ISOs found for target release ' +
|
113
|
+
"'#{@target_release}' in '#{paths_string}'.\n\n" +
|
114
|
+
|
115
|
+
"## Recognized SIMP ISOs for '#{@target_release}:\n\n" +
|
116
|
+
@target_data.fetch('flavors')
|
117
|
+
.map{|flavor,data|
|
118
|
+
" ### #{flavor}\n\n" +
|
119
|
+
data['isos'].map{|x| " - #{x['name']}"}.join("\n") + "\n\n"
|
120
|
+
}.join + "\n\n"
|
121
|
+
end
|
122
|
+
|
123
|
+
unpack_files = get_flavor( iso_paths )
|
124
|
+
|
125
|
+
if unpack_files.nil?
|
126
|
+
max_iso_name_size = [@target_data['flavors'].map{|k,v| v['isos']}].flatten.map{|x| x['name'].size}.max
|
127
|
+
raise SIMPBuildException,
|
128
|
+
"ERROR: No flavors for target release '#{@target_release}' found in '#{paths_string}'.\n\n" +
|
129
|
+
"## Recognized SIMP ISOs for '#{@target_release}:\n\n" +
|
130
|
+
@target_data.fetch('flavors')
|
131
|
+
.map{|flavor,data|
|
132
|
+
" ### #{flavor}\n\n" +
|
133
|
+
data['isos'].map{|x|
|
134
|
+
" - #{x['name'].ljust(max_iso_name_size)}\n" +
|
135
|
+
" - size: #{x['size']}\n" +
|
136
|
+
" - checksum: #{x['checksum']}"}.join("\n") + "\n\n"
|
137
|
+
}.join + "\n\n"
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
unpack_files
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'simp/build/helpers/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |gem|
|
8
|
+
gem.name = "simp-build-helpers"
|
9
|
+
gem.version = Simp::Build::Helpers::VERSION
|
10
|
+
gem.summary = %q{SIMP build helpers}
|
11
|
+
gem.description = %q{Provides helper methods for building SIMP}
|
12
|
+
gem.license = "Apache-2.0"
|
13
|
+
gem.authors = ["Chris Tessmer"]
|
14
|
+
gem.email = "simp@simp-project.org"
|
15
|
+
gem.homepage = "https://github.com/simp/rubygem-simp-build-helpers"
|
16
|
+
|
17
|
+
gem.files = `git ls-files`.split($/)
|
18
|
+
|
19
|
+
`git submodule --quiet foreach --recursive pwd`.split($/).each do |submodule|
|
20
|
+
submodule.sub!("#{Dir.pwd}/",'')
|
21
|
+
|
22
|
+
Dir.chdir(submodule) do
|
23
|
+
`git ls-files`.split($/).map do |subpath|
|
24
|
+
gem.files << File.join(submodule,subpath)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
29
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
30
|
+
gem.require_paths = ['lib']
|
31
|
+
|
32
|
+
gem.add_development_dependency 'bundler', '~> 1.0'
|
33
|
+
gem.add_development_dependency 'rake', '~> 10.0'
|
34
|
+
gem.add_development_dependency 'rspec', '~> 3.0'
|
35
|
+
gem.add_development_dependency 'yard', '~> 0.8'
|
36
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
matches byte size but not csum
|
@@ -0,0 +1 @@
|
|
1
|
+
CentOS-6.7-x86_64-bin-DVD1.iso
|
@@ -0,0 +1 @@
|
|
1
|
+
CentOS-6.7-x86_64-bin-DVD2.iso
|
@@ -0,0 +1 @@
|
|
1
|
+
CentOS-7-x86_64-DVD-1503-01.iso
|
@@ -0,0 +1 @@
|
|
1
|
+
CentOS-7-x86_64-DVD-1511.iso
|
@@ -0,0 +1 @@
|
|
1
|
+
RedHat-7.2-x86_64-DVD.iso
|
@@ -0,0 +1 @@
|
|
1
|
+
# placeholder text
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
simp_releases:
|
3
|
+
5.1.X:
|
4
|
+
flavors:
|
5
|
+
CentOS:
|
6
|
+
isos:
|
7
|
+
- name: 'CentOS-7-x86_64-DVD-1511.iso'
|
8
|
+
size: 29
|
9
|
+
checksum: 'a6525d9649326ff1d10958caa35b7e07cb454ee2419401a0e2ec03914a5c0e29'
|
10
|
+
RedHat:
|
11
|
+
isos:
|
12
|
+
- name: 'RedHat-7.2-x86_64-DVD.iso'
|
13
|
+
size: 26
|
14
|
+
checksum: '3ddcc08ba4cb90c1ef285aad2bce5bda2fd333fc0645e1db48a9c45b655c8a37'
|
15
|
+
build_command: 'bundle exec rake build:from_iso[RedHdat-7-x86_64-DVD-1511.iso]'
|
16
|
+
mock_cfg: 'epel-7-x86_64.cfg'
|
17
|
+
5.1.0-2:
|
18
|
+
flavors:
|
19
|
+
CentOS:
|
20
|
+
isos:
|
21
|
+
- name: 'CentOS-7-x86_64-DVD-1503-01.iso'
|
22
|
+
size: 32
|
23
|
+
checksum: '698352c6b47a8a3cab47f2e1ee73722e25797511357787461a2b9e43dbb84ac2'
|
24
|
+
build_command: 'bundle exec rake <something-or-other>[CentOS-7-x86_64-DVD-1503-01.iso]'
|
25
|
+
mock_cfg: 'epel-7-x86_64.cfg'
|
26
|
+
4.2.X:
|
27
|
+
flavors:
|
28
|
+
CentOS:
|
29
|
+
isos:
|
30
|
+
- name: 'CentOS-6.7-x86_64-bin-DVD1.iso'
|
31
|
+
size: 31
|
32
|
+
checksum: '1de19e772386fa08e82ddbcd00399159945a012ad1536dec76b260f9ef6036c3'
|
33
|
+
- name: 'CentOS-6.7-x86_64-bin-DVD1.iso'
|
34
|
+
size: 31
|
35
|
+
checksum: '8aa797a6d39f7496f1ef97e8b6a959941ee8e20e48bae545e5a96850fca98549'
|
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'simp/build/release_mapper'
|
3
|
+
|
4
|
+
describe Simp::Build::ReleaseMapper do
|
5
|
+
before :each do
|
6
|
+
@mappings_path = File.expand_path( 'files/release_mappings.yaml', File.dirname(__FILE__) )
|
7
|
+
@mapper = Simp::Build::ReleaseMapper.new( '5.1.X', @mappings_path )
|
8
|
+
end
|
9
|
+
|
10
|
+
let :iso_paths do
|
11
|
+
pwd = File.expand_path( 'files/fake_isos', File.dirname(__FILE__) )
|
12
|
+
{
|
13
|
+
'c7-64' => File.join(pwd, 'CentOS-7-x86_64-DVD-1511.iso'),
|
14
|
+
'r7-64' => File.join(pwd, 'RedHat-7.2-x86_64-DVD.iso'),
|
15
|
+
'c7-64-1503-1' => File.join(pwd, 'CentOS-7-x86_64-DVD-1503-01.iso'),
|
16
|
+
'c67-64-1' => File.join(pwd, 'CentOS-6.7-x86_64-bin-DVD1.iso'),
|
17
|
+
'c67-64-2' => File.join(pwd, 'CentOS-6.7-x86_64-bin-DVD2.iso'),
|
18
|
+
'bad' => File.join(pwd, 'this', 'path', 'should', 'fail'),
|
19
|
+
'c67-false-positive' => File.join(pwd, 'CentOS-6.7-false-positive.iso'),
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#initialize' do
|
24
|
+
it 'runs without errors' do
|
25
|
+
expect{ Simp::Build::ReleaseMapper.new( '5.1.X', @mappings_path ) }.to_not raise_error
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#sanitize_iso_list' do
|
30
|
+
it 'returns a 1-element list given a valid file' do
|
31
|
+
list = @mapper.sanitize_iso_list(iso_paths['c7-64'])
|
32
|
+
expect( list ).to be_a(Array)
|
33
|
+
expect( list.size ).to eq 1
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'returns a 2-element list given two valid files (delimited by ":")' do
|
37
|
+
list = @mapper.sanitize_iso_list(
|
38
|
+
[iso_paths['c67-64-1'],iso_paths['c67-64-2']].join(':')
|
39
|
+
)
|
40
|
+
expect( list ).to be_a(Array)
|
41
|
+
expect( list.size ).to eq 2
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns a list with one iso given the file' do
|
45
|
+
list = @mapper.sanitize_iso_list(iso_paths['c7-64'])
|
46
|
+
expect( list ).to be_a(Array)
|
47
|
+
expect( list.select{ |x| x =~ /.iso/ }.size ).to eq list.size
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'returns a list of isos in a directory' do
|
51
|
+
list = @mapper.sanitize_iso_list( File.dirname iso_paths['c7-64'])
|
52
|
+
expect( list ).to be_a(Array)
|
53
|
+
expect( list.select{ |x| x =~ /.iso/ }.size ).to eq list.size
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'returns an empty list for a non-existent path' do
|
57
|
+
list = @mapper.sanitize_iso_list( iso_paths['bad'] )
|
58
|
+
expect( list ).to be_a(Array)
|
59
|
+
expect( list ).to be_empty
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'returns an empty list for an empty directory' do
|
63
|
+
list = @mapper.sanitize_iso_list(File.expand_path('files/fake_isos_empty',File.dirname(__FILE__)))
|
64
|
+
expect( list ).to be_a(Array)
|
65
|
+
expect( list ).to be_empty
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#get_flavor' do
|
70
|
+
it 'detects CentOS flavor for known file' do
|
71
|
+
list = [ iso_paths['c7-64'] ]
|
72
|
+
data = @mapper.get_flavor(list)
|
73
|
+
expect( data['flavor'] ).to eq('CentOS')
|
74
|
+
expect( data['isos'] ).to eq( list )
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'detects RedHat flavor for known file' do
|
78
|
+
list = [ iso_paths['r7-64'] ]
|
79
|
+
data = @mapper.get_flavor(list)
|
80
|
+
expect( data['flavor'] ).to eq('RedHat')
|
81
|
+
expect( data['isos'] ).to eq( list )
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'detects RedHat flavor and correct ISO from multiple files' do
|
85
|
+
list = [ iso_paths['c67-64-1'], iso_paths['c67-64-2'], iso_paths['r7-64'] ]
|
86
|
+
data = @mapper.get_flavor(list)
|
87
|
+
expect( data['flavor'] ).to eq('RedHat')
|
88
|
+
expect( data['isos'] ).to eq( [iso_paths['r7-64']] )
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'detects CentOS flavor and correct ISOs from multiple files' do
|
92
|
+
mapper = Simp::Build::ReleaseMapper.new( '4.2.X', @mappings_path )
|
93
|
+
list = [ iso_paths['c67-64-1'], iso_paths['c67-64-2'], iso_paths['r7-64'] ]
|
94
|
+
data = mapper.get_flavor(list)
|
95
|
+
expect( data['flavor'] ).to eq('CentOS')
|
96
|
+
expect( data['isos'] ).to eq( [iso_paths['c67-64-1'], iso_paths['c67-64-2']] )
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'returns nil when unable to detect a known flavor' do
|
100
|
+
list = [ iso_paths['c67-64-1'], iso_paths['c67-64-2'] ]
|
101
|
+
expect( @mapper.get_flavor(list) ).to be_nil
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'detects CentOS flavor when checksums are enabled' do
|
105
|
+
mapper = Simp::Build::ReleaseMapper.new( '4.2.X', @mappings_path, true )
|
106
|
+
list = [ iso_paths['c67-64-1'], iso_paths['c67-64-2'], iso_paths['c67-false-positive'] ]
|
107
|
+
expect( mapper.get_flavor(list)['flavor'] ).to eq('CentOS')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
describe '#autoscan_unpack_list' do
|
113
|
+
it 'autodetects 5.1.X unpack ISO from multiple directories' do
|
114
|
+
list = [ File.dirname(iso_paths['c7-64']),
|
115
|
+
File.expand_path('files/fake_isos_empty',File.dirname(__FILE__)) ]
|
116
|
+
path_string = list.join(':')
|
117
|
+
data = @mapper.autoscan_unpack_list(path_string)
|
118
|
+
expect( data ).to_not be_nil
|
119
|
+
expect( data['flavor'] ).to eq('CentOS')
|
120
|
+
expect( data['isos'] ).to eq [iso_paths['c7-64']]
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'autodetects 4.2.X unpack ISOs from multiple directories' do
|
124
|
+
list = [ File.dirname(iso_paths['c67-64-1']),
|
125
|
+
File.expand_path('files/fake_isos_empty',File.dirname(__FILE__)) ]
|
126
|
+
path_string = list.join(':')
|
127
|
+
mapper = Simp::Build::ReleaseMapper.new( '4.2.X', @mappings_path, true )
|
128
|
+
data = mapper.autoscan_unpack_list(path_string)
|
129
|
+
expect( data ).to_not be_nil
|
130
|
+
expect( data['flavor'] ).to eq('CentOS')
|
131
|
+
expect( data['isos'].sort ).to eq [iso_paths['c67-64-1'],iso_paths['c67-64-2']]
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'raises an error when no disks are found' do
|
135
|
+
path_string = iso_paths['bad']
|
136
|
+
expect{ @mapper.autoscan_unpack_list(path_string) }.to raise_error(Simp::Build::SIMPBuildException, /No suitable ISOs found/)
|
137
|
+
end
|
138
|
+
it "raises an error when no disks match the target's flavors" do
|
139
|
+
path_string = [iso_paths['c67-64-1'], iso_paths['c67-64-2']].join(':')
|
140
|
+
expect{ @mapper.autoscan_unpack_list(path_string) }.to raise_error(Simp::Build::SIMPBuildException, /No flavors for target release/)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simp-build-helpers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Tessmer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.8'
|
69
|
+
description: Provides helper methods for building SIMP
|
70
|
+
email: simp@simp-project.org
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- .document
|
76
|
+
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .travis.yml
|
79
|
+
- .yardopts
|
80
|
+
- ChangeLog.md
|
81
|
+
- Gemfile
|
82
|
+
- Guardfile
|
83
|
+
- LICENSE
|
84
|
+
- README.md
|
85
|
+
- Rakefile
|
86
|
+
- lib/simp/build/helpers.rb
|
87
|
+
- lib/simp/build/helpers/version.rb
|
88
|
+
- lib/simp/build/release_mapper.rb
|
89
|
+
- simp-build-helpers.gemspec
|
90
|
+
- spec/files/fake_isos/CentOS-6.7-false-positive.iso
|
91
|
+
- spec/files/fake_isos/CentOS-6.7-x86_64-bin-DVD1.iso
|
92
|
+
- spec/files/fake_isos/CentOS-6.7-x86_64-bin-DVD2.iso
|
93
|
+
- spec/files/fake_isos/CentOS-7-x86_64-DVD-1503-01.iso
|
94
|
+
- spec/files/fake_isos/CentOS-7-x86_64-DVD-1511.iso
|
95
|
+
- spec/files/fake_isos/RedHat-7.2-x86_64-DVD.iso
|
96
|
+
- spec/files/fake_isos_empty/.gitkeep
|
97
|
+
- spec/files/release_mappings.yaml
|
98
|
+
- spec/helpers_spec.rb
|
99
|
+
- spec/release_mapper_spec.rb
|
100
|
+
- spec/spec_helper.rb
|
101
|
+
homepage: https://github.com/simp/rubygem-simp-build-helpers
|
102
|
+
licenses:
|
103
|
+
- Apache-2.0
|
104
|
+
metadata: {}
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 2.4.8
|
122
|
+
signing_key:
|
123
|
+
specification_version: 4
|
124
|
+
summary: SIMP build helpers
|
125
|
+
test_files:
|
126
|
+
- spec/files/fake_isos/CentOS-6.7-false-positive.iso
|
127
|
+
- spec/files/fake_isos/CentOS-6.7-x86_64-bin-DVD1.iso
|
128
|
+
- spec/files/fake_isos/CentOS-6.7-x86_64-bin-DVD2.iso
|
129
|
+
- spec/files/fake_isos/CentOS-7-x86_64-DVD-1503-01.iso
|
130
|
+
- spec/files/fake_isos/CentOS-7-x86_64-DVD-1511.iso
|
131
|
+
- spec/files/fake_isos/RedHat-7.2-x86_64-DVD.iso
|
132
|
+
- spec/files/fake_isos_empty/.gitkeep
|
133
|
+
- spec/files/release_mappings.yaml
|
134
|
+
- spec/helpers_spec.rb
|
135
|
+
- spec/release_mapper_spec.rb
|
136
|
+
- spec/spec_helper.rb
|