vanagon 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/bin/build +1 -1
- data/lib/makefile.rb +67 -0
- data/lib/vanagon/component.rb +16 -2
- data/lib/vanagon/component/dsl.rb +34 -3
- data/lib/vanagon/component/rules.rb +217 -0
- data/lib/vanagon/component/source/http.rb +8 -3
- data/lib/vanagon/driver.rb +12 -5
- data/lib/vanagon/engine/hardware.rb +64 -0
- data/lib/vanagon/optparse.rb +16 -33
- data/lib/vanagon/patch.rb +39 -0
- data/lib/vanagon/platform.rb +3 -2
- data/lib/vanagon/platform/dsl.rb +23 -5
- data/lib/vanagon/platform/rpm/eos.rb +83 -0
- data/lib/vanagon/platform/solaris_10.rb +19 -4
- data/lib/vanagon/utilities/shell_utilities.rb +29 -0
- data/spec/lib/makefile_spec.rb +50 -0
- data/spec/lib/vanagon/component/dsl_spec.rb +61 -2
- data/spec/lib/vanagon/component/rules_spec.rb +302 -0
- data/spec/lib/vanagon/component_spec.rb +17 -0
- data/spec/lib/vanagon/engine/hardware_spec.rb +48 -0
- data/spec/lib/vanagon/optparse_spec.rb +40 -0
- data/spec/lib/vanagon/utilities/shell_utilities_spec.rb +32 -0
- data/templates/Makefile.erb +1 -58
- data/templates/rpm/project.spec.erb +1 -1
- metadata +33 -4
- data/lib/vanagon/platform/swix.rb +0 -35
@@ -19,4 +19,21 @@ describe "Vanagon::Component" do
|
|
19
19
|
expect(comp.get_environment).to eq(':')
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
describe "#get_build_dir" do
|
24
|
+
subject(:comp) do
|
25
|
+
Vanagon::Component.new('build-dir-test', {}, {}).tap do |comp|
|
26
|
+
comp.dirname = "build-dir-test"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "uses the dirname when no build_dir was set" do
|
31
|
+
expect(comp.get_build_dir).to eq "build-dir-test"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "joins the dirname and the build dir when a build_dir was set" do
|
35
|
+
comp.build_dir = "cmake-build"
|
36
|
+
expect(comp.get_build_dir).to eq File.join("build-dir-test", "cmake-build")
|
37
|
+
end
|
38
|
+
end
|
22
39
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'vanagon/engine/hardware'
|
2
|
+
require 'vanagon/driver'
|
3
|
+
require 'vanagon/platform'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
# Haus, I added this, cause it prevented errors.
|
7
|
+
@@logger = Logger.new('/dev/null')
|
8
|
+
|
9
|
+
describe 'Vanagon::Engine::Hardware' do
|
10
|
+
|
11
|
+
let (:platform_without_build_hosts) {
|
12
|
+
plat = Vanagon::Platform::DSL.new('aix-7.1-ppc')
|
13
|
+
plat.instance_eval("platform 'aix-7.1-ppc' do |plat|
|
14
|
+
end")
|
15
|
+
plat._platform
|
16
|
+
}
|
17
|
+
|
18
|
+
let (:platform) {
|
19
|
+
plat = Vanagon::Platform::DSL.new('aix-6.1-ppc')
|
20
|
+
plat.instance_eval("platform 'aix-6.1-ppc' do |plat|
|
21
|
+
plat.build_host 'abcd'
|
22
|
+
end")
|
23
|
+
plat._platform
|
24
|
+
}
|
25
|
+
|
26
|
+
describe '#select_target' do
|
27
|
+
it 'raises an error without a target' do
|
28
|
+
base = Vanagon::Engine::Hardware.new(platform_without_build_hosts, nil)
|
29
|
+
expect { base.validate_platform }.to raise_error(Vanagon::Error)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'returns a target if one is set' do
|
33
|
+
base = Vanagon::Engine::Hardware.new(platform, nil)
|
34
|
+
expect(base).to receive(:node_lock).with(['abcd']).and_return('abcd')
|
35
|
+
expect(base.select_target).to eq('abcd')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#validate_platform' do
|
40
|
+
it 'raises an error if the platform is missing a required attribute' do
|
41
|
+
expect{ Vanagon::Engine::Hardware.new(platform_without_build_hosts, nil).validate_platform }.to raise_error(Vanagon::Error)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns true if the platform has the required attributes' do
|
45
|
+
expect(Vanagon::Engine::Hardware.new(platform, nil).validate_platform).to be(true)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'vanagon/optparse'
|
2
|
+
|
3
|
+
describe Vanagon::OptParse do
|
4
|
+
|
5
|
+
describe "options that don't take a value" do
|
6
|
+
[:skipcheck, :preserve, :verbose].each do |flag|
|
7
|
+
it "can create an option parser that accepts the #{flag} flag" do
|
8
|
+
subject = described_class.new("test", [flag])
|
9
|
+
expect(subject.parse!(["--#{flag}"])).to eq(flag => true)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "short options" do
|
14
|
+
[["p", :preserve], ["v", :verbose]].each do |short, long|
|
15
|
+
it "maps the short option #{short} to #{long}" do
|
16
|
+
subject = described_class.new("test", [long])
|
17
|
+
expect(subject.parse!(["-#{short}"])).to eq(long => true)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "options that take a value" do
|
24
|
+
[:workdir, :configdir, :target, :engine].each do |option|
|
25
|
+
it "can create an option parser that accepts the #{option} option" do
|
26
|
+
subject = described_class.new("test", [option])
|
27
|
+
expect(subject.parse!(["--#{option}", "hello"])).to eq(option => "hello")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "short options" do
|
32
|
+
[["w", :workdir], ["c", :configdir], ["t", :target], ["e", :engine]].each do |short, long|
|
33
|
+
it "maps the short option #{short} to #{long}" do
|
34
|
+
subject = described_class.new("test", [long])
|
35
|
+
expect(subject.parse!(["-#{short}", "hello"])).to eq(long => "hello")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'vanagon/utilities/shell_utilities'
|
2
|
+
|
3
|
+
describe Vanagon::Utilities::ShellUtilities do
|
4
|
+
describe "#cmdjoin" do
|
5
|
+
it "returns a single value as-is" do
|
6
|
+
expect(described_class.cmdjoin(["make test"], " !! ")).to eq "make test"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "turns an array with a single value into the wrapped value" do
|
10
|
+
expect(described_class.cmdjoin([["make test"]], " !! ")).to eq "make test"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "joins multiple commands with the separator string" do
|
14
|
+
expect(described_class.cmdjoin(["cd build", "cmake ..", "make"], " !! ")).to eq "cd build !! cmake .. !! make"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "joins single strings and arrays of strings" do
|
18
|
+
expect(described_class.cmdjoin([
|
19
|
+
"cd build",
|
20
|
+
["make", "make test"]
|
21
|
+
], " !! ")).to eq "cd build !! make !! make test"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "#andand joins commands with &&" do
|
26
|
+
expect(described_class.andand("foo", ["bar", "baz"])).to eq "foo && bar && baz"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "#andand_multiline joins commands with && and an escaped newline" do
|
30
|
+
expect(described_class.andand_multiline("foo", ["bar", "baz"])).to eq "foo && \\\nbar && \\\nbaz"
|
31
|
+
end
|
32
|
+
end
|
data/templates/Makefile.erb
CHANGED
@@ -55,64 +55,7 @@ cleanup-components: <%= @components.map {|comp| "#{comp.name}-cleanup" }.join("
|
|
55
55
|
touch <%= @name %>-project
|
56
56
|
|
57
57
|
<%- @components.each do |comp| -%>
|
58
|
-
<%= comp.
|
59
|
-
|
60
|
-
<%- if @cleanup -%>
|
61
|
-
<%= comp.name %>-cleanup: <%= comp.name %>-install
|
62
|
-
<%= comp.cleanup_source %>
|
63
|
-
touch <%= comp.name %>-cleanup
|
64
|
-
<%- end -%>
|
65
|
-
|
66
|
-
<%= comp.name %>-unpack: file-list-before-build
|
67
|
-
<%= comp.extract_with %>
|
68
|
-
touch <%= comp.name %>-unpack
|
69
|
-
|
70
|
-
<%= comp.name %>-patch: <%= comp.name %>-unpack
|
71
|
-
<%- unless comp.patches.empty? -%>
|
72
|
-
cd <%= comp.dirname %> && \
|
73
|
-
<%- comp.patches.each do |patch| -%>
|
74
|
-
<%= @platform.patch %> --strip=<%= patch.strip %> --fuzz=<%= patch.fuzz %> --ignore-whitespace < ../patches/<%= File.basename(patch.path) %> && \
|
75
|
-
<%- end -%>
|
76
|
-
:
|
77
|
-
<%- end -%>
|
78
|
-
|
79
|
-
touch <%= comp.name %>-patch
|
80
|
-
|
81
|
-
<%= comp.name %>-configure: <%= comp.name %>-patch <%= list_component_dependencies(comp).join(" ") %>
|
82
|
-
<%- unless comp.configure.empty? -%>
|
83
|
-
cd <%= comp.dirname %> && \
|
84
|
-
<%= comp.get_environment %> && \
|
85
|
-
<%= comp.configure.join(" && \\\n\t") %>
|
86
|
-
<%- end -%>
|
87
|
-
touch <%= comp.name %>-configure
|
88
|
-
|
89
|
-
<%= comp.name %>-build: <%= comp.name %>-configure
|
90
|
-
<%- unless comp.build.empty? -%>
|
91
|
-
cd <%= comp.dirname %> && \
|
92
|
-
<%= comp.get_environment %> && \
|
93
|
-
<%= comp.build.join(" && \\\n\t") %>
|
94
|
-
<%- end -%>
|
95
|
-
touch <%= comp.name %>-build
|
96
|
-
|
97
|
-
<%= comp.name %>-install: <%= comp.name %>-build
|
98
|
-
<%- unless comp.install.empty? -%>
|
99
|
-
cd <%= comp.dirname %> && \
|
100
|
-
<%= comp.get_environment %> && \
|
101
|
-
<%= comp.install.join(" && \\\n\t") %>
|
102
|
-
<%- end -%>
|
103
|
-
touch <%= comp.name %>-install
|
104
|
-
|
105
|
-
<%= comp.name %>-clean:
|
106
|
-
[ -d <%= comp.dirname %> ] && cd <%= comp.dirname %> && \
|
107
|
-
<%= @platform[:make] %> clean
|
108
|
-
<%- ["configure", "build", "install"].each do |type| -%>
|
109
|
-
[ -e <%= comp.name %>-<%= type %> ] && rm <%= comp.name %>-<%= type %>
|
110
|
-
<%- end -%>
|
111
|
-
|
112
|
-
<%= comp.name %>-clobber: <%= comp.name %>-clean
|
113
|
-
[ -d <%= comp.dirname %> ] && rm -r <%= comp.dirname %>
|
114
|
-
[ -e <%= comp.name %>-unpack ] && rm <%= comp.name %>-unpack
|
115
|
-
|
58
|
+
<%= comp.rules(self, @platform).to_s %>
|
116
59
|
<%- end -%>
|
117
60
|
|
118
61
|
clean: <%= @components.map {|comp| "#{comp.name}-clean" }.join(" ") %>
|
@@ -90,7 +90,7 @@ install -d %{buildroot}
|
|
90
90
|
cp -Rp <%= file %> %{buildroot}/<%= File.dirname(file) %>
|
91
91
|
<%- end -%>
|
92
92
|
|
93
|
-
<%- if @platform.is_cisco_wrlinux?
|
93
|
+
<%- if @platform.is_cisco_wrlinux? -%>
|
94
94
|
# Generate a list of directories and append it to the file list. RPMv4
|
95
95
|
# automatically does this implicitly, but RPMv5 is more strict and you
|
96
96
|
# need to list the dirs for them to be packaged properly.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vanagon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: lock_manager
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: Vanagon is a tool to build a single package out of a project, which can
|
42
56
|
itself contain one or more components.
|
43
57
|
email: info@puppetlabs.com
|
@@ -55,50 +69,59 @@ files:
|
|
55
69
|
- bin/devkit
|
56
70
|
- bin/repo
|
57
71
|
- bin/ship
|
72
|
+
- lib/makefile.rb
|
58
73
|
- lib/vanagon.rb
|
59
74
|
- lib/vanagon/common.rb
|
60
75
|
- lib/vanagon/common/pathname.rb
|
61
76
|
- lib/vanagon/common/user.rb
|
62
77
|
- lib/vanagon/component.rb
|
63
78
|
- lib/vanagon/component/dsl.rb
|
79
|
+
- lib/vanagon/component/rules.rb
|
64
80
|
- lib/vanagon/component/source.rb
|
65
81
|
- lib/vanagon/component/source/git.rb
|
66
82
|
- lib/vanagon/component/source/http.rb
|
67
83
|
- lib/vanagon/driver.rb
|
68
84
|
- lib/vanagon/engine/base.rb
|
69
85
|
- lib/vanagon/engine/docker.rb
|
86
|
+
- lib/vanagon/engine/hardware.rb
|
70
87
|
- lib/vanagon/engine/local.rb
|
71
88
|
- lib/vanagon/engine/pooler.rb
|
72
89
|
- lib/vanagon/errors.rb
|
73
90
|
- lib/vanagon/extensions/string.rb
|
74
91
|
- lib/vanagon/optparse.rb
|
92
|
+
- lib/vanagon/patch.rb
|
75
93
|
- lib/vanagon/platform.rb
|
76
94
|
- lib/vanagon/platform/deb.rb
|
77
95
|
- lib/vanagon/platform/dsl.rb
|
78
96
|
- lib/vanagon/platform/osx.rb
|
79
97
|
- lib/vanagon/platform/rpm.rb
|
80
98
|
- lib/vanagon/platform/rpm/aix.rb
|
99
|
+
- lib/vanagon/platform/rpm/eos.rb
|
81
100
|
- lib/vanagon/platform/rpm/sles.rb
|
82
101
|
- lib/vanagon/platform/rpm/wrl.rb
|
83
102
|
- lib/vanagon/platform/solaris_10.rb
|
84
103
|
- lib/vanagon/platform/solaris_11.rb
|
85
|
-
- lib/vanagon/platform/swix.rb
|
86
104
|
- lib/vanagon/project.rb
|
87
105
|
- lib/vanagon/project/dsl.rb
|
88
106
|
- lib/vanagon/utilities.rb
|
107
|
+
- lib/vanagon/utilities/shell_utilities.rb
|
89
108
|
- spec/fixures/component/invalid-test-fixture.json
|
90
109
|
- spec/fixures/component/mcollective.service
|
91
110
|
- spec/fixures/component/test-fixture.json
|
111
|
+
- spec/lib/makefile_spec.rb
|
92
112
|
- spec/lib/vanagon/common/pathname_spec.rb
|
93
113
|
- spec/lib/vanagon/common/user_spec.rb
|
94
114
|
- spec/lib/vanagon/component/dsl_spec.rb
|
115
|
+
- spec/lib/vanagon/component/rules_spec.rb
|
95
116
|
- spec/lib/vanagon/component/source/git_spec.rb
|
96
117
|
- spec/lib/vanagon/component/source/http_spec.rb
|
97
118
|
- spec/lib/vanagon/component/source_spec.rb
|
98
119
|
- spec/lib/vanagon/component_spec.rb
|
99
120
|
- spec/lib/vanagon/engine/base_spec.rb
|
100
121
|
- spec/lib/vanagon/engine/docker_spec.rb
|
122
|
+
- spec/lib/vanagon/engine/hardware_spec.rb
|
101
123
|
- spec/lib/vanagon/engine/pooler_spec.rb
|
124
|
+
- spec/lib/vanagon/optparse_spec.rb
|
102
125
|
- spec/lib/vanagon/platform/deb_spec.rb
|
103
126
|
- spec/lib/vanagon/platform/dsl_spec.rb
|
104
127
|
- spec/lib/vanagon/platform/rpm/aix_spec.rb
|
@@ -107,6 +130,7 @@ files:
|
|
107
130
|
- spec/lib/vanagon/platform_spec.rb
|
108
131
|
- spec/lib/vanagon/project/dsl_spec.rb
|
109
132
|
- spec/lib/vanagon/project_spec.rb
|
133
|
+
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
110
134
|
- spec/lib/vanagon/utilities_spec.rb
|
111
135
|
- templates/Makefile.erb
|
112
136
|
- templates/deb/changelog.erb
|
@@ -151,21 +175,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
175
|
version: '0'
|
152
176
|
requirements: []
|
153
177
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.4.
|
178
|
+
rubygems_version: 2.4.6
|
155
179
|
signing_key:
|
156
180
|
specification_version: 3
|
157
181
|
summary: All of your packages will fit into this van with this one simple trick.
|
158
182
|
test_files:
|
183
|
+
- spec/lib/makefile_spec.rb
|
159
184
|
- spec/lib/vanagon/common/pathname_spec.rb
|
160
185
|
- spec/lib/vanagon/common/user_spec.rb
|
161
186
|
- spec/lib/vanagon/component/dsl_spec.rb
|
187
|
+
- spec/lib/vanagon/component/rules_spec.rb
|
162
188
|
- spec/lib/vanagon/component/source/git_spec.rb
|
163
189
|
- spec/lib/vanagon/component/source/http_spec.rb
|
164
190
|
- spec/lib/vanagon/component/source_spec.rb
|
165
191
|
- spec/lib/vanagon/component_spec.rb
|
166
192
|
- spec/lib/vanagon/engine/base_spec.rb
|
167
193
|
- spec/lib/vanagon/engine/docker_spec.rb
|
194
|
+
- spec/lib/vanagon/engine/hardware_spec.rb
|
168
195
|
- spec/lib/vanagon/engine/pooler_spec.rb
|
196
|
+
- spec/lib/vanagon/optparse_spec.rb
|
169
197
|
- spec/lib/vanagon/platform/deb_spec.rb
|
170
198
|
- spec/lib/vanagon/platform/dsl_spec.rb
|
171
199
|
- spec/lib/vanagon/platform/rpm/aix_spec.rb
|
@@ -174,5 +202,6 @@ test_files:
|
|
174
202
|
- spec/lib/vanagon/platform_spec.rb
|
175
203
|
- spec/lib/vanagon/project/dsl_spec.rb
|
176
204
|
- spec/lib/vanagon/project_spec.rb
|
205
|
+
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
177
206
|
- spec/lib/vanagon/utilities_spec.rb
|
178
207
|
has_rdoc:
|
@@ -1,35 +0,0 @@
|
|
1
|
-
class Vanagon
|
2
|
-
class Platform
|
3
|
-
class RPM
|
4
|
-
class Swix < Vanagon::Platform::RPM
|
5
|
-
# The specific bits used to generate an SWIX package for a given project
|
6
|
-
#
|
7
|
-
# @param project [Vanagon::Project] project to build a SWIX package of
|
8
|
-
# @return [Array] list of commands required to build the SWIX package
|
9
|
-
# for the given project from an rpm
|
10
|
-
def generate_package(project)
|
11
|
-
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
12
|
-
|
13
|
-
commands = super(project)
|
14
|
-
pkgname_swix = package_name(project)
|
15
|
-
pkgname_rpm = pkgname_swix.sub(/swix$/, 'rpm')
|
16
|
-
commands += ["echo 'format: 1' > ./output/#{target_dir}/manifest.txt",
|
17
|
-
"echo \"primaryRpm: #{pkgname_rpm}\" >> ./output/#{target_dir}/manifest.txt",
|
18
|
-
"echo #{pkgname_rpm}-sha1: `sha1sum ./output/#{target_dir}/#{pkgname_rpm}`",
|
19
|
-
"cd ./output/#{target_dir}/ && zip #{pkgname_swix} manifest.txt #{pkgname_rpm}",
|
20
|
-
"rm ./output/#{target_dir}/manifest.txt ./output/#{target_dir}/#{pkgname_rpm}"]
|
21
|
-
|
22
|
-
commands
|
23
|
-
end
|
24
|
-
|
25
|
-
# Method to derive the package name for the project
|
26
|
-
#
|
27
|
-
# @param project [Vanagon::Project] project to name
|
28
|
-
# @return [String] name of the SWIX package for this project
|
29
|
-
def package_name(project)
|
30
|
-
"#{project.name}-#{project.version}-#{project.release}.#{os_name}#{os_version}.#{project.noarch ? 'noarch' : @architecture}.swix"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|