ood_packaging 0.0.1.rc.5 → 0.0.1.rc.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 238830f795de725da1420192e4100403ca9b7ab54d579db94be2044b539832a5
4
- data.tar.gz: 67a5fa07e2a32d23ca92e4c56bd246823b0c24c6cb8299412b33021b4d5817c8
3
+ metadata.gz: 774e160312368cf79021df01d8aaf851b6f4efd7ef23890a2f02b4edb5cb6202
4
+ data.tar.gz: 4f169c7948828b5f870e2a0d7a05dc04f95c73b62b0fd40fe7260238c9a7417f
5
5
  SHA512:
6
- metadata.gz: ff7fc7dbb44fff8f70fcee969247cbd3df192da97daa9304a86a79b8d72e18bfb46eea13b86313fe234860c7f2a492478f1daa7e64a9ecf8d761085cfa2077cc
7
- data.tar.gz: aaf0c73578f457acdaf05215a6e4e8448529ae5bfa5842b0243ece71f081e17c735e90299e600752ae12bd4d349f9c748e85fade5ea9ec27093e677b8ce95fb7
6
+ metadata.gz: fe2cc99020a235d8cfa3caffb25e26f1ef23f8454d5278093780406e37d669e9f76af2f3c2a70cab350f9c75821f5f70fddc675563569fb0b8bc618d9e4d2758
7
+ data.tar.gz: 45ec1cc23b9cfdc63a2c47cb077ac153bae08facb4e5d7a5486d359c5f844dd5ac1b190d6fb33ba17f17cc3ab076fed9fc5e3b00246fb9c2f17c2ce003fb29dc
@@ -130,6 +130,7 @@ class OodPackaging::Build
130
130
  end
131
131
 
132
132
  def run!
133
+ fix_env!
133
134
  env_dump! if debug?
134
135
  bootstrap_rpm! if build_box.rpm?
135
136
  bootstrap_deb! if build_box.deb?
@@ -141,6 +142,10 @@ class OodPackaging::Build
141
142
  sanity!
142
143
  end
143
144
 
145
+ def fix_env!
146
+ ENV.delete('GEM_PATH')
147
+ end
148
+
144
149
  def env_dump!
145
150
  ENV.sort.to_h.each_pair do |k, v|
146
151
  puts "#{k}=#{v}"
@@ -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"
@@ -157,7 +157,7 @@ class OodPackaging::Package
157
157
  cmd = []
158
158
  cmd.concat exec_launchers if docker_runtime?
159
159
  cmd.concat ['scl', 'enable', scl_ruby, '--'] if podman_runtime? && build_box.scl?
160
- cmd.concat ['rake']
160
+ cmd.concat [File.join(ctr_scripts_dir, 'rake')]
161
161
  cmd.concat ['-q'] unless debug
162
162
  cmd.concat ['-f', File.join(ctr_scripts_dir, 'Rakefile'), 'ood_packaging:package:build']
163
163
  cmd
@@ -67,6 +67,10 @@ module OodPackaging::Utils
67
67
  '/ondemand-packaging'
68
68
  end
69
69
 
70
+ def ctr_gems_dir
71
+ File.join(ctr_scripts_dir, 'gems')
72
+ end
73
+
70
74
  def gpg_private_key
71
75
  File.join(ctr_scripts_dir, 'ondemand.sec')
72
76
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Version code for OodPackaging
4
4
  module OodPackaging
5
- VERSION = '0.0.1.rc.5'
5
+ VERSION = '0.0.1.rc.6'
6
6
  PACKAGE_VERSION = {
7
7
  'ondemand-release' => {
8
8
  '(ubuntu|debian)' => '2.1.0',
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.0.1.rc.5
4
+ version: 0.0.1.rc.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trey Dockendorf
@@ -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
@@ -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
@@ -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