simp-build-helpers 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://secure.travis-ci.org/simp/rubygem-simp-build-helpers.svg?branch=master)](https://travis-ci.org/simp/rubygem-simp-build-helpers)
|
2
|
+
[![License](http://img.shields.io/:license-apache-blue.svg)](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
|