ood_packaging 0.0.1.rc.5 → 0.1.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/lib/ood_packaging/build.rb +26 -8
- data/lib/ood_packaging/build_box/docker-image/Dockerfile.erb +1 -0
- data/lib/ood_packaging/build_box/docker-image/install.sh.erb +2 -2
- data/lib/ood_packaging/build_box.rb +4 -4
- data/lib/ood_packaging/package.rb +25 -11
- data/lib/ood_packaging/tasks.rb +9 -1
- data/lib/ood_packaging/utils.rb +11 -0
- data/lib/ood_packaging/version.rb +1 -1
- metadata +4 -8
- data/lib/tasks/package_utils.rb +0 -197
- data/lib/tasks/packaging.rb +0 -111
- data/lib/tasks/templates/Dockerfile.el.erb +0 -21
- data/lib/tasks/templates/Dockerfile.ubuntu.erb +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 80fe80e20ad800efba449504ba04074ede51db0f0bb8c22b77995e28ecc9c350
|
|
4
|
+
data.tar.gz: f5199c57d54acd2c01ad3d50f28315141bbcb199271deec5af9049d790f362a9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b9d32724c91dbe5d77b886eaaf318b109df6c38bdbb450da79de53fcfc80eb7cccefa7e9ef780b52d0369caa151014a2e21bd694f60345f9d27d24a0d4057cb2
|
|
7
|
+
data.tar.gz: 4a1e28f5c482a9714d4c9dfa272089833b67c87132fc3edd9786cd0494617221704553823f72e89e5d229bda6b483115a0f776c481a602442a2e1b9e3c045fe9
|
data/lib/ood_packaging/build.rb
CHANGED
|
@@ -39,11 +39,11 @@ class OodPackaging::Build
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def version
|
|
42
|
-
ENV['VERSION']
|
|
42
|
+
ENV['VERSION']
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def rpm_version
|
|
46
|
-
version.split('-', 2)[0]
|
|
46
|
+
version.gsub(/^v/, '').split('-', 2)[0]
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def rpm_release
|
|
@@ -53,8 +53,12 @@ class OodPackaging::Build
|
|
|
53
53
|
v[1].gsub('-', '.')
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
def deb_version
|
|
57
|
+
version.gsub(/^v/, '').gsub('-', '.')
|
|
58
|
+
end
|
|
59
|
+
|
|
56
60
|
def rpm_defines
|
|
57
|
-
defines = ["--define 'git_tag #{
|
|
61
|
+
defines = ["--define 'git_tag #{version}'"]
|
|
58
62
|
defines.concat ["--define 'package_version #{rpm_version}'"]
|
|
59
63
|
defines.concat ["--define 'package_release #{rpm_release}'"]
|
|
60
64
|
defines.concat ["--define 'scl #{config[:scl]}'"] if config[:scl]
|
|
@@ -72,6 +76,8 @@ class OodPackaging::Build
|
|
|
72
76
|
'/package/rpm'
|
|
73
77
|
elsif Dir.exist?('/package/packaging/rpm')
|
|
74
78
|
'/package/packaging/rpm'
|
|
79
|
+
elsif Dir.exist?('/package/packaging')
|
|
80
|
+
'/package/packaging'
|
|
75
81
|
else
|
|
76
82
|
'/package'
|
|
77
83
|
end
|
|
@@ -122,7 +128,7 @@ class OodPackaging::Build
|
|
|
122
128
|
end
|
|
123
129
|
|
|
124
130
|
def deb_name
|
|
125
|
-
"#{package}-#{
|
|
131
|
+
"#{package}-#{deb_version}"
|
|
126
132
|
end
|
|
127
133
|
|
|
128
134
|
def rpms
|
|
@@ -130,6 +136,7 @@ class OodPackaging::Build
|
|
|
130
136
|
end
|
|
131
137
|
|
|
132
138
|
def run!
|
|
139
|
+
fix_env!
|
|
133
140
|
env_dump! if debug?
|
|
134
141
|
bootstrap_rpm! if build_box.rpm?
|
|
135
142
|
bootstrap_deb! if build_box.deb?
|
|
@@ -141,6 +148,10 @@ class OodPackaging::Build
|
|
|
141
148
|
sanity!
|
|
142
149
|
end
|
|
143
150
|
|
|
151
|
+
def fix_env!
|
|
152
|
+
ENV.delete('GEM_PATH')
|
|
153
|
+
end
|
|
154
|
+
|
|
144
155
|
def env_dump!
|
|
145
156
|
ENV.sort.to_h.each_pair do |k, v|
|
|
146
157
|
puts "#{k}=#{v}"
|
|
@@ -181,10 +192,17 @@ class OodPackaging::Build
|
|
|
181
192
|
def bootstrap_get_source!
|
|
182
193
|
if ENV['SKIP_DOWNLOAD'] == 'true'
|
|
183
194
|
puts "\tSKIP_DOWNLOAD detected, skipping download sources".blue
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
195
|
+
return
|
|
196
|
+
end
|
|
197
|
+
output = `spectool #{rpm_defines.join(' ')} -l -R -S #{spec_file} 2>&1 | grep 'Source0:'`.strip
|
|
198
|
+
exit_code = $CHILD_STATUS.exitstatus
|
|
199
|
+
if exit_code.zero?
|
|
200
|
+
source = File.join(work_dir, 'SOURCES', File.basename(output))
|
|
201
|
+
tar = File.join(work_dir, 'SOURCES', ENV['TAR_NAME'])
|
|
202
|
+
sh "mv #{tar} #{source}" if !File.exist?(source) && File.exist?(tar)
|
|
187
203
|
end
|
|
204
|
+
puts "\tDownloading sources defined in #{spec_file}".blue
|
|
205
|
+
sh "spectool #{rpm_defines.join(' ')} -g -R -S #{spec_file}#{cmd_suffix}"
|
|
188
206
|
end
|
|
189
207
|
|
|
190
208
|
def bootstrap_deb!
|
|
@@ -201,7 +219,7 @@ class OodPackaging::Build
|
|
|
201
219
|
puts "\tBootstrap debian build files".blue
|
|
202
220
|
Dir.chdir(deb_work_dir) do
|
|
203
221
|
sh "dh_make -s -y --createorig -f ../#{deb_name}.tar.gz#{cmd_suffix} || true"
|
|
204
|
-
sh "dch -b -v #{
|
|
222
|
+
sh "dch -b -v #{deb_version} 'Release #{deb_version}'#{cmd_suffix}"
|
|
205
223
|
end
|
|
206
224
|
end
|
|
207
225
|
|
|
@@ -2,6 +2,7 @@ FROM <%= base_image %>
|
|
|
2
2
|
MAINTAINER Trey Dockendorf <tdockendorf@osc.edu>
|
|
3
3
|
ENV LANG=en_US.UTF-8
|
|
4
4
|
ENV LC_CTYPE=en_US.UTF-8
|
|
5
|
+
ENV GEM_PATH=<%= ctr_gems_dir %>:
|
|
5
6
|
<% if dist == 'el7' -%>
|
|
6
7
|
RUN yum update -y && yum clean all && rm -rf /var/cache/yum/*
|
|
7
8
|
RUN yum install -y yum-utils epel-release centos-release-scl && yum clean all && rm -rf /var/cache/yum/*
|
|
@@ -73,9 +73,9 @@ echo "allow-loopback-pinentry" >> <%= ctr_gpg_dir %>/gpg-agent.conf
|
|
|
73
73
|
|
|
74
74
|
header "Install ood_packaging gem"
|
|
75
75
|
<%- if rpm? && !dnf? -%>
|
|
76
|
-
run scl enable <%= scl_ruby %> -- gem install --no-doc /build/*.gem
|
|
76
|
+
run scl enable <%= scl_ruby %> -- gem install --no-doc --bindir <%= ctr_scripts_dir %> --install-dir <%= ctr_gems_dir %> /build/*.gem
|
|
77
77
|
<%- else -%>
|
|
78
|
-
run gem install --no-doc /build/*.gem
|
|
78
|
+
run gem install --no-doc --bindir <%= ctr_scripts_dir %> --install-dir <%= ctr_gems_dir %> /build/*.gem
|
|
79
79
|
<%- end -%>
|
|
80
80
|
|
|
81
81
|
header "Copy in launch scripts"
|
|
@@ -21,17 +21,17 @@ class OodPackaging::BuildBox
|
|
|
21
21
|
|
|
22
22
|
def initialize(config = {})
|
|
23
23
|
@config = config
|
|
24
|
-
raise ArgumentError, 'Must provide dist' if
|
|
24
|
+
raise ArgumentError, 'Must provide dist' if dist.nil?
|
|
25
25
|
|
|
26
26
|
# rubocop:disable Style/GuardClause
|
|
27
|
-
unless valid_dist?(
|
|
28
|
-
raise ArgumentError, "Invalid dist selected: #{
|
|
27
|
+
unless valid_dist?(dist)
|
|
28
|
+
raise ArgumentError, "Invalid dist selected: #{dist}. Valid choices are #{valid_dists.join(' ')}"
|
|
29
29
|
end
|
|
30
30
|
# rubocop:enable Style/GuardClause
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def dist
|
|
34
|
-
@dist ||= @config[:dist]
|
|
34
|
+
@dist ||= ENV['OOD_PACKAGING_DIST'] || @config[:dist]
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def rpm?
|
|
@@ -75,12 +75,15 @@ class OodPackaging::Package
|
|
|
75
75
|
|
|
76
76
|
def package_name
|
|
77
77
|
name = File.basename(package)
|
|
78
|
-
|
|
78
|
+
case name
|
|
79
|
+
when /deb|rpm/
|
|
79
80
|
name = if File.basename(File.dirname(package)) == 'packages'
|
|
80
81
|
File.basename(File.dirname(File.dirname(package)))
|
|
81
82
|
else
|
|
82
83
|
File.basename(File.dirname(package))
|
|
83
84
|
end
|
|
85
|
+
when 'packaging'
|
|
86
|
+
name = File.basename(File.dirname(package))
|
|
84
87
|
end
|
|
85
88
|
name
|
|
86
89
|
end
|
|
@@ -123,10 +126,23 @@ class OodPackaging::Package
|
|
|
123
126
|
package
|
|
124
127
|
end
|
|
125
128
|
|
|
126
|
-
def
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
def tar_name
|
|
130
|
+
version = if build_box.rpm?
|
|
131
|
+
rpm_version
|
|
132
|
+
else
|
|
133
|
+
deb_version
|
|
134
|
+
end
|
|
135
|
+
"#{package_name}-#{version}"
|
|
136
|
+
end
|
|
129
137
|
|
|
138
|
+
def rpm_tar_dest_dir
|
|
139
|
+
[
|
|
140
|
+
File.join(package, 'rpm'),
|
|
141
|
+
File.join(package, 'packaging/rpm'),
|
|
142
|
+
File.join(package, 'packaging')
|
|
143
|
+
].each do |dir|
|
|
144
|
+
return dir if Dir.exist?(dir)
|
|
145
|
+
end
|
|
130
146
|
File.join(package, 'packaging/rpm')
|
|
131
147
|
end
|
|
132
148
|
|
|
@@ -157,7 +173,7 @@ class OodPackaging::Package
|
|
|
157
173
|
cmd = []
|
|
158
174
|
cmd.concat exec_launchers if docker_runtime?
|
|
159
175
|
cmd.concat ['scl', 'enable', scl_ruby, '--'] if podman_runtime? && build_box.scl?
|
|
160
|
-
cmd.concat ['rake']
|
|
176
|
+
cmd.concat [File.join(ctr_scripts_dir, 'rake')]
|
|
161
177
|
cmd.concat ['-q'] unless debug
|
|
162
178
|
cmd.concat ['-f', File.join(ctr_scripts_dir, 'Rakefile'), 'ood_packaging:package:build']
|
|
163
179
|
cmd
|
|
@@ -197,14 +213,12 @@ class OodPackaging::Package
|
|
|
197
213
|
cmd = ['git', 'ls-files', '.', '|', tar, '-c']
|
|
198
214
|
if build_box.rpm?
|
|
199
215
|
dir = rpm_tar_dest_dir
|
|
200
|
-
version = rpm_version
|
|
201
216
|
else
|
|
202
217
|
dir = deb_tar_dest_dir.tap { |p| sh "mkdir -p #{p}" }
|
|
203
|
-
version = deb_version
|
|
204
218
|
cmd.concat ["--transform 'flags=r;s,packaging/deb,debian,'"]
|
|
205
219
|
end
|
|
206
|
-
tar_file = "#{dir}/#{
|
|
207
|
-
cmd.concat ["--transform 's,^,#{
|
|
220
|
+
tar_file = "#{dir}/#{tar_name}.tar.gz"
|
|
221
|
+
cmd.concat ["--transform 's,^,#{tar_name}/,'"]
|
|
208
222
|
cmd.concat ['-T', '-', '|', "gzip > #{tar_file}"]
|
|
209
223
|
|
|
210
224
|
sh "rm #{tar_file}" if File.exist?(tar_file)
|
|
@@ -275,6 +289,8 @@ class OodPackaging::Package
|
|
|
275
289
|
env = {
|
|
276
290
|
'DIST' => build_box.dist,
|
|
277
291
|
'PACKAGE' => package_name,
|
|
292
|
+
'VERSION' => version,
|
|
293
|
+
'TAR_NAME' => "#{tar_name}.tar.gz",
|
|
278
294
|
'GPG_SIGN' => gpg_sign,
|
|
279
295
|
'GPG_NAME' => gpg_name,
|
|
280
296
|
'SKIP_DOWNLOAD' => @config[:skip_download],
|
|
@@ -282,8 +298,6 @@ class OodPackaging::Package
|
|
|
282
298
|
'OOD_GID' => Process.gid,
|
|
283
299
|
'DEBUG' => debug
|
|
284
300
|
}
|
|
285
|
-
env['VERSION'] = rpm_version if build_box.rpm?
|
|
286
|
-
env['VERSION'] = deb_version if build_box.deb?
|
|
287
301
|
env['GPG_PUBKEY'] = '/gpg.pub' if @config[:gpg_pubkey]
|
|
288
302
|
env
|
|
289
303
|
end
|
data/lib/ood_packaging/tasks.rb
CHANGED
|
@@ -7,6 +7,14 @@ require 'ood_packaging/utils'
|
|
|
7
7
|
namespace :ood_packaging do
|
|
8
8
|
include OodPackaging::Utils
|
|
9
9
|
|
|
10
|
+
desc 'Set version'
|
|
11
|
+
task :version, [:version] do |_task, args|
|
|
12
|
+
version_file = File.join(proj_root, 'lib/ood_packaging/version.rb')
|
|
13
|
+
version = args[:version].gsub(/^v/, '')
|
|
14
|
+
sh "#{sed} -i -r \"s| VERSION =.*| VERSION = '#{version}'|g\" #{version_file}"
|
|
15
|
+
sh 'bundle install'
|
|
16
|
+
end
|
|
17
|
+
|
|
10
18
|
namespace :buildbox do
|
|
11
19
|
desc 'Build buildbox image'
|
|
12
20
|
task :build, [:dist] do |_task, args|
|
|
@@ -36,7 +44,7 @@ namespace :ood_packaging do
|
|
|
36
44
|
OodPackaging::RakeTask.new(:internal, [:package, :dist]) do |t, args|
|
|
37
45
|
name = args[:package].split(':').last
|
|
38
46
|
t.package = File.join(proj_root, 'packages', name)
|
|
39
|
-
t.dist = args[:dist]
|
|
47
|
+
t.dist = args[:dist] || ENV['OOD_PACKAGING_DIST']
|
|
40
48
|
t.version = OodPackaging.package_version(name, args[:dist])
|
|
41
49
|
t.work_dir = File.join(proj_root, 'tmp/work')
|
|
42
50
|
t.output_dir = File.join(proj_root, 'tmp/output')
|
data/lib/ood_packaging/utils.rb
CHANGED
|
@@ -15,6 +15,13 @@ module OodPackaging::Utils
|
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
def sed
|
|
19
|
+
@sed ||= begin
|
|
20
|
+
`which gsed 1>/dev/null 2>&1`
|
|
21
|
+
$CHILD_STATUS.success? ? 'gsed' : 'sed'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
18
25
|
def podman_runtime?
|
|
19
26
|
@podman_runtime ||= ENV['CONTAINER_RT'] == 'podman' || ENV['container'] == 'podman'
|
|
20
27
|
end
|
|
@@ -67,6 +74,10 @@ module OodPackaging::Utils
|
|
|
67
74
|
'/ondemand-packaging'
|
|
68
75
|
end
|
|
69
76
|
|
|
77
|
+
def ctr_gems_dir
|
|
78
|
+
File.join(ctr_scripts_dir, 'gems')
|
|
79
|
+
end
|
|
80
|
+
|
|
70
81
|
def gpg_private_key
|
|
71
82
|
File.join(ctr_scripts_dir, 'ondemand.sec')
|
|
72
83
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ood_packaging
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Trey Dockendorf
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2021-12-
|
|
12
|
+
date: 2021-12-29 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
@@ -94,10 +94,6 @@ files:
|
|
|
94
94
|
- lib/ood_packaging/tasks.rb
|
|
95
95
|
- lib/ood_packaging/utils.rb
|
|
96
96
|
- lib/ood_packaging/version.rb
|
|
97
|
-
- lib/tasks/package_utils.rb
|
|
98
|
-
- lib/tasks/packaging.rb
|
|
99
|
-
- lib/tasks/templates/Dockerfile.el.erb
|
|
100
|
-
- lib/tasks/templates/Dockerfile.ubuntu.erb
|
|
101
97
|
homepage: https://github.com/OSC/ondemand-packaging
|
|
102
98
|
licenses:
|
|
103
99
|
- MIT
|
|
@@ -113,9 +109,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
113
109
|
version: 2.2.0
|
|
114
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
111
|
requirements:
|
|
116
|
-
- - "
|
|
112
|
+
- - ">="
|
|
117
113
|
- !ruby/object:Gem::Version
|
|
118
|
-
version:
|
|
114
|
+
version: '0'
|
|
119
115
|
requirements: []
|
|
120
116
|
rubygems_version: 3.1.2
|
|
121
117
|
signing_key:
|
data/lib/tasks/package_utils.rb
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'English'
|
|
4
|
-
require 'erb'
|
|
5
|
-
require 'tempfile'
|
|
6
|
-
|
|
7
|
-
# Package utilities
|
|
8
|
-
module PackageUtils
|
|
9
|
-
def version
|
|
10
|
-
@version ||= if ENV['VERSION']
|
|
11
|
-
ENV['VERSION'].to_s
|
|
12
|
-
else
|
|
13
|
-
tag? ? git_tag : "#{git_tag}-#{git_hash}"
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def build_timestamp
|
|
18
|
-
@build_timestamp ||= Time.now.strftime('%s')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def git_hash
|
|
22
|
-
@git_hash ||= `git rev-parse HEAD`.strip[0..6]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def git_tag
|
|
26
|
-
@git_tag ||= `git describe --tags --abbrev=0`.chomp
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def numeric_tag
|
|
30
|
-
@numeric_tag ||= git_tag.delete_prefix('v')
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def tag?
|
|
34
|
-
@tag ||= `git describe --exact-match --tags HEAD 2>/dev/null`.to_s != ''
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def podman_runtime?
|
|
38
|
-
@podman_runtime ||= ENV['CONTAINER_RT'] == 'podman'
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def docker_runtime?
|
|
42
|
-
!podman_runtime?
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def container_runtime
|
|
46
|
-
podman_runtime? ? 'podman' : 'docker'
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def tar
|
|
50
|
-
@tar ||= begin
|
|
51
|
-
`which gtar 1>/dev/null 2>&1`
|
|
52
|
-
$CHILD_STATUS.success? ? 'gtar' : 'tar'
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def src_dir
|
|
57
|
-
ENV['OOD_SRC_DIR'] || '.'
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def user
|
|
61
|
-
@user ||= Etc.getpwnam(Etc.getlogin)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def build_dir(args)
|
|
65
|
-
@build_dir ||= "#{src_dir}/build/#{build_box_image(args).gsub(':', '-')}".tap { |d| sh "mkdir -p #{d}" }
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# TODO: continue vendor/ convention? Seems as good as any other name.
|
|
69
|
-
def vendor_src_dir
|
|
70
|
-
'vendor/ood/src'.tap { |p| sh "mkdir -p #{p}" }
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def vendor_build_dir
|
|
74
|
-
'vendor/ood/build'.tap { |p| sh "mkdir -p #{p}" }
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def dist_dir(args)
|
|
78
|
-
dist = args[:dist].to_s
|
|
79
|
-
version = args[:version].to_s
|
|
80
|
-
"dist/#{dist}#{version}"
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def known_images
|
|
84
|
-
{
|
|
85
|
-
'ubuntu-20.04': '1'
|
|
86
|
-
}.freeze
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def build_box_image(args)
|
|
90
|
-
base_name = "#{args[:dist]}-#{args[:version]}"
|
|
91
|
-
@version_lookup ||= Hash.new('1').merge(known_images)
|
|
92
|
-
|
|
93
|
-
"#{build_box_name}:#{base_name}-#{@version_lookup[base_name.to_sym]}"
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def build_box_name
|
|
97
|
-
ENV['OOD_BUILD_BOX'] || 'ood-buildbox'
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def image_exists?(image_name)
|
|
101
|
-
`#{container_runtime} inspect --type image --format exists #{image_name} || true`.chomp.eql?('exists')
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def build_cmd(file, image)
|
|
105
|
-
args = [container_runtime, 'build', '-t', image, '-f', file]
|
|
106
|
-
args.concat '.' if docker_runtime?
|
|
107
|
-
args.join(' ')
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def template_file(filename)
|
|
111
|
-
cwd = File.expand_path(__dir__).to_s
|
|
112
|
-
content = File.read("#{cwd}/templates/#{filename}")
|
|
113
|
-
content = ERB.new(content, trim_mode: '-').result(binding)
|
|
114
|
-
|
|
115
|
-
begin
|
|
116
|
-
t = Tempfile.new('ood-docker')
|
|
117
|
-
t.write(content)
|
|
118
|
-
t.path
|
|
119
|
-
ensure
|
|
120
|
-
t.close
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def ctr_home
|
|
125
|
-
"/home/#{ctr_user}"
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def ctr_user
|
|
129
|
-
'ood'
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def ctr_run_args
|
|
133
|
-
[
|
|
134
|
-
'--rm', '--user', "#{ctr_user}:#{ctr_user}",
|
|
135
|
-
'-e', 'LC_CTYPE=en_US.UTF-8'
|
|
136
|
-
].concat(rt_specific_flags)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def rt_specific_flags
|
|
140
|
-
if podman_runtime?
|
|
141
|
-
# SELinux doesn't like it if you're mounting from $HOME
|
|
142
|
-
['--security-opt', 'label=disable', '--userns=keep-id']
|
|
143
|
-
else
|
|
144
|
-
[]
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def arch
|
|
149
|
-
'x86_64'
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def spec_location
|
|
153
|
-
sf = Dir.glob('packaging/rpm/*.spec').first
|
|
154
|
-
raise StandardError, 'Cannot find spec file in packaging/rpm' if sf.nil?
|
|
155
|
-
|
|
156
|
-
sf
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
def spec_file
|
|
160
|
-
File.basename(spec_location)
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
def rpm_build_args
|
|
164
|
-
[git_tag_define, version_define, '-ba', '--nodeps', '-vv', spec_file]
|
|
165
|
-
|
|
166
|
-
# if git_prerelease_tag.size >= 2
|
|
167
|
-
# git_prerelease_verison = git_prerelease_tag[0]
|
|
168
|
-
# git_prerelease_verison = git_prerelease_verison[1..-1] if git_prerelease_verison.start_with?('v')
|
|
169
|
-
# version_define = "--define 'package_version #{git_prerelease_verison}'"
|
|
170
|
-
# if git_tag.size >= 2
|
|
171
|
-
# prerelease = git_prerelease_tag[1].gsub('-', '.')
|
|
172
|
-
# release_define = "--define 'package_release 0.#{prerelease}'"
|
|
173
|
-
# else
|
|
174
|
-
# release_define = "--define 'package_release 0.#{git_prerelease_tag[1]}.1'"
|
|
175
|
-
# end
|
|
176
|
-
# else
|
|
177
|
-
# version_define = "--define 'package_version #{git_tag_version}'"
|
|
178
|
-
# release_define = if git_tag.size >= 2
|
|
179
|
-
# "--define 'package_release #{git_tag[1]}'"
|
|
180
|
-
# else
|
|
181
|
-
# ''
|
|
182
|
-
# end
|
|
183
|
-
# end
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
def version_define
|
|
187
|
-
git_tag = version.split('-')
|
|
188
|
-
git_tag_version = git_tag[0]
|
|
189
|
-
git_tag_version = git_tag_version[1..] if git_tag_version.start_with?('v')
|
|
190
|
-
|
|
191
|
-
"--define 'package_version #{git_tag_version}'"
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def git_tag_define
|
|
195
|
-
"--define 'git_tag #{version}'"
|
|
196
|
-
end
|
|
197
|
-
end
|
data/lib/tasks/packaging.rb
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
desc 'Package OnDemand'
|
|
4
|
-
namespace :package do
|
|
5
|
-
require_relative 'package_utils'
|
|
6
|
-
include PackageUtils
|
|
7
|
-
|
|
8
|
-
desc 'Tar and zip OnDemand into packaging dir with version name v#<version>'
|
|
9
|
-
task :tar, [:output_dir] do |_task, args|
|
|
10
|
-
version = ENV['VERSION'] || ENV['CI_COMMIT_TAG']
|
|
11
|
-
version = version.gsub(/^v/, '') unless version.nil?
|
|
12
|
-
|
|
13
|
-
chdir src_dir do
|
|
14
|
-
unless version
|
|
15
|
-
latest_commit = `git rev-list --tags --max-count=1`.strip[0..6]
|
|
16
|
-
latest_tag = `git describe --tags #{latest_commit}`.strip[1..]
|
|
17
|
-
datetime = Time.now.strftime('%Y%m%d-%H%M')
|
|
18
|
-
version = "#{latest_tag}-#{datetime}-#{latest_commit}"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
dir = (args[:output_dir] || 'packaging/rpm').to_s.tap { |p| sh "mkdir -p #{p}" }
|
|
22
|
-
sh "git ls-files | #{tar} -c --transform 's,^,ondemand-#{version}/,' -T - | gzip > #{dir}/v#{version}.tar.gz"
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# TODO: refactor these 2 tar tasks. Debian and RHEL expect slightly different names and
|
|
27
|
-
# what's worse is the whole v prefixing mess
|
|
28
|
-
task :debian_tar, [:output_dir] do |_task, args|
|
|
29
|
-
dir = (args[:output_dir] || 'packaging').to_s.tap { |p| sh "mkdir -p #{p}" }
|
|
30
|
-
tar_file = "#{dir}/#{ood_package_tar}"
|
|
31
|
-
|
|
32
|
-
sh "rm #{tar_file}" if File.exist?(tar_file)
|
|
33
|
-
sh "git ls-files | #{tar} -c --transform 's,^,#{versioned_ood_package}/,' -T - | gzip > #{tar_file}"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
task :version do
|
|
37
|
-
puts package_version
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
task :deb, [:dist, :version] => [:build_box] do |_task, args|
|
|
41
|
-
dir = build_dir(args)
|
|
42
|
-
Rake::Task['package:debian_tar'].invoke(dir)
|
|
43
|
-
sh "#{tar} -xzf #{dir}/#{ood_package_tar} -C #{dir}"
|
|
44
|
-
|
|
45
|
-
work_dir = "/build/#{versioned_ood_package}"
|
|
46
|
-
|
|
47
|
-
base_args = ctr_run_args
|
|
48
|
-
base_args.concat ['-v', "#{dir}:/build", '-w', work_dir.to_s]
|
|
49
|
-
base_args.concat ['-e', "DEBUILD_DPKG_BUILDPACKAGE_OPTS='-us -uc -I -i'"]
|
|
50
|
-
base_args.concat ['-e', 'HOME=/home/ood', '-e', 'USER=ood']
|
|
51
|
-
base_args.concat ['-e', "VERSION=#{ENV['VERSION']}"] unless ENV['VERSION'].nil?
|
|
52
|
-
base_args.concat [build_box_image(args)]
|
|
53
|
-
sh "#{container_runtime} run #{base_args.join(' ')} debmake -b':ruby'"
|
|
54
|
-
|
|
55
|
-
debuild_args = ['debuild', '--no-lintian']
|
|
56
|
-
sh "#{container_runtime} run #{base_args.join(' ')} #{debuild_args.join(' ')}"
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
task :bootstrap_rpm, [:dist, :version] => [:verify_args] do |_task, args|
|
|
60
|
-
chdir src_dir do
|
|
61
|
-
build_dir(args).tap do |d|
|
|
62
|
-
src_dir = "#{d}/rpmbuild/SOURCES".tap { |s| sh "mkdir -p #{s}" }
|
|
63
|
-
dist_dir(args).tap { |dd| sh "mkdir -p #{dd}" }
|
|
64
|
-
Rake::Task['package:tar'].invoke(src_dir)
|
|
65
|
-
|
|
66
|
-
FileUtils.cp Dir.glob('packaging/rpm/*.{fc,te,ico,png,tar.gz}'), src_dir
|
|
67
|
-
FileUtils.cp spec_location, d
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
desc 'Build an RPM'
|
|
73
|
-
task :rpm, [:dist, :version] => [:build_box, :bootstrap_rpm] do |_task, args|
|
|
74
|
-
dir = build_dir(args)
|
|
75
|
-
image = build_box_image(args)
|
|
76
|
-
|
|
77
|
-
base_args = ctr_run_args
|
|
78
|
-
base_args.concat ['-v', "#{dir}:#{ctr_home}", '-w', "'#{ctr_home}'"]
|
|
79
|
-
base_args.concat ['-e', "HOME=#{ctr_home}"]
|
|
80
|
-
|
|
81
|
-
chdir src_dir do
|
|
82
|
-
sh "#{container_runtime} run #{base_args.join(' ')} #{image} rpmbuild #{rpm_build_args.join(' ')}"
|
|
83
|
-
FileUtils.cp Dir.glob("#{dir}/rpmbuild/RPMS/#{arch}/*.rpm"), dist_dir(args)
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
namespace :rpm do
|
|
88
|
-
desc 'Build nightly RPM'
|
|
89
|
-
task :nightly, [:dist, :extra_args] do |_task, args|
|
|
90
|
-
version_major, version_minor = git_tag.gsub(/^v/, '').split('.', 3)
|
|
91
|
-
date = Time.now.strftime('%Y%m%d')
|
|
92
|
-
id = ENV['CI_PIPELINE_ID'] || Time.now.strftime('%H%M%S')
|
|
93
|
-
ENV['VERSION'] = "#{version_major}.#{version_minor}.#{date}-#{id}.#{git_hash}.nightly"
|
|
94
|
-
Rake::Task['package:rpm'].invoke(args[:dist], args[:extra_args])
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
task :verify_args, [:dist, :version] do |_task, args|
|
|
99
|
-
raise 'Need to specify :dist and :version' if args[:dist].nil? || args[:version].nil?
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
desc 'Create buildbox for Open OnDemand'
|
|
103
|
-
task :build_box, [:dist, :version] => [:verify_args] do |_task, args|
|
|
104
|
-
cmd = build_cmd(
|
|
105
|
-
template_file("Dockerfile.#{args[:dist]}.erb"),
|
|
106
|
-
build_box_image(args)
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
sh cmd unless image_exists?(build_box_image(args))
|
|
110
|
-
end
|
|
111
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
FROM centos:8
|
|
2
|
-
|
|
3
|
-
# install all the dependencies
|
|
4
|
-
RUN dnf -y update
|
|
5
|
-
RUN dnf install -y dnf-utils
|
|
6
|
-
RUN dnf config-manager --set-enabled powertools
|
|
7
|
-
RUN dnf -y module enable nodejs:12 ruby:2.7
|
|
8
|
-
RUN dnf install -y \
|
|
9
|
-
make gcc gcc-c++ git rsync rpm-build redhat-rpm-config
|
|
10
|
-
RUN dnf install -y libselinux libselinux-devel
|
|
11
|
-
RUN dnf install -y selinux-policy selinux-policy-devel
|
|
12
|
-
RUN dnf install -y scl-utils
|
|
13
|
-
|
|
14
|
-
RUN dnf install -y https://yum.osc.edu/ondemand/latest/ondemand-release-web-latest-1-6.noarch.rpm
|
|
15
|
-
RUN dnf install -y \
|
|
16
|
-
ondemand-runtime ondemand-scldevel ondemand-build ondemand-ruby ondemand-python ondemand-nodejs
|
|
17
|
-
|
|
18
|
-
RUN dnf clean all && rm -rf /var/cache/dnf/*
|
|
19
|
-
|
|
20
|
-
RUN groupadd <%= ctr_user %> && \
|
|
21
|
-
useradd --create-home --gid <%= ctr_user %> <%= ctr_user %>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from ubuntu:20.04
|
|
2
|
-
|
|
3
|
-
ENV DEBIAN_FRONTEND=noninteractive
|
|
4
|
-
|
|
5
|
-
RUN apt update && \
|
|
6
|
-
apt install -y \
|
|
7
|
-
ruby=1:2.7+1 ruby-dev=1:2.7+1 \
|
|
8
|
-
nodejs npm \
|
|
9
|
-
make g++ gcc sqlite3 libsqlite3-dev \
|
|
10
|
-
debmake debhelper
|
|
11
|
-
|
|
12
|
-
RUN groupadd <%= ctr_user %> && \
|
|
13
|
-
useradd --create-home --gid <%= ctr_user %> <%= ctr_user %>
|
|
14
|
-
|
|
15
|
-
RUN ln -s /bin/bundle2.7 /bin/bundle
|