simp-rake-helpers 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|