simp-rake-helpers 1.0.6
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/.gitignore +3 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +20 -0
- data/CONTRIBUTING.md +4 -0
- data/Gemfile +3 -0
- data/Guardfile +24 -0
- data/LICENSE +27 -0
- data/README.md +27 -0
- data/Rakefile +56 -0
- data/bin/simp_rake_helpers +3 -0
- data/lib/simp/rake.rb +134 -0
- data/lib/simp/rake/helpers.rb +7 -0
- data/lib/simp/rake/pkg.rb +321 -0
- data/lib/simp/rpm.rb +162 -0
- data/spec/lib/simp/files/build/testpackage.spec +37 -0
- data/spec/lib/simp/files/testpackage.spec +37 -0
- data/spec/lib/simp/rake/helpers_spec.rb +15 -0
- data/spec/lib/simp/rake/pkg_spec.rb +15 -0
- data/spec/lib/simp/rake_spec.rb +21 -0
- data/spec/lib/simp/rpm_spec.rb +24 -0
- data/spec/spec_helper.rb +11 -0
- metadata +285 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ade6e1ae8a744fa8b543ed966cb67ed411ab41c0
|
4
|
+
data.tar.gz: ec51fff88f43b136d2932a655f8f39e2a2344510
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 34978e726b9a3378f5ecb2e5b943eb010c6b45722b48bb8ab388404786a7f538359af9ffd751b0aff84daa4f753f19c062ff8e0293a2659267358c402701d55b
|
7
|
+
data.tar.gz: 0464603d53ab8e63fa4cc0d130fecafd5a68ce41343ea66e4a1c86448d98232d6762e2ac58901656d6af65797d564c687727d9119ce652d2c32a7be899f694a2
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
### 1.0.6 / 2015-06-24
|
2
|
+
* Cleanup gemspec
|
3
|
+
* Fixed bugs in the RPM signing code regarding fetching the username and
|
4
|
+
password from the appropriate source.
|
5
|
+
|
6
|
+
### 1.0.4 / 2015-06-22
|
7
|
+
* Added support for reading information directly from RPMs as well as spec
|
8
|
+
files.
|
9
|
+
|
10
|
+
### 1.0.2 / 2105-04-02
|
11
|
+
* Added support for snapshot_release, adds date and time to rpm release
|
12
|
+
version
|
13
|
+
|
14
|
+
### 1.0.1 / 2015-02-03
|
15
|
+
* Added the top level rake and rpm files to the Manifest
|
16
|
+
|
17
|
+
### 1.0.0 / 2014-12-09
|
18
|
+
* Refactored all the SIMP repositories' common Rakefile tasks into this gem.
|
19
|
+
* Birthday!
|
20
|
+
|
data/CONTRIBUTING.md
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec, cmd: "bundle exec rspec" do
|
5
|
+
require "guard/rspec/dsl"
|
6
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
7
|
+
|
8
|
+
# RSpec files
|
9
|
+
rspec = dsl.rspec
|
10
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
11
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
12
|
+
watch(rspec.spec_files)
|
13
|
+
|
14
|
+
# Ruby files
|
15
|
+
ruby = dsl.ruby
|
16
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Add files and commands to this file, like the example:
|
20
|
+
# watch(%r{file/path}) { `command(s)` }
|
21
|
+
#
|
22
|
+
guard :shell do
|
23
|
+
watch(/(.*).md/) {|m| `tail #{m[0]}` }
|
24
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
rubygem-simp-rake-helpers - Common helper methods for SIMP Rakefiles
|
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,27 @@
|
|
1
|
+
# simp-rake-helpers
|
2
|
+
|
3
|
+
Common helper methods for SIMP Rakefiles
|
4
|
+
|
5
|
+
## Features
|
6
|
+
* supports multithreaded mock operations
|
7
|
+
|
8
|
+
|
9
|
+
## Usage
|
10
|
+
```ruby
|
11
|
+
require 'simp/rake/helpers'
|
12
|
+
```
|
13
|
+
|
14
|
+
## Requirements
|
15
|
+
* SIMP source
|
16
|
+
|
17
|
+
|
18
|
+
## Install
|
19
|
+
* sudo gem install simp-rake-helpers
|
20
|
+
|
21
|
+
|
22
|
+
## License
|
23
|
+
See [LICENSE](LICENSE)
|
24
|
+
|
25
|
+
|
26
|
+
## History
|
27
|
+
See [CHANGELOG.md](CHANGELOG.md)
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require 'rake/clean'
|
5
|
+
require 'find'
|
6
|
+
|
7
|
+
@package='simp-rake-helpers'
|
8
|
+
@rakefile_dir=File.dirname(__FILE__)
|
9
|
+
|
10
|
+
CLEAN.include "#{@package}-*.gem"
|
11
|
+
CLEAN.include 'pkg'
|
12
|
+
CLEAN.include 'dist'
|
13
|
+
Find.find( @rakefile_dir ) do |path|
|
14
|
+
if File.directory? path
|
15
|
+
CLEAN.include path if File.basename(path) == 'tmp'
|
16
|
+
else
|
17
|
+
Find.prune
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Ensure gemspec-safe permissions on all files'
|
22
|
+
task :chmod do
|
23
|
+
gemspec = File.expand_path( "#{@package}.gemspec", @rakefile_dir ).strip
|
24
|
+
spec = Gem::Specification::load( gemspec )
|
25
|
+
spec.files.each do |file|
|
26
|
+
FileUtils.chmod 'go=r', file
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'run all RSpec tests'
|
31
|
+
task :spec do
|
32
|
+
Dir.chdir @rakefile_dir
|
33
|
+
sh 'bundle exec rspec spec'
|
34
|
+
end
|
35
|
+
|
36
|
+
namespace :pkg do
|
37
|
+
desc "build rubygem package for #{@package}"
|
38
|
+
task :gem => :chmod do
|
39
|
+
Dir.chdir @rakefile_dir
|
40
|
+
Dir['*.gemspec'].each do |spec_file|
|
41
|
+
cmd = %Q{SIMP_RPM_BUILD=1 bundle exec gem build "#{spec_file}"}
|
42
|
+
sh cmd
|
43
|
+
FileUtils.mkdir_p 'dist'
|
44
|
+
FileUtils.mv Dir.glob("#{@package}*.gem"), 'dist/'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "build and install rubygem package for #{@package}"
|
49
|
+
task :install_gem => [:clean, :gem] do
|
50
|
+
Dir.chdir @rakefile_dir
|
51
|
+
Dir.glob("dist/#{@package}*.gem") do |pkg|
|
52
|
+
sh %Q{bundle exec gem install #{pkg}}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
# vim: syntax=ruby
|
data/lib/simp/rake.rb
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
module Simp; end
|
2
|
+
module Simp::Rake
|
3
|
+
require 'rubygems'
|
4
|
+
require 'erb'
|
5
|
+
require 'rake/clean'
|
6
|
+
require 'find'
|
7
|
+
require 'yaml'
|
8
|
+
require 'shellwords'
|
9
|
+
require 'parallel'
|
10
|
+
require 'tempfile'
|
11
|
+
require 'simp/rpm'
|
12
|
+
require 'simp/rake/pkg'
|
13
|
+
|
14
|
+
# Force the encoding to something that Ruby >= 1.9 is happy with
|
15
|
+
def encode_line(line)
|
16
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('1.9')
|
17
|
+
require 'iconv'
|
18
|
+
line = Iconv.new('ISO-8859-1//IGNORE','UTF-8').iconv(line)
|
19
|
+
else
|
20
|
+
line = line.force_encoding(Encoding::ISO_8859_1).encode(Encoding::UTF_8,:replace => nil,:undef => :replace)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# by default, we use all processors - 1
|
25
|
+
def get_cpu_limit
|
26
|
+
cpus = Parallel.processor_count
|
27
|
+
env_cpus = ENV.fetch( 'SIMP_RAKE_LIMIT_CPUS', '-1' ).strip.to_i
|
28
|
+
|
29
|
+
env_cpus = 1 if env_cpus == 0
|
30
|
+
env_cpus += cpus if env_cpus < 0
|
31
|
+
# sanitize huge numbers
|
32
|
+
env_cpus = (cpus - 1) if env_cpus >= cpus
|
33
|
+
env_cpus = 1 if env_cpus < 0
|
34
|
+
|
35
|
+
env_cpus
|
36
|
+
end
|
37
|
+
|
38
|
+
# Snarfed from http://nex-3.com/posts/73-git-style-automatic-paging-in-ruby
|
39
|
+
def run_pager
|
40
|
+
return if RUBY_PLATFORM =~ /win32/
|
41
|
+
return unless STDOUT.tty?
|
42
|
+
|
43
|
+
read, write = IO.pipe
|
44
|
+
|
45
|
+
unless Kernel.fork # Child process
|
46
|
+
STDOUT.reopen(write)
|
47
|
+
STDERR.reopen(write) if STDERR.tty?
|
48
|
+
read.close
|
49
|
+
write.close
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
53
|
+
# Parent process, become pager
|
54
|
+
STDIN.reopen(read)
|
55
|
+
read.close
|
56
|
+
write.close
|
57
|
+
|
58
|
+
ENV['LESS'] = 'FSRX' # Don't page if the input is short enough
|
59
|
+
|
60
|
+
Kernel.select [STDIN] # Wait until we have input before we start the pager
|
61
|
+
pager = ENV['PAGER'] || 'less'
|
62
|
+
exec pager rescue exec "/bin/sh", "-c", pager
|
63
|
+
end
|
64
|
+
|
65
|
+
# Originally snarfed from
|
66
|
+
# http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
67
|
+
def which(cmd)
|
68
|
+
File.executable?(cmd) and return cmd
|
69
|
+
|
70
|
+
cmd = File.basename(cmd)
|
71
|
+
|
72
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
73
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
74
|
+
exts.each { |ext|
|
75
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
76
|
+
return exe if File.executable? exe
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
warn "Warning: Command #{cmd} not found on the system."
|
81
|
+
return nil
|
82
|
+
end
|
83
|
+
|
84
|
+
# Return whether or not the user is in the mock group
|
85
|
+
def validate_in_mock_group?
|
86
|
+
if not %x{groups}.split.include?('mock')
|
87
|
+
raise(Exception,"You need to be in the 'mock' group.")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def help
|
92
|
+
run_pager
|
93
|
+
|
94
|
+
puts <<-EOM
|
95
|
+
= SIMP Build Tasks =
|
96
|
+
|
97
|
+
Use 'rake' and choose one of the options below that best suits your
|
98
|
+
needs. If you are simply trying to build the SIMP tarball, use the
|
99
|
+
'rake tar:build[:chroot]' option.
|
100
|
+
|
101
|
+
NOTE: Any task that requires a :chroot input will require you to be in
|
102
|
+
the 'mock' group and have the 'mock' package installed.
|
103
|
+
|
104
|
+
== Space Requirements ==
|
105
|
+
|
106
|
+
A full parallel build will take around 500M for each git submodule built.
|
107
|
+
|
108
|
+
If you are space limited, set SIMP_RAKE_LIMIT_CPUS=1 at build time.
|
109
|
+
|
110
|
+
== Environment Variables ==
|
111
|
+
|
112
|
+
* SIMP_RAKE_CHOWN_EVERYTHING=(Y|n)
|
113
|
+
- Chown everything to the 'mock' group prior to building
|
114
|
+
|
115
|
+
* SIMP_RAKE_MOCK_OFFLINE=(y|N)
|
116
|
+
- Mock runs are limited to the local cache
|
117
|
+
|
118
|
+
* SIMP_RAKE_LIMIT_CPUS=#
|
119
|
+
- Default: Num system CPUs - 1
|
120
|
+
- An Integer that limits builds to # processors
|
121
|
+
- If set to '1', will only build in a single mock directory
|
122
|
+
|
123
|
+
* SIMP_GIT_BRANCH=<Branch ID>
|
124
|
+
- If you are working in the supermodule and wish to perform a reset, but
|
125
|
+
retain your working branch at the supermodule level. You can set this to
|
126
|
+
ignore the current supermodule branch value.
|
127
|
+
- This is particularly valuable when using Jenkins.
|
128
|
+
|
129
|
+
********************
|
130
|
+
EOM
|
131
|
+
|
132
|
+
sh %{rake -D}
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,321 @@
|
|
1
|
+
# This file provided many common build-related tasks and helper methods from
|
2
|
+
# the SIMP Rakefile ecosystem.
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'rake/clean'
|
6
|
+
require 'rake/tasklib'
|
7
|
+
require 'fileutils'
|
8
|
+
require 'find'
|
9
|
+
|
10
|
+
module Simp; end
|
11
|
+
module Simp::Rake
|
12
|
+
class Pkg < ::Rake::TaskLib
|
13
|
+
|
14
|
+
# path to the project's directory. Usually `File.dirname(__FILE__)`
|
15
|
+
attr_accessor :base_dir
|
16
|
+
|
17
|
+
# the name of the package. Usually `File.basename(@base_dir)`
|
18
|
+
attr_accessor :pkg_name
|
19
|
+
|
20
|
+
# path to the project's RPM specfile
|
21
|
+
attr_accessor :spec_file
|
22
|
+
|
23
|
+
# path to the directory to place generated assets (e.g., rpm, srpm, tar.gz)
|
24
|
+
attr_accessor :pkg_dir
|
25
|
+
|
26
|
+
# array of items to exclude from the tarball
|
27
|
+
attr_accessor :exclude_list
|
28
|
+
|
29
|
+
# array of items to additionally clean
|
30
|
+
attr_accessor :clean_list
|
31
|
+
|
32
|
+
#
|
33
|
+
attr_accessor :unique_name
|
34
|
+
|
35
|
+
# array of items to ignore when checking if the tarball needs to be rebuilt
|
36
|
+
attr_accessor :ignore_changes_list
|
37
|
+
|
38
|
+
def initialize( base_dir, unique_name=nil )
|
39
|
+
@base_dir = base_dir
|
40
|
+
@pkg_name = File.basename(@base_dir)
|
41
|
+
@spec_file = Dir.glob("#{@base_dir}/build/*.spec").first
|
42
|
+
@pkg_dir = "#{@base_dir}/dist"
|
43
|
+
@exclude_list = [ File.basename(@pkg_dir) ]
|
44
|
+
@clean_list = []
|
45
|
+
@ignore_changes_list = []
|
46
|
+
@chroot_name = unique_name
|
47
|
+
|
48
|
+
::CLEAN.include( @pkg_dir )
|
49
|
+
|
50
|
+
yield self if block_given?
|
51
|
+
|
52
|
+
::CLEAN.include( @clean_list )
|
53
|
+
|
54
|
+
@spec_info = Pkg.get_info( @spec_file )
|
55
|
+
@chroot_name = @chroot_name || "#{@spec_info[:name]}__#{ENV.fetch( 'USER', 'USER' )}"
|
56
|
+
@dir_name = "#{@spec_info[:name]}-#{@spec_info[:version]}"
|
57
|
+
@mfull_pkg_name = "#{@dir_name}-#{@spec_info[:release]}"
|
58
|
+
@full_pkg_name = @mfull_pkg_name.gsub("%{?snapshot_release}","")
|
59
|
+
@tar_dest = "#{@pkg_dir}/#{@full_pkg_name}.tar.gz"
|
60
|
+
|
61
|
+
define
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def define
|
66
|
+
# For the most part, we don't want to hear Rake's noise, unless it's an error
|
67
|
+
# TODO: Make this configurable
|
68
|
+
verbose(false)
|
69
|
+
|
70
|
+
define_clean
|
71
|
+
define_clobber
|
72
|
+
define_pkg_tar
|
73
|
+
define_pkg_srpm
|
74
|
+
define_pkg_rpm
|
75
|
+
define_pkg_scrub
|
76
|
+
task :default => 'pkg:tar'
|
77
|
+
self
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def define_clean
|
82
|
+
desc <<-EOM
|
83
|
+
Clean build artifacts for #{@pkg_name} (except for mock)
|
84
|
+
EOM
|
85
|
+
task :clean do |t,args|
|
86
|
+
# this is provided by 'rake/clean' and the ::CLEAN constant
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
def define_clobber
|
93
|
+
desc <<-EOM
|
94
|
+
Clobber build artifacts for #{@pkg_name} (except for mock)
|
95
|
+
EOM
|
96
|
+
task :clobber do |t,args|
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
def define_pkg_tar
|
102
|
+
namespace :pkg do
|
103
|
+
directory @pkg_dir
|
104
|
+
|
105
|
+
# :pkg:tar
|
106
|
+
# -----------------------------
|
107
|
+
desc <<-EOM
|
108
|
+
Build the #{@pkg_name} tar package
|
109
|
+
* :snapshot_release - Add snapshot_release (date and time) to rpm version, rpm spec file must have macro for this to work.
|
110
|
+
EOM
|
111
|
+
task :tar,[:snapshot_release] => [@pkg_dir] do |t,args|
|
112
|
+
args.with_defaults(:snapshot_release => false)
|
113
|
+
|
114
|
+
l_date = ''
|
115
|
+
if args.snapshot_release == 'true' then
|
116
|
+
l_date = '.' + "#{TIMESTAMP}"
|
117
|
+
@tar_dest = "#{@pkg_dir}/#{@full_pkg_name}#{l_date}.tar.gz"
|
118
|
+
end
|
119
|
+
Dir.chdir("#{@base_dir}/..") do
|
120
|
+
Find.find(@pkg_name) do |path|
|
121
|
+
Find.prune if path =~ /^\.git/
|
122
|
+
Find.prune if path == "#{@pkg_name}/#{File.basename(@pkg_dir)}"
|
123
|
+
Find.prune if @ignore_changes_list.include?(path)
|
124
|
+
if path == @pkg_name and not uptodate?(@tar_dest,[path]) then
|
125
|
+
sh %Q{tar --owner 0 --group 0 --exclude-vcs --exclude=#{@exclude_list.join(' --exclude=')} --transform='s/^#{@pkg_name}/#{@dir_name}/' -cpzf "#{@tar_dest}" #{@pkg_name}}
|
126
|
+
break
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def define_pkg_srpm
|
136
|
+
namespace :pkg do
|
137
|
+
desc <<-EOM
|
138
|
+
Build the #{@pkg_name} SRPM
|
139
|
+
Building RPMs requires a working Mock setup (http://fedoraproject.org/wiki/Projects/Mock)
|
140
|
+
* :chroot - The Mock chroot configuration to use. See the '--root' option in mock(1)."
|
141
|
+
* :unique - Whether or not to build the SRPM in a unique Mock environment.
|
142
|
+
This can be very useful for parallel builds of all modules.
|
143
|
+
* :snapshot_release - Add snapshot_release (date and time) to rpm version.
|
144
|
+
Rpm spec file must have macro for this to work.
|
145
|
+
EOM
|
146
|
+
task :srpm,[:chroot,:unique,:snapshot_release] => [:tar] do |t,args|
|
147
|
+
args.with_defaults(:unique => false)
|
148
|
+
args.with_defaults(:snapshot_release => false)
|
149
|
+
|
150
|
+
l_date = ''
|
151
|
+
if args.snapshot_release == 'true' then
|
152
|
+
l_date = '.' + "#{TIMESTAMP}"
|
153
|
+
mocksnap = "-D 'snapshot_release #{l_date}'"
|
154
|
+
@tar_dest = "#{@pkg_dir}/#{@full_pkg_name}#{l_date}.tar.gz"
|
155
|
+
end
|
156
|
+
|
157
|
+
mock_cmd = mock_pre_check( args.chroot, @chroot_name, args.unique )
|
158
|
+
output = "#{@full_pkg_name}#{l_date}.src.rpm"
|
159
|
+
if not uptodate?("#{@pkg_dir}/#{output}",[@tar_dest]) then
|
160
|
+
cmd = %Q{#{mock_cmd} --no-clean --root #{args.chroot} #{mocksnap} --buildsrpm --spec #{@spec_file} --source #{@pkg_dir}}
|
161
|
+
sh cmd
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def define_pkg_rpm
|
170
|
+
namespace :pkg do
|
171
|
+
desc <<-EOM
|
172
|
+
Build the #{@pkg_name} RPM
|
173
|
+
Building RPMs requires a working Mock setup (http://fedoraproject.org/wiki/Projects/Mock)
|
174
|
+
* :chroot - The Mock chroot configuration to use. See the '--root' option in mock(1)."
|
175
|
+
* :unique - Whether or not to build the RPM in a unique Mock environment.
|
176
|
+
This can be very useful for parallel builds of all modules.
|
177
|
+
* :snapshot_release - Add snapshot_release (date and time) to rpm version.
|
178
|
+
Rpm spec file must have macro for this to work.
|
179
|
+
EOM
|
180
|
+
task :rpm,[:chroot,:unique,:snapshot_release] do |t,args|
|
181
|
+
args.with_defaults(:unique => false)
|
182
|
+
args.with_defaults(:snapshot_release => false)
|
183
|
+
|
184
|
+
l_date = ''
|
185
|
+
if args.snapshot_release == 'true' then
|
186
|
+
l_date = '.' + "#{TIMESTAMP}"
|
187
|
+
mocksnap = "-D 'snapshot_release #{l_date}'"
|
188
|
+
@tar_dest = "#{@pkg_dir}/#{@full_pkg_name}#{l_date}.tar.gz"
|
189
|
+
end
|
190
|
+
|
191
|
+
mock_cmd = mock_pre_check( args.chroot, @chroot_name, args.unique )
|
192
|
+
Rake::Task['pkg:srpm'].invoke(args.chroot,args.unique,args.snapshot_release)
|
193
|
+
|
194
|
+
output = "#{@full_pkg_name}#{l_date}.#{@spec_info[:arch]}.rpm"
|
195
|
+
if not uptodate?("#{@pkg_dir}/#{output}",[@tar_dest]) then
|
196
|
+
cmd = %Q{#{mock_cmd} --root #{args.chroot} #{mocksnap} #{@pkg_dir}/#{@full_pkg_name}#{l_date}.src.rpm}
|
197
|
+
sh cmd
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
def define_pkg_scrub
|
204
|
+
namespace :pkg do
|
205
|
+
# :pkg:scrub
|
206
|
+
# -----------------------------
|
207
|
+
desc <<-EOM
|
208
|
+
Scrub the #{@pkg_name} mock build directory
|
209
|
+
EOM
|
210
|
+
task :scrub,[:chroot,:unique] do |t,args|
|
211
|
+
args.with_defaults(:unique => false)
|
212
|
+
|
213
|
+
mock_cmd = mock_pre_check( args.chroot, @chroot_name, args.unique, false )
|
214
|
+
cmd = %Q{#{mock_cmd} --scrub=all}
|
215
|
+
sh cmd
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
221
|
+
|
222
|
+
# ------------------------------------------------------------------------------
|
223
|
+
# helper methods
|
224
|
+
# ------------------------------------------------------------------------------
|
225
|
+
# Pull the main RPM information out of the package spec file.
|
226
|
+
def Pkg.get_info(specfile)
|
227
|
+
info = Hash.new
|
228
|
+
info[:arch] = %x{uname -i}
|
229
|
+
|
230
|
+
if File.readable?(specfile) then
|
231
|
+
File.open(specfile).each do |line|
|
232
|
+
if line =~ /^\s*Version:\s+(.*)\s*/ then
|
233
|
+
info[:version] = $1
|
234
|
+
next
|
235
|
+
elsif line =~ /^\s*Release:\s+(.*)\s*/ then
|
236
|
+
info[:release] = $1
|
237
|
+
next
|
238
|
+
elsif line =~ /^\s*Name:\s+(.*)\s*/ then
|
239
|
+
info[:name] = $1
|
240
|
+
next
|
241
|
+
elsif line =~ /^\s*Buildarch:\s+(.*)\s*/ then
|
242
|
+
info[:arch] = $1
|
243
|
+
next
|
244
|
+
end
|
245
|
+
end
|
246
|
+
else
|
247
|
+
raise "Error: unable to read the spec file '#{specfile}'"
|
248
|
+
end
|
249
|
+
return info
|
250
|
+
end
|
251
|
+
|
252
|
+
|
253
|
+
# Get a list of all of the mock configs available on the system.
|
254
|
+
def Pkg.get_mock_configs
|
255
|
+
Dir.glob('/etc/mock/*.cfg').sort.map{ |x| x = File.basename(x,'.cfg')}
|
256
|
+
end
|
257
|
+
|
258
|
+
|
259
|
+
# Run some pre-checks to make sure that mock will work properly.
|
260
|
+
#
|
261
|
+
# chroot = name of mock chroot to use
|
262
|
+
# unique_ext = TODO
|
263
|
+
# Pass init=false if you do not want the function to initialize.
|
264
|
+
#
|
265
|
+
# Returns a String that contains the appropriate mock command.
|
266
|
+
def mock_pre_check( chroot, unique_ext, unique=false, init=true )
|
267
|
+
|
268
|
+
raise %Q{unique_ext must be a String ("#{unique_ext}" = #{unique_ext.class})} if not unique_ext.is_a? String
|
269
|
+
|
270
|
+
mock = ENV['mock'] || '/usr/bin/mock'
|
271
|
+
raise(Exception,"Could not find mock on your system, exiting") unless File.executable?('/usr/bin/mock')
|
272
|
+
|
273
|
+
mock_configs = Pkg.get_mock_configs
|
274
|
+
if not chroot then
|
275
|
+
raise(Exception,
|
276
|
+
"Error: No mock chroot provided. Your choices are:\n #{mock_configs.join("\n ")}"
|
277
|
+
)
|
278
|
+
end
|
279
|
+
if not mock_configs.include?(chroot) then
|
280
|
+
raise(Exception,
|
281
|
+
"Error: Invalid mock chroot provided. Your choices are:\n #{mock_configs.join("\n ")}"
|
282
|
+
)
|
283
|
+
end
|
284
|
+
|
285
|
+
# if true, restrict yum to the chroot's local yum cache (defaults to false)
|
286
|
+
mock_offline = ENV.fetch( 'SIMP_RAKE_MOCK_OFFLINE', 'N' ).chomp.index( %r{^(1|Y|true|yes)$} ) || false
|
287
|
+
|
288
|
+
mock_cmd = "#{mock} --quiet"
|
289
|
+
mock_cmd += " --uniqueext=#{unique_ext}" if unique
|
290
|
+
mock_cmd += " --offline" if mock_offline
|
291
|
+
|
292
|
+
initialized = is_mock_initialized( mock_cmd, chroot)
|
293
|
+
|
294
|
+
if init and not initialized then
|
295
|
+
sh %Q{#{mock_cmd} --root #{chroot} --init ##{unique_ext} }
|
296
|
+
else
|
297
|
+
# Remove any old build cruft from the mock directory.
|
298
|
+
# This is kludgy but WAY faster than rebuilding them all, even with a cache.
|
299
|
+
sh %Q{#{mock_cmd} --root #{chroot} --chroot "/bin/rm -rf /builddir/build/BUILDROOT /builddir/build/*/*"}
|
300
|
+
end
|
301
|
+
|
302
|
+
mock_cmd + " --no-clean --no-cleanup-after --resultdir=#{@pkg_dir} --disable-plugin=package_state"
|
303
|
+
end
|
304
|
+
|
305
|
+
def is_mock_initialized( mock_cmd, chroot )
|
306
|
+
%x{#{mock_cmd} --root #{chroot} --chroot "test -d /tmp" &> /dev/null }
|
307
|
+
initialized = $?.success?
|
308
|
+
|
309
|
+
# A simple test to see if the chroot is initialized.
|
310
|
+
initialized
|
311
|
+
end
|
312
|
+
|
313
|
+
def pry
|
314
|
+
#FIXME: remove this debugging nonsense before release
|
315
|
+
if Rake::verbose.is_a? TrueClass
|
316
|
+
require 'pry'
|
317
|
+
binding.pry
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
data/lib/simp/rpm.rb
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
module Simp
|
2
|
+
# Simp::RPM represents a single package that is built and packaged by the Simp team.
|
3
|
+
class Simp::RPM
|
4
|
+
require 'expect'
|
5
|
+
require 'pty'
|
6
|
+
|
7
|
+
@@gpg_keys = Hash.new
|
8
|
+
attr_accessor :basename, :version, :release, :full_version, :name, :sources, :verbose
|
9
|
+
|
10
|
+
if Gem.loaded_specs['rake'].version >= Gem::Version.new('0.9')
|
11
|
+
def self.sh(args)
|
12
|
+
system args
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Constructs a new Simp::RPM object. Requires the path to the spec file
|
17
|
+
# from which information will be gathered.
|
18
|
+
#
|
19
|
+
# The following information will be retreived:
|
20
|
+
# [basename] The name of the package (as it would be queried in yum)
|
21
|
+
# [version] The version of the package
|
22
|
+
# [release] The release version of the package
|
23
|
+
# [full_version] The full version of the package: [version]-[release]
|
24
|
+
# [name] The full name of the package: [basename]-[full_version]
|
25
|
+
def initialize(rpm_source)
|
26
|
+
info = Simp::RPM.get_info(rpm_source)
|
27
|
+
@basename = info[:name]
|
28
|
+
@version = info[:version]
|
29
|
+
@release = info[:release]
|
30
|
+
@full_version = info[:full_version]
|
31
|
+
@name = "#{@basename}-#{@full_version}"
|
32
|
+
@sources = Array.new
|
33
|
+
end
|
34
|
+
|
35
|
+
# Copies specific content from one directory to another.
|
36
|
+
# start_dir:: the root directory where the original files are located within
|
37
|
+
# src:: a pattern given to find(1) to match against the desired files to copy
|
38
|
+
# dest:: the destination directory to receive the copies
|
39
|
+
def self.copy_wo_vcs(start_dir, src, dest, dereference=true)
|
40
|
+
if dereference.nil? || dereference
|
41
|
+
dereference = "--dereference"
|
42
|
+
else
|
43
|
+
dereference = ""
|
44
|
+
end
|
45
|
+
|
46
|
+
Dir.chdir(start_dir) do
|
47
|
+
sh %{find #{src} \\( -path "*/.svn" -a -type d -o -path "*/.git*" \\) -prune -o -print | cpio -u --warning none --quiet --make-directories #{dereference} -p "#{dest}" 2>&1 > /dev/null}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Parses information, such as the version, from the given specfile or RPM
|
52
|
+
# into a hash.
|
53
|
+
def self.get_info(rpm_source)
|
54
|
+
info = Hash.new
|
55
|
+
if File.readable?(rpm_source)
|
56
|
+
if rpm_source.split('.').last == 'rpm'
|
57
|
+
rpm_info = %x(rpm -q --queryformat '%{NAME} %{VERSION} %{RELEASE}' -p #{rpm_source} 2>/dev/null)
|
58
|
+
info[:name],info[:version],info[:release] = rpm_info.split(' ')
|
59
|
+
else
|
60
|
+
File.open(rpm_source).each do |line|
|
61
|
+
if line =~ /^\s*Version:\s+(.*)\s*/
|
62
|
+
info[:version] = $1
|
63
|
+
next
|
64
|
+
elsif line =~ /^\s*Release:\s+(.*)\s*/
|
65
|
+
info[:release] = $1
|
66
|
+
next
|
67
|
+
elsif line =~ /^\s*Name:\s+(.*)\s*/
|
68
|
+
info[:name] = $1
|
69
|
+
next
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
else
|
74
|
+
raise "Error: unable to read '#{rpm_source}'"
|
75
|
+
end
|
76
|
+
|
77
|
+
info[:full_version] = "#{info[:version]}-#{info[:release]}"
|
78
|
+
|
79
|
+
return info
|
80
|
+
end
|
81
|
+
|
82
|
+
# Loads metadata for a GPG key. The GPG key is to be used to sign RPMs. The
|
83
|
+
# value of gpg_key should be the full path of the directory where the key
|
84
|
+
# resides. If the metadata cannot be found, then the user will be prompted
|
85
|
+
# for it.
|
86
|
+
def self.load_key(gpg_key)
|
87
|
+
keydir = gpg_key
|
88
|
+
File.directory?(keydir) || fail("Error: Could not find '#{keydir}'")
|
89
|
+
|
90
|
+
gpg_key = File.basename(gpg_key)
|
91
|
+
|
92
|
+
if @@gpg_keys[gpg_key]
|
93
|
+
return @@gpg_keys[gpg_key]
|
94
|
+
end
|
95
|
+
|
96
|
+
gpg_name = nil
|
97
|
+
gpg_password = nil
|
98
|
+
begin
|
99
|
+
File.read("#{keydir}/gengpgkey").each_line do |ln|
|
100
|
+
name_line = ln.split(/^\s*Name-Email:/)
|
101
|
+
if name_line.length > 1
|
102
|
+
gpg_name = name_line.last.strip
|
103
|
+
end
|
104
|
+
|
105
|
+
passwd_line = ln.split(/^\s*Passphrase:/)
|
106
|
+
if passwd_line.length > 1
|
107
|
+
gpg_password = passwd_line.last.strip
|
108
|
+
end
|
109
|
+
end
|
110
|
+
rescue Errno::ENOENT
|
111
|
+
end
|
112
|
+
|
113
|
+
if gpg_name.nil?
|
114
|
+
puts "Warning: Could not find valid e-mail address for use with GPG."
|
115
|
+
puts "Please enter e-mail address to use:"
|
116
|
+
gpg_name = $stdin.gets.strip
|
117
|
+
end
|
118
|
+
|
119
|
+
if gpg_password.nil?
|
120
|
+
if File.exist?(%(#{keydir}/password))
|
121
|
+
gpg_password = File.read(%(#{keydir}/password)).chomp
|
122
|
+
end
|
123
|
+
|
124
|
+
if gpg_password.nil?
|
125
|
+
puts "Warning: Could not find a password in '#{keydir}/password'!"
|
126
|
+
puts "Please enter your GPG key password:"
|
127
|
+
system 'stty -echo'
|
128
|
+
gpg_password = $stdin.gets.strip
|
129
|
+
system 'stty echo'
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
@@gpg_keys[gpg_key] = { :dir => keydir, :name => gpg_name, :password => gpg_password }
|
134
|
+
end
|
135
|
+
|
136
|
+
# Signs the given RPM with the given gpg_key (see Simp::RPM.load_key for
|
137
|
+
# details on the value of this parameter).
|
138
|
+
def self.signrpm(rpm, gpg_key)
|
139
|
+
gpgkey = load_key(gpg_key)
|
140
|
+
signcommand = "rpm " +
|
141
|
+
"--define '%_signature gpg' " +
|
142
|
+
"--define '%_gpg_name #{gpgkey[:name]}' " +
|
143
|
+
"--define '%_gpg_path #{gpgkey[:dir]}' " +
|
144
|
+
"--resign #{rpm}"
|
145
|
+
begin
|
146
|
+
PTY.spawn(signcommand) do |read, write, pid|
|
147
|
+
begin
|
148
|
+
read.expect(/Enter pass phrase: /) do |text|
|
149
|
+
write.print("#{gpgkey[:password]}\n")
|
150
|
+
end
|
151
|
+
rescue Errno::EIO
|
152
|
+
# This ALWAYS happens in Ruby 1.8.
|
153
|
+
end
|
154
|
+
Process.wait(pid)
|
155
|
+
end
|
156
|
+
rescue Exception => e
|
157
|
+
puts "Error occured while attempting to sign #{rpm}, skipping."
|
158
|
+
puts e
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Name: testpackage
|
2
|
+
Version: 1
|
3
|
+
Release: 0%{?dist}
|
4
|
+
Summary: a test package
|
5
|
+
|
6
|
+
License: Apache-2.0
|
7
|
+
URL:
|
8
|
+
Source0:
|
9
|
+
|
10
|
+
BuildRequires:
|
11
|
+
Requires:
|
12
|
+
|
13
|
+
%description
|
14
|
+
|
15
|
+
|
16
|
+
%prep
|
17
|
+
%setup -q
|
18
|
+
|
19
|
+
|
20
|
+
%build
|
21
|
+
%configure
|
22
|
+
make %{?_smp_mflags}
|
23
|
+
|
24
|
+
|
25
|
+
%install
|
26
|
+
rm -rf $RPM_BUILD_ROOT
|
27
|
+
%make_install
|
28
|
+
|
29
|
+
|
30
|
+
%files
|
31
|
+
%doc
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
%changelog
|
36
|
+
* Wed Jun 10 2015 nobody
|
37
|
+
- some comment
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Name: testpackage
|
2
|
+
Version: 1
|
3
|
+
Release: 0%{?dist}
|
4
|
+
Summary: a test package
|
5
|
+
|
6
|
+
License: Apache-2.0
|
7
|
+
URL:
|
8
|
+
Source0:
|
9
|
+
|
10
|
+
BuildRequires:
|
11
|
+
Requires:
|
12
|
+
|
13
|
+
%description
|
14
|
+
|
15
|
+
|
16
|
+
%prep
|
17
|
+
%setup -q
|
18
|
+
|
19
|
+
|
20
|
+
%build
|
21
|
+
%configure
|
22
|
+
make %{?_smp_mflags}
|
23
|
+
|
24
|
+
|
25
|
+
%install
|
26
|
+
rm -rf $RPM_BUILD_ROOT
|
27
|
+
%make_install
|
28
|
+
|
29
|
+
|
30
|
+
%files
|
31
|
+
%doc
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
%changelog
|
36
|
+
* Wed Jun 10 2015 nobody
|
37
|
+
- some comment
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'simp/rake/helpers'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Simp::Rake::Helpers do
|
5
|
+
before :each do
|
6
|
+
@obj = Simp::Rake::Helpers.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#initialize" do
|
10
|
+
it "initialized (smoke test)" do
|
11
|
+
expect( @obj.class ).to eq Simp::Rake::Helpers
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'simp/rake/pkg'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Simp::Rake::Pkg do
|
5
|
+
before :all do
|
6
|
+
dir = File.expand_path( '../files', File.dirname( __FILE__ ) )
|
7
|
+
@obj = Simp::Rake::Pkg.new( dir )
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#initialize" do
|
11
|
+
it "initializes (smoke test)" do
|
12
|
+
expect( @obj.class ).to eq Simp::Rake::Pkg
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'simp/rake'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Simp::Rake do
|
5
|
+
RSpec.configure do |c|
|
6
|
+
c.include Simp::Rake
|
7
|
+
end
|
8
|
+
|
9
|
+
describe ".get_cpu_limit" do
|
10
|
+
it "detects number of CPUs" do
|
11
|
+
expect( get_cpu_limit ).to be > 0
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
describe 'tests are missing' do
|
17
|
+
it 'should have more tests' do
|
18
|
+
skip 'TODO: write more tests'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'simp/rpm'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Simp::RPM do
|
5
|
+
before :all do
|
6
|
+
dir = File.expand_path( 'files', File.dirname( __FILE__ ) )
|
7
|
+
@spec_file = File.join( dir, 'testpackage.spec' )
|
8
|
+
@obj = Simp::RPM.new( @spec_file )
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
it "initializes (smoke test)" do
|
13
|
+
expect( @obj.class ).to eq Simp::RPM
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ".get_info" do
|
18
|
+
it "extracts correct information from a .spec file" do
|
19
|
+
info = Simp::RPM.get_info(@spec_file)
|
20
|
+
expect( info.fetch( :name ) ).to eq 'testpackage'
|
21
|
+
expect( info.fetch( :version ) ).to eq '1'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper.rb"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
RSpec.configure do |config|
|
8
|
+
# config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
|
+
config.run_all_when_everything_filtered = true
|
10
|
+
config.filter_run :focus
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,285 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simp-rake-helpers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.6
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Tessmer
|
8
|
+
- Trevor Vaughan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-06-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '10'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '10'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: coderay
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '1'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '1'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: puppet
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: puppet-lint
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: puppetlabs_spec_helper
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ~>
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: parallel
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ~>
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '1'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: gitlog-md
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ~>
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: pry
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ~>
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ~>
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: pry-doc
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ~>
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ~>
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: highline
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ~>
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '1.6'
|
161
|
+
- - '>'
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: 1.6.1
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - ~>
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '1.6'
|
171
|
+
- - '>'
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 1.6.1
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rspec
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ~>
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3'
|
181
|
+
type: :development
|
182
|
+
prerelease: false
|
183
|
+
version_requirements: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ~>
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '3'
|
188
|
+
- !ruby/object:Gem::Dependency
|
189
|
+
name: guard
|
190
|
+
requirement: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ~>
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '2'
|
195
|
+
type: :development
|
196
|
+
prerelease: false
|
197
|
+
version_requirements: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ~>
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '2'
|
202
|
+
- !ruby/object:Gem::Dependency
|
203
|
+
name: guard-shell
|
204
|
+
requirement: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ~>
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
type: :development
|
210
|
+
prerelease: false
|
211
|
+
version_requirements: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ~>
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
- !ruby/object:Gem::Dependency
|
217
|
+
name: guard-rspec
|
218
|
+
requirement: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ~>
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '4'
|
223
|
+
type: :development
|
224
|
+
prerelease: false
|
225
|
+
version_requirements: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ~>
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '4'
|
230
|
+
description: |2
|
231
|
+
"simp-rake-helpers provides common methods for SIMP Rake Tasks"
|
232
|
+
email: simp@simp-project.org
|
233
|
+
executables: []
|
234
|
+
extensions: []
|
235
|
+
extra_rdoc_files: []
|
236
|
+
files:
|
237
|
+
- .gitignore
|
238
|
+
- .rspec
|
239
|
+
- .travis.yml
|
240
|
+
- CHANGELOG.md
|
241
|
+
- CONTRIBUTING.md
|
242
|
+
- Gemfile
|
243
|
+
- Guardfile
|
244
|
+
- LICENSE
|
245
|
+
- README.md
|
246
|
+
- Rakefile
|
247
|
+
- bin/simp_rake_helpers
|
248
|
+
- lib/simp/rake.rb
|
249
|
+
- lib/simp/rake/helpers.rb
|
250
|
+
- lib/simp/rake/pkg.rb
|
251
|
+
- lib/simp/rpm.rb
|
252
|
+
- spec/lib/simp/files/build/testpackage.spec
|
253
|
+
- spec/lib/simp/files/testpackage.spec
|
254
|
+
- spec/lib/simp/rake/helpers_spec.rb
|
255
|
+
- spec/lib/simp/rake/pkg_spec.rb
|
256
|
+
- spec/lib/simp/rake_spec.rb
|
257
|
+
- spec/lib/simp/rpm_spec.rb
|
258
|
+
- spec/spec_helper.rb
|
259
|
+
homepage: https://github.com/simp/rubygem-simp-rake-helpers
|
260
|
+
licenses:
|
261
|
+
- Apache-2.0
|
262
|
+
metadata:
|
263
|
+
issue_tracker: https://github.com/simp/rubygem-simp-rake-helpers/issues
|
264
|
+
post_install_message:
|
265
|
+
rdoc_options: []
|
266
|
+
require_paths:
|
267
|
+
- lib
|
268
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
269
|
+
requirements:
|
270
|
+
- - '>='
|
271
|
+
- !ruby/object:Gem::Version
|
272
|
+
version: '0'
|
273
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
274
|
+
requirements:
|
275
|
+
- - '>='
|
276
|
+
- !ruby/object:Gem::Version
|
277
|
+
version: '0'
|
278
|
+
requirements: []
|
279
|
+
rubyforge_project:
|
280
|
+
rubygems_version: 2.4.6
|
281
|
+
signing_key:
|
282
|
+
specification_version: 4
|
283
|
+
summary: SIMP rake helpers
|
284
|
+
test_files: []
|
285
|
+
has_rdoc:
|