buildizer 0.1.0 → 0.1.1
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 +8 -8
- data/Gemfile.lock +32 -26
- data/buildizer.gemspec +2 -2
- data/lib/buildizer.rb +10 -9
- data/lib/buildizer/builder/base.rb +132 -24
- data/lib/buildizer/builder/fpm.rb +2 -2
- data/lib/buildizer/builder/native.rb +1 -1
- data/lib/buildizer/builder/patch.rb +2 -2
- data/lib/buildizer/buildizer.rb +12 -4
- data/lib/buildizer/buildizer/buildizer_conf_mod.rb +0 -40
- data/lib/buildizer/buildizer/overcommit_mod.rb +1 -1
- data/lib/buildizer/ci/travis.rb +13 -6
- data/lib/buildizer/cli/main.rb +12 -10
- data/lib/buildizer/core_ext/hash.rb +5 -5
- data/lib/buildizer/core_ext/pathname.rb +3 -3
- data/lib/buildizer/docker.rb +104 -68
- data/lib/buildizer/image.rb +44 -1
- data/lib/buildizer/os.rb +4 -0
- data/lib/buildizer/os/base.rb +69 -0
- data/lib/buildizer/{image → os}/centos.rb +32 -24
- data/lib/buildizer/{image → os}/centos6.rb +2 -2
- data/lib/buildizer/{image → os}/centos7.rb +2 -2
- data/lib/buildizer/{image → os}/ubuntu.rb +29 -19
- data/lib/buildizer/{image → os}/ubuntu1204.rb +3 -3
- data/lib/buildizer/{image → os}/ubuntu1404.rb +3 -3
- data/lib/buildizer/{image → os}/ubuntu1604.rb +3 -3
- data/lib/buildizer/target/base.rb +65 -37
- data/lib/buildizer/target/fpm.rb +11 -21
- data/lib/buildizer/target/patch.rb +5 -8
- data/lib/buildizer/version.rb +1 -1
- metadata +14 -13
- data/lib/buildizer/image/base.rb +0 -76
data/lib/buildizer/os.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
module Buildizer
|
2
|
+
module Os
|
3
|
+
class Base
|
4
|
+
attr_reader :docker
|
5
|
+
|
6
|
+
def initialize(docker, **kwargs)
|
7
|
+
@docker = docker
|
8
|
+
end
|
9
|
+
|
10
|
+
def base_image_name
|
11
|
+
"buildizer/#{base_vendor_image_name}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def base_vendor_image_name
|
15
|
+
"#{name}:#{version}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def name
|
19
|
+
raise
|
20
|
+
end
|
21
|
+
|
22
|
+
def package_cloud_os_name
|
23
|
+
name
|
24
|
+
end
|
25
|
+
|
26
|
+
def package_cloud_os_version
|
27
|
+
version
|
28
|
+
end
|
29
|
+
|
30
|
+
def version
|
31
|
+
raise
|
32
|
+
end
|
33
|
+
|
34
|
+
def fpm_output_type
|
35
|
+
raise
|
36
|
+
end
|
37
|
+
|
38
|
+
def fpm_extra_params
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_dep(image, build_dep)
|
42
|
+
raise
|
43
|
+
end
|
44
|
+
|
45
|
+
def patch_build_dep(target)
|
46
|
+
target_package_spec(target)
|
47
|
+
end
|
48
|
+
|
49
|
+
def native_build_instructions(target)
|
50
|
+
raise
|
51
|
+
end
|
52
|
+
|
53
|
+
def patch_build_instructions(target)
|
54
|
+
raise
|
55
|
+
end
|
56
|
+
|
57
|
+
def target_package_spec(target)
|
58
|
+
raise
|
59
|
+
end
|
60
|
+
|
61
|
+
def install_test_package_instructions(target)
|
62
|
+
raise
|
63
|
+
end
|
64
|
+
|
65
|
+
def prepare_test_container_instructions(target)
|
66
|
+
end
|
67
|
+
end # Base
|
68
|
+
end # Os
|
69
|
+
end # Buildizer
|
@@ -1,23 +1,23 @@
|
|
1
1
|
module Buildizer
|
2
|
-
module
|
2
|
+
module Os
|
3
3
|
class Centos < Base
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :version
|
5
5
|
|
6
|
-
def initialize(docker,
|
7
|
-
@
|
6
|
+
def initialize(docker, version, **kwargs)
|
7
|
+
@version = version
|
8
8
|
super(docker, **kwargs)
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def name
|
12
12
|
'centos'
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def package_cloud_os_name
|
16
16
|
'el'
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
|
19
|
+
def package_cloud_os_version
|
20
|
+
version.match(/\d+$/).to_s.to_i
|
21
21
|
end
|
22
22
|
|
23
23
|
def fpm_output_type
|
@@ -30,11 +30,19 @@ module Buildizer
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
|
33
|
+
def install_test_package_instructions(target)
|
34
|
+
"yum localinstall -y #{target.builder.docker.container_build_path.join('*.rpm')}"
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
37
|
+
def prepare_test_container_instructions(target)
|
38
|
+
"yum install -y git"
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_dep(image, build_dep)
|
42
|
+
image.instruction :RUN, "yum-builddep -y #{build_dep.to_a.join(' ')}" if build_dep.any?
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_repo(image, id:, name:, baseurl: nil, enabled: 1, gpgcheck: nil, gpgkey: nil, exclude: nil, includepkgs: nil, mirrorlist: nil)
|
38
46
|
repo = "[#{id}]\
|
39
47
|
\\nname=#{name}\
|
40
48
|
\\nenabled=#{enabled}\
|
@@ -45,32 +53,32 @@ module Buildizer
|
|
45
53
|
#{exclude ? "\\nexclude=#{exclude}" : nil}\
|
46
54
|
#{includepkgs ? "\\nincludepkgs=#{includepkgs}" : nil}"
|
47
55
|
|
48
|
-
instruction :RUN, "bash -lec \"echo -e '#{repo}' >> /etc/yum.repos.d/CentOS-Extra-Buildizer.repo\""
|
56
|
+
image.instruction :RUN, "bash -lec \"echo -e '#{repo}' >> /etc/yum.repos.d/CentOS-Extra-Buildizer.repo\""
|
49
57
|
end
|
50
58
|
|
51
59
|
def target_spec_name(target)
|
52
60
|
"#{target.base_package_name}.spec"
|
53
61
|
end
|
54
62
|
|
55
|
-
def rpmdev_setuptree_instructions(
|
63
|
+
def rpmdev_setuptree_instructions(target)
|
56
64
|
"rpmdev-setuptree"
|
57
65
|
end
|
58
66
|
|
59
|
-
def build_rpm_instructions(
|
67
|
+
def build_rpm_instructions(target)
|
60
68
|
["cd ~/rpmbuild/SPECS/",
|
61
69
|
"rpmbuild -bb #{target_spec_name(target)}",
|
62
70
|
["find ~/rpmbuild/RPMS -name '*.rpm' ",
|
63
|
-
"-exec mv {} #{builder.docker.container_build_path} \\;"].join]
|
71
|
+
"-exec mv {} #{target.builder.docker.container_build_path} \\;"].join]
|
64
72
|
end
|
65
73
|
|
66
|
-
def native_build_instructions(
|
67
|
-
[*Array(rpmdev_setuptree_instructions(
|
68
|
-
"cp #{builder.docker.container_package_archive_path} ~/rpmbuild/SOURCES/",
|
69
|
-
"cp #{builder.docker.container_package_path.join(target_spec_name(target))} ~/rpmbuild/SPECS/",
|
70
|
-
*Array(build_rpm_instructions(
|
74
|
+
def native_build_instructions(target)
|
75
|
+
[*Array(rpmdev_setuptree_instructions(target)),
|
76
|
+
"cp #{target.builder.docker.container_package_archive_path} ~/rpmbuild/SOURCES/",
|
77
|
+
"cp #{target.builder.docker.container_package_path.join(target_spec_name(target))} ~/rpmbuild/SPECS/",
|
78
|
+
*Array(build_rpm_instructions(target))]
|
71
79
|
end
|
72
80
|
|
73
|
-
def patch_build_instructions(
|
81
|
+
def patch_build_instructions(target)
|
74
82
|
rpmchange_cmd = "rpmchange %{cmd} --specfile ~/rpmbuild/SPECS/#{target_spec_name(target)} %{args}"
|
75
83
|
get_release_cmd = rpmchange_cmd % {cmd: :tag, args: "--name release"}
|
76
84
|
set_release_cmd = rpmchange_cmd % {cmd: :tag, args: "--name release --value %{value}"}
|
@@ -79,7 +87,7 @@ module Buildizer
|
|
79
87
|
args: "--append --name \"%{name}\" --email \"%{email}\" --message \"%{message}\""
|
80
88
|
}
|
81
89
|
|
82
|
-
[*Array(rpmdev_setuptree_instructions(
|
90
|
+
[*Array(rpmdev_setuptree_instructions(target)),
|
83
91
|
"yumdownloader --source #{target_package_spec(target)}",
|
84
92
|
"rpm -i *.rpm",
|
85
93
|
"gem install rpmchange",
|
@@ -92,12 +100,12 @@ module Buildizer
|
|
92
100
|
changelog_cmd % {name: target.maintainer,
|
93
101
|
email: target.maintainer_email,
|
94
102
|
message: 'Patch by buildizer'},
|
95
|
-
*Array(build_rpm_instructions(
|
103
|
+
*Array(build_rpm_instructions(target))]
|
96
104
|
end
|
97
105
|
|
98
106
|
def target_package_spec(target)
|
99
107
|
[target.package_name, target.package_version].compact.join('-')
|
100
108
|
end
|
101
109
|
end # Centos
|
102
|
-
end #
|
110
|
+
end # Os
|
103
111
|
end # Buildizer
|
@@ -1,27 +1,27 @@
|
|
1
1
|
module Buildizer
|
2
|
-
module
|
2
|
+
module Os
|
3
3
|
class Ubuntu < Base
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :version
|
5
5
|
|
6
|
-
def initialize(docker,
|
7
|
-
@
|
6
|
+
def initialize(docker, version, **kwargs)
|
7
|
+
@version = version
|
8
8
|
super(docker, **kwargs)
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def name
|
12
12
|
'ubuntu'
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def codename
|
16
16
|
raise
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
|
19
|
+
def package_cloud_os_version
|
20
|
+
codename
|
21
21
|
end
|
22
22
|
|
23
|
-
def build_dep(build_dep)
|
24
|
-
instruction :RUN, "apt-get build-dep -y #{build_dep.to_a.join(' ')}" if build_dep.any?
|
23
|
+
def build_dep(image, build_dep)
|
24
|
+
image.instruction :RUN, "apt-get build-dep -y #{build_dep.to_a.join(' ')}" if build_dep.any?
|
25
25
|
end
|
26
26
|
|
27
27
|
def fpm_output_type
|
@@ -35,36 +35,46 @@ module Buildizer
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
38
|
+
def install_test_package_instructions(target)
|
39
|
+
"(dpkg -i #{target.builder.docker.container_build_path.join('*.deb')} || true)" +
|
40
|
+
" && apt-get install -yf"
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def prepare_test_container_instructions(target)
|
44
|
+
["apt-get update",
|
45
|
+
"apt-get install -y git"]
|
46
|
+
end
|
47
|
+
|
48
|
+
def build_deb_instructions(target)
|
49
|
+
["DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -b -us -uc -j#{target.builder.build_jobs}",
|
50
|
+
"cp ../*.deb #{target.builder.docker.container_build_path}"]
|
51
|
+
end
|
52
|
+
|
53
|
+
def native_build_instructions(target)
|
44
54
|
source_archive_name = "#{target.package_name}_#{target.package_upstream_version}.orig.tar.gz"
|
45
55
|
|
46
56
|
[["ln -fs #{target.container_package_archive_path} ",
|
47
57
|
"#{target.container_package_path.dirname.join(source_archive_name)}"].join,
|
48
58
|
"cd #{target.container_package_path}",
|
49
|
-
*Array(build_deb_instructions(
|
59
|
+
*Array(build_deb_instructions(target))]
|
50
60
|
end
|
51
61
|
|
52
|
-
def patch_build_instructions(
|
62
|
+
def patch_build_instructions(target)
|
53
63
|
["apt-get source #{target_package_spec(target)}",
|
54
64
|
'cd $(ls *.orig.tar* | ruby -ne "puts \$_.split(\\".orig.tar\\").first.gsub(\\"_\\", \\"-\\")")',
|
55
65
|
["DEBFULLNAME=\"#{target.maintainer}\" DEBEMAIL=\"#{target.maintainer_email}\" ",
|
56
66
|
"debchange --newversion ",
|
57
67
|
"$(dpkg-parsechangelog | grep \"Version:\" | cut -d\" \" -f2-)buildizer#{target.patch_version} ",
|
58
|
-
"--distribution #{
|
68
|
+
"--distribution #{codename} \"Patch by buildizer\""].join,
|
59
69
|
*target.patch.map {|patch| "cp ../#{patch} debian/patches/"},
|
60
70
|
*target.patch.map {|patch| "sed -i \"/#{Regexp.escape(patch)}/d\" debian/patches/series"},
|
61
71
|
*target.patch.map {|patch| "echo #{patch} >> debian/patches/series"},
|
62
|
-
*Array(build_deb_instructions(
|
72
|
+
*Array(build_deb_instructions(target))]
|
63
73
|
end
|
64
74
|
|
65
75
|
def target_package_spec(target)
|
66
76
|
[target.package_name, target.package_version].compact.join('=')
|
67
77
|
end
|
68
78
|
end # Ubuntu
|
69
|
-
end #
|
79
|
+
end # Os
|
70
80
|
end # Buildizer
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module Buildizer
|
2
|
-
module
|
2
|
+
module Os
|
3
3
|
class Ubuntu1204 < Ubuntu
|
4
4
|
def initialize(docker, **kwargs)
|
5
5
|
super(docker, '12.04', **kwargs)
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
8
|
+
def codename
|
9
9
|
'precise'
|
10
10
|
end
|
11
11
|
end # Ubuntu1204
|
12
|
-
end #
|
12
|
+
end # Os
|
13
13
|
end # Buildizer
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module Buildizer
|
2
|
-
module
|
2
|
+
module Os
|
3
3
|
class Ubuntu1404 < Ubuntu
|
4
4
|
def initialize(docker, **kwargs)
|
5
5
|
super(docker, '14.04', **kwargs)
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
8
|
+
def codename
|
9
9
|
'trusty'
|
10
10
|
end
|
11
11
|
end # Ubuntu1404
|
12
|
-
end #
|
12
|
+
end # Os
|
13
13
|
end # Buildizer
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module Buildizer
|
2
|
-
module
|
2
|
+
module Os
|
3
3
|
class Ubuntu1604 < Ubuntu
|
4
4
|
def initialize(docker, **kwargs)
|
5
5
|
super(docker, '16.04', **kwargs)
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
8
|
+
def codename
|
9
9
|
'xenial'
|
10
10
|
end
|
11
11
|
end # Ubuntu1604
|
12
|
-
end #
|
12
|
+
end # Os
|
13
13
|
end # Buildizer
|
@@ -2,34 +2,51 @@ module Buildizer
|
|
2
2
|
module Target
|
3
3
|
class Base
|
4
4
|
attr_reader :builder
|
5
|
-
attr_reader :
|
6
|
-
|
7
|
-
attr_reader :
|
8
|
-
|
9
|
-
attr_reader :
|
10
|
-
attr_reader :
|
11
|
-
attr_reader :
|
12
|
-
|
13
|
-
|
14
|
-
attr_reader :maintainer
|
15
|
-
|
16
|
-
def initialize(builder, image,
|
5
|
+
attr_reader :os
|
6
|
+
|
7
|
+
attr_reader :params
|
8
|
+
|
9
|
+
attr_reader :build_image
|
10
|
+
attr_reader :cache_image
|
11
|
+
attr_reader :test_image
|
12
|
+
|
13
|
+
def initialize(builder, os,
|
17
14
|
name:, package_name:, package_version:, package_cloud: [],
|
18
|
-
prepare: [], build_dep: [], before_build: [],
|
19
|
-
|
15
|
+
prepare: [], build_dep: [], before_build: [], maintainer: nil,
|
16
|
+
test_options: {}, test_env: {}, test_image: nil, before_test: [], test: [],
|
17
|
+
&blk)
|
20
18
|
@builder = builder
|
21
|
-
@
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
19
|
+
@os = os
|
20
|
+
@params = {}
|
21
|
+
|
22
|
+
params[:name] = name
|
23
|
+
params[:package_name] = package_name
|
24
|
+
params[:package_version] = package_version
|
25
|
+
params[:package_cloud] = package_cloud
|
26
|
+
params[:prepare] = prepare
|
27
|
+
params[:build_dep] = build_dep
|
28
|
+
params[:before_build] = before_build
|
29
|
+
params[:maintainer] = maintainer
|
30
|
+
params[:test_options] = test_options
|
31
|
+
params[:test_env] = test_env
|
32
|
+
params[:test_image] = test_image
|
33
|
+
params[:before_test] = before_test
|
34
|
+
params[:test] = test
|
31
35
|
|
32
36
|
yield if block_given?
|
37
|
+
|
38
|
+
@build_image = ::Buildizer::Image.new(build_image_name, self, from: os.base_image_name)
|
39
|
+
@cache_image = ::Buildizer::Image.new(cache_image_name, self) if cache_image_name
|
40
|
+
@test_image = ::Buildizer::Image.new(test_image_name, self)
|
41
|
+
end
|
42
|
+
|
43
|
+
def method_missing(name, *args, &blk)
|
44
|
+
param_name = name.to_sym
|
45
|
+
if params.key? param_name
|
46
|
+
params[param_name]
|
47
|
+
else
|
48
|
+
super
|
49
|
+
end
|
33
50
|
end
|
34
51
|
|
35
52
|
def image_work_path
|
@@ -45,42 +62,42 @@ module Buildizer
|
|
45
62
|
end
|
46
63
|
|
47
64
|
def maintainer_email
|
48
|
-
match = maintainer.match(/<(.*)>/) if maintainer
|
65
|
+
match = params[:maintainer].match(/<(.*)>/) if params[:maintainer]
|
49
66
|
match[1] if match
|
50
67
|
end
|
51
68
|
|
52
69
|
def package_version
|
53
|
-
|
70
|
+
params[:package_version].nil? ? nil : params[:package_version].to_s
|
54
71
|
end
|
55
72
|
|
56
73
|
def base_package_name
|
57
|
-
package_name.split('-').first
|
74
|
+
params[:package_name].split('-').first
|
58
75
|
end
|
59
76
|
|
60
|
-
def
|
61
|
-
|
77
|
+
def build_image_tag
|
78
|
+
params[:name].gsub('/', '__')
|
62
79
|
end
|
63
80
|
|
64
|
-
def
|
65
|
-
|
81
|
+
def build_image_name
|
82
|
+
"#{params[:package_name]}:#{build_image_tag}"
|
66
83
|
end
|
67
84
|
|
68
|
-
def
|
69
|
-
"#{
|
85
|
+
def cache_image_name
|
86
|
+
"#{os.docker.cache[:repo]}:#{build_image_tag}" if os.docker.cache
|
70
87
|
end
|
71
88
|
|
72
|
-
def
|
73
|
-
|
89
|
+
def test_image_name
|
90
|
+
params[:test_image] || os.base_vendor_image_name
|
74
91
|
end
|
75
92
|
|
76
93
|
def package_cloud
|
77
|
-
|
94
|
+
params[:package_cloud].map do |desc|
|
78
95
|
desc.merge(package_path: _package_cloud_path(desc[:repo]))
|
79
96
|
end
|
80
97
|
end
|
81
98
|
|
82
99
|
def _package_cloud_path(repo)
|
83
|
-
"#{repo}/#{
|
100
|
+
"#{repo}/#{os.package_cloud_os_name}/#{os.package_cloud_os_version}"
|
84
101
|
end
|
85
102
|
|
86
103
|
def image_build_path
|
@@ -106,6 +123,17 @@ module Buildizer
|
|
106
123
|
def container_package_archive_path
|
107
124
|
Pathname.new('/').join(container_package_archive_name)
|
108
125
|
end
|
126
|
+
|
127
|
+
def test_env
|
128
|
+
params[:test_env]
|
129
|
+
.map {|var, values| Array(values).uniq.map {|value| {var => value}}}
|
130
|
+
.reduce {|res, vars| res.product vars}
|
131
|
+
.to_a
|
132
|
+
.map {|vars|
|
133
|
+
vars = [vars] unless vars.is_a? Array
|
134
|
+
vars.reduce(&:merge)
|
135
|
+
}
|
136
|
+
end
|
109
137
|
end # Base
|
110
138
|
end # Target
|
111
139
|
end # Buildizer
|