Skip to content

Commit 6931c1f

Browse files
authored
Merge pull request #101 from OpenVoxProject/deps
Change namespace, update versions, update build task
2 parents 42f8cee + 4e386c8 commit 6931c1f

File tree

9 files changed

+133
-63
lines changed

9 files changed

+133
-63
lines changed

.github/workflows/pr-testing.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
matrix:
1919
javaargs: ['with-profile fips', '']
2020
filter: [':singlethreaded', ':multithreaded']
21-
version: ['11', '17', '21']
21+
version: ['17', '21']
2222
exclude:
2323
- javaargs: 'with-profile fips'
2424
version: '21'
@@ -57,7 +57,7 @@ jobs:
5757
strategy:
5858
fail-fast: false
5959
matrix:
60-
java: ['11', '17', '21']
60+
java: ['17', '21']
6161
ruby: ['3.1', '3.2', '3.3', '3.4']
6262
steps:
6363
- name: checkout repo

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ FROM almalinux:9
22

33
WORKDIR /
44

5-
RUN dnf install -y --enablerepo=crb vim wget git rpm-build java-11-openjdk java-11-openjdk-devel libyaml-devel zlib zlib-devel gcc-c++ patch readline readline-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison sqlite-devel
5+
RUN dnf install -y --enablerepo=crb vim wget git rpm-build java-17-openjdk java-17-openjdk-devel libyaml-devel zlib zlib-devel gcc-c++ patch readline readline-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison sqlite-devel
66
RUN wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein
77
RUN chmod a+x lein
88
RUN mv lein /usr/local/bin
99
RUN wget -q https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer -O- | bash
1010
# todo: it would be great if we could get the used ruby version from openvox-agent and use it here
1111
# and maybe don't randomly download rbenv and leiningen
1212
# and how bad is it that we hardcode java 11 above?
13-
RUN /bin/bash --login -c 'rbenv install 3.2.8'
14-
RUN /bin/bash --login -c 'rbenv global 3.2.8'
13+
RUN /bin/bash --login -c 'rbenv install 3.2.9'
14+
RUN /bin/bash --login -c 'rbenv global 3.2.9'
1515
RUN git config --global user.email "openvox@voxpupuli.org"
1616
RUN git config --global user.name "Vox Pupuli"
1717
RUN git config --global --add safe.directory /code

project.clj

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(def ps-version "8.11.1-SNAPSHOT")
1+
(def ps-version "8.12.0-SNAPSHOT")
22

33
(def heap-size-from-profile-clj
44
(let [profile-clj (io/file (System/getenv "HOME") ".lein" "profiles.clj")]
@@ -15,15 +15,15 @@
1515
heap-size-from-profile-clj
1616
default-heap-size))
1717

18-
(defproject puppetlabs/puppetserver ps-version
18+
(defproject org.openvoxproject/puppetserver ps-version
1919
:description "OpenVox Server"
2020

2121
:license {:name "Apache License, Version 2.0"
2222
:url "http://www.apache.org/licenses/LICENSE-2.0.html"}
2323

2424
:min-lein-version "2.9.1"
2525

26-
:parent-project {:coords [puppetlabs/clj-parent "7.3.35"]
26+
:parent-project {:coords [org.openvoxproject/clj-parent "7.5.1"]
2727
:inherit [:managed-dependencies]}
2828

2929
:dependencies [[org.clojure/clojure]
@@ -46,24 +46,24 @@
4646
;; send their logs to logstash, so we include it in the jar.
4747
[net.logstash.logback/logstash-logback-encoder]
4848

49-
[puppetlabs/jruby-utils]
50-
[puppetlabs/clj-shell-utils]
51-
[puppetlabs/trapperkeeper]
52-
[com.puppetlabs/trapperkeeper-webserver-jetty10]
53-
[puppetlabs/trapperkeeper-authorization]
54-
[puppetlabs/trapperkeeper-comidi-metrics]
55-
[puppetlabs/trapperkeeper-metrics]
56-
[puppetlabs/trapperkeeper-scheduler]
57-
[puppetlabs/trapperkeeper-status]
58-
[puppetlabs/trapperkeeper-filesystem-watcher]
59-
[puppetlabs/kitchensink]
60-
[puppetlabs/ssl-utils]
61-
[puppetlabs/ring-middleware]
62-
[puppetlabs/dujour-version-check]
63-
[puppetlabs/http-client]
64-
[puppetlabs/comidi]
65-
[puppetlabs/i18n]
66-
[puppetlabs/rbac-client]]
49+
[org.openvoxproject/jruby-utils]
50+
[org.openvoxproject/clj-shell-utils]
51+
[org.openvoxproject/trapperkeeper]
52+
[org.openvoxproject/trapperkeeper-webserver-jetty10]
53+
[org.openvoxproject/trapperkeeper-authorization]
54+
[org.openvoxproject/trapperkeeper-comidi-metrics]
55+
[org.openvoxproject/trapperkeeper-metrics]
56+
[org.openvoxproject/trapperkeeper-scheduler]
57+
[org.openvoxproject/trapperkeeper-status]
58+
[org.openvoxproject/trapperkeeper-filesystem-watcher]
59+
[org.openvoxproject/kitchensink]
60+
[org.openvoxproject/ssl-utils]
61+
[org.openvoxproject/ring-middleware]
62+
[org.openvoxproject/dujour-version-check]
63+
[org.openvoxproject/http-client]
64+
[org.openvoxproject/comidi]
65+
[org.openvoxproject/i18n]
66+
[org.openvoxproject/rbac-client]]
6767

6868
:main puppetlabs.trapperkeeper.main
6969

@@ -75,7 +75,7 @@
7575
:test-paths ["test/unit" "test/integration"]
7676
:resource-paths ["resources" "src/ruby"]
7777

78-
:deploy-repositories [["clojars" {:url "https://clojars.org/repo"
78+
:deploy-repositories [["releases" {:url "https://clojars.org/repo"
7979
:username :env/CLOJARS_USERNAME
8080
:password :env/CLOJARS_PASSWORD
8181
:sign-releases false}]]
@@ -84,7 +84,7 @@
8484
[jonase/eastwood "1.4.3" :exclusions [org.clojure/clojure]]
8585
;; We have to have this, and it needs to agree with clj-parent
8686
;; until/unless you can have managed plugin dependencies.
87-
[puppetlabs/i18n "0.9.2" :hooks false]]
87+
[org.openvoxproject/i18n "0.9.4" :hooks false]]
8888

8989
:uberjar-name "puppet-server-release.jar"
9090
:lein-ezbake {:vars {:user "puppet"
@@ -114,15 +114,15 @@
114114

115115
:profiles {:defaults {:source-paths ["dev"]
116116
:dependencies [[org.clojure/tools.namespace]
117-
[com.puppetlabs/trapperkeeper-webserver-jetty10 :classifier "test"]
118-
[puppetlabs/trapperkeeper nil :classifier "test" :scope "test"]
119-
[puppetlabs/trapperkeeper-metrics :classifier "test" :scope "test"]
120-
[puppetlabs/kitchensink nil :classifier "test" :scope "test"]
117+
[org.openvoxproject/trapperkeeper-webserver-jetty10 :classifier "test"]
118+
[org.openvoxproject/trapperkeeper nil :classifier "test" :scope "test"]
119+
[org.openvoxproject/trapperkeeper-metrics :classifier "test" :scope "test"]
120+
[org.openvoxproject/kitchensink nil :classifier "test" :scope "test"]
121121
[ring-basic-authentication]
122122
[ring/ring-mock]
123123
[beckon]
124124
[lambdaisland/uri "1.19.155"]
125-
[puppetlabs/rbac-client :classifier "test" :scope "test"]]}
125+
[org.openvoxproject/rbac-client :classifier "test" :scope "test"]]}
126126
:dev-deps {:dependencies [[org.bouncycastle/bcpkix-jdk18on]]}
127127
:dev [:defaults :dev-deps]
128128
:fips-deps {:dependencies [[org.bouncycastle/bcpkix-fips]
@@ -167,14 +167,14 @@
167167
;; specified in both places. TODO: fix this.
168168
[org.clojure/clojure]
169169
[org.bouncycastle/bcpkix-jdk18on]
170-
[puppetlabs/jruby-utils]
171-
[puppetlabs/puppetserver ~ps-version]
172-
[com.puppetlabs/trapperkeeper-webserver-jetty10]
173-
[puppetlabs/trapperkeeper-metrics]]
174-
:plugins [[puppetlabs/lein-ezbake ~(or (System/getenv "EZBAKE_VERSION") "3.0.1-SNAPSHOT")]]
170+
[org.openvoxproject/jruby-utils]
171+
[org.openvoxproject/puppetserver ~ps-version]
172+
[org.openvoxproject/trapperkeeper-webserver-jetty10]
173+
[org.openvoxproject/trapperkeeper-metrics]]
174+
:plugins [[org.openvoxproject/lein-ezbake ~(or (System/getenv "EZBAKE_VERSION") "2.7.1")]]
175175
:name "puppetserver"}
176176
:uberjar {:dependencies [[org.bouncycastle/bcpkix-jdk18on]
177-
[com.puppetlabs/trapperkeeper-webserver-jetty10]]
177+
[org.openvoxproject/trapperkeeper-webserver-jetty10]]
178178
:aot [puppetlabs.trapperkeeper.main
179179
puppetlabs.trapperkeeper.services.status.status-service
180180
puppetlabs.trapperkeeper.services.metrics.metrics-service
@@ -266,4 +266,3 @@
266266
(fn [new prev]
267267
(if (map? prev) [new prev] (conj prev new)))
268268
#(spit %1 (pr-str %2))]})
269-

src/clj/puppetlabs/services/ca/certificate_authority_service.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
(ca/generate-infra-serials! settings))))
9898
(register-status
9999
"ca"
100-
(status-core/get-artifact-version "puppetlabs" "puppetserver")
100+
(status-core/get-artifact-version "org.openvoxproject" "puppetserver")
101101
1
102102
core/v1-status)
103103
(assoc context :auth-handler auth-handler

src/clj/puppetlabs/services/jruby/jruby_metrics_service.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
{:default-metrics-allowed default-metrics-allowed})
6161
(register-status
6262
"jruby-metrics"
63-
(status-core/get-artifact-version "puppetlabs" "puppetserver")
63+
(status-core/get-artifact-version "org.openvoxproject" "puppetserver")
6464
jruby-metrics-service-status-version
6565
(partial jruby-metrics-core/v1-status metrics))
6666
(assoc context :metrics metrics)))

src/clj/puppetlabs/services/master/master_service.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,12 @@
192192

193193
(register-status
194194
"master"
195-
(status-core/get-artifact-version "puppetlabs" "puppetserver")
195+
(status-core/get-artifact-version "org.openvoxproject" "puppetserver")
196196
master-service-status-version
197197
(partial master-core/v1-status http-metrics http-client-metric-ids-for-status registry))
198198
(register-status
199199
"server"
200-
(status-core/get-artifact-version "puppetlabs" "puppetserver")
200+
(status-core/get-artifact-version "org.openvoxproject" "puppetserver")
201201
master-service-status-version
202202
(partial master-core/v1-status http-metrics http-client-metric-ids-for-status registry))
203203
(-> context

src/clj/puppetlabs/services/puppet_profiler/puppet_profiler_service.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
{:default-metrics-allowed default-metrics-allowed})
3939
(register-status
4040
"puppet-profiler"
41-
(status-core/get-artifact-version "puppetlabs" "puppetserver")
41+
(status-core/get-artifact-version "org.openvoxproject" "puppetserver")
4242
1
4343
(partial puppet-profiler-core/v1-status (:profiler context)))
4444
context))

tasks/build.rake

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,38 @@ require 'tmpdir'
1313
# To be fixed one of these days. Relevant stuff:
1414
# https://github.com/puppetlabs/ezbake/blob/aeb7735a16d2eecd389a6bd9e5c0cfc7c62e61a5/resources/puppetlabs/lein-ezbake/template/global/tasks/build.rake
1515
# https://github.com/puppetlabs/ezbake/blob/aeb7735a16d2eecd389a6bd9e5c0cfc7c62e61a5/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb
16-
deb_platforms = ENV['DEB_PLATFORMS'] || 'ubuntu-18.04,ubuntu-20.04,ubuntu-22.04,ubuntu-24.04,debian-10,debian-11,debian-12'
17-
rpm_platforms = ENV['RPM_PLATFORMS'] || 'el-7,el-8,el-9,el-10,sles-15,amazon-2023'
16+
deb_platforms = ENV['DEB_PLATFORMS'] || 'ubuntu-20.04,ubuntu-22.04,ubuntu-24.04,ubuntu-25.04,debian-11,debian-12,debian-13'
17+
rpm_platforms = ENV['RPM_PLATFORMS'] || 'el-8,el-9,el-10,sles-15,sles-16,amazon-2,amazon-2023,fedora-42,fedora-43'
1818
@debs = deb_platforms.split(',').map{ |p| "base-#{p.split('-').join}-i386.cow" }.join(' ')
1919
@rpms = rpm_platforms.split(',').map{ |p| "pl-#{p}-x86_64" }.join(' ')
2020

21+
# The deps must be built in this order due to dependencies between them.
22+
# There is a circular dependency between clj-http-client and trapperkeeper-webserver-jetty10,
23+
# but only for tests, so the build *should* work.
24+
DEP_BUILD_ORDER = [
25+
'clj-parent',
26+
'clj-kitchensink',
27+
'clj-i18n',
28+
'comidi',
29+
'jvm-ssl-utils',
30+
'clj-typesafe-config',
31+
'jruby-deps',
32+
'trapperkeeper',
33+
'trapperkeeper-filesystem-watcher',
34+
'trapperkeeper-webserver-jetty10',
35+
'ring-middleware',
36+
'jruby-utils',
37+
'clj-shell-utils',
38+
'clj-http-client',
39+
'dujour-version-check',
40+
'clj-rbac-client',
41+
'trapperkeeper-authorization',
42+
'trapperkeeper-metrics',
43+
'trapperkeeper-scheduler',
44+
'trapperkeeper-status',
45+
'trapperkeeper-comidi-metrics',
46+
].freeze
47+
2148
def image_exists
2249
!`docker images -q #{@image}`.strip.empty?
2350
end
@@ -35,7 +62,7 @@ def teardown
3562
end
3663

3764
def start_container(ezbake_dir)
38-
run_command("docker run -d --name #{@container} -v .:/code -v #{ezbake_dir}:/ezbake #{@image} /bin/sh -c 'tail -f /dev/null'", silent: false, print_command: true)
65+
run_command("docker run -d --name #{@container} -v .:/code -v #{ezbake_dir}:/deps #{@image} /bin/sh -c 'tail -f /dev/null'", silent: false, print_command: true)
3966
end
4067

4168
def run(cmd)
@@ -61,24 +88,60 @@ namespace :vox do
6188
run_command("docker build -t ezbake-builder .", silent: false, print_command: true)
6289
end
6390

64-
puts "Checking out ezbake"
65-
tmp = Dir.mktmpdir("ezbake")
66-
ezbake_dir = "#{tmp}/ezbake"
67-
ezbake_repo = ENV.fetch('EZBAKE_REPO', 'https://github.com/openvoxproject/ezbake')
68-
ezbake_branch = ENV['EZBAKE_BRANCH'] || 'main'
69-
run_command("git clone -b #{ezbake_branch} #{ezbake_repo} #{ezbake_dir}", silent: false, print_command: true)
91+
libs_to_build_manually = {}
92+
if ENV['EZBAKE_BRANCH'] && !ENV['EZBAKE_BRANCH'].strip.empty?
93+
libs_to_build_manually['ezbake'] = {
94+
:repo => ENV.fetch('EZBAKE_REPO', 'https://github.com/openvoxproject/ezbake'),
95+
:branch => ENV.fetch('EZBAKE_BRANCH', 'main'),
96+
}
97+
end
98+
99+
deps_to_build = []
100+
dep_branch = nil
101+
102+
full_rebuild_branch = ENV['FULL_DEP_REBUILD_BRANCH']
103+
subset_list = (ENV['DEP_REBUILD'] || '').split(',').map(&:strip).reject(&:empty?)
104+
subset_branch = ENV.fetch('DEP_REBUILD_BRANCH', 'main').to_s
105+
rebuild_org = ENV.fetch('DEP_REBUILD_ORG', 'openvoxproject').to_s
106+
107+
if full_rebuild_branch && !full_rebuild_branch.strip.empty?
108+
dep_branch = full_rebuild_branch.strip
109+
deps_to_build = DEP_BUILD_ORDER.dup
110+
elsif !subset_list.empty?
111+
dep_branch = subset_branch
112+
unknown = subset_list.reject { |lib| DEP_BUILD_ORDER.include?(lib) }
113+
puts "WARNING: Unknown deps in DEP_REBUILD (will be ignored): #{unknown.join(', ')}" unless unknown.empty?
114+
deps_to_build = DEP_BUILD_ORDER.select { |lib| subset_list.include?(lib) }
115+
end
116+
117+
deps_to_build.each do |lib|
118+
libs_to_build_manually[lib] = {
119+
:repo => "https://github.com/#{rebuild_org}/#{lib}",
120+
:branch => dep_branch,
121+
}
122+
end
123+
124+
deps_tmp = Dir.mktmpdir("deps")
125+
126+
libs_to_build_manually.each do |lib, config|
127+
puts "Checking out #{lib}"
128+
run_command("git clone -b #{config[:branch]} #{config[:repo]} #{deps_tmp}/#{lib}", silent: false, print_command: true)
129+
end
70130

71131
puts "Starting container"
72132
teardown if container_exists
73-
start_container(ezbake_dir)
133+
start_container(deps_tmp)
74134

75-
puts "Installing ezbake from source"
76-
run("cd /ezbake && lein install")
135+
libs_to_build_manually.each do |lib, _|
136+
puts "Building and installing #{lib} from source"
137+
run("cd /deps/#{lib} && lein install")
138+
end
77139

140+
fips = !ENV['FIPS'].nil?
78141
puts "Building openvox-server"
79142
ezbake_version_var = ENV['EZBAKE_VERSION'] ? "EZBAKE_VERSION=#{ENV['EZBAKE_VERSION']}" : ''
80143
run("cd /code && rm -rf ruby && rm -rf output && bundle install --without test && lein install")
81-
run("cd /code && COW=\"#{@debs}\" MOCK=\"#{@rpms}\" GEM_SOURCE='https://rubygems.org' #{ezbake_version_var} EZBAKE_ALLOW_UNREPRODUCIBLE_BUILDS=true EZBAKE_NODEPLOY=true LEIN_PROFILES=ezbake lein with-profile user,ezbake,provided,internal ezbake local-build")
144+
run("cd /code && COW=\"#{@debs}\" MOCK=\"#{@rpms}\" GEM_SOURCE='https://rubygems.org' #{ezbake_version_var} EZBAKE_ALLOW_UNREPRODUCIBLE_BUILDS=true EZBAKE_NODEPLOY=true LEIN_PROFILES=ezbake lein with-profile #{fips ? 'fips,' : ''}user,ezbake,provided,internal ezbake local-build")
82145
run_command("sudo chown -R $USER output", print_command: true)
83146
Dir.glob('output/**/*i386*').each { |f| FileUtils.rm_rf(f) }
84147
Dir.glob('output/puppetserver-*.tar.gz').each { |f| FileUtils.mv(f, f.sub('puppetserver','openvox-server'))}

tasks/upload.rake

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace :vox do
22
desc 'Upload artifacts from the output directory to S3. Requires the AWS CLI to be installed and configured appropriately.'
3-
task :upload, [:tag, :platform] do |_, args|
3+
task :upload, [:platform] do |_, args|
44
endpoint = ENV.fetch('ENDPOINT_URL')
55
bucket = ENV.fetch('BUCKET_NAME')
66
component = 'openvox-server'
@@ -14,23 +14,31 @@ namespace :vox do
1414

1515
abort 'You must set the ENDPOINT_URL environment variable to the S3 server you want to upload to.' if endpoint.nil? || endpoint.empty?
1616
abort 'You must set the BUCKET_NAME environment variable to the S3 bucket you are uploading to.' if bucket.nil? || bucket.empty?
17-
abort 'You must provide a tag.' if args[:tag].nil? || args[:tag].empty?
1817

19-
munged_tag = args[:tag].gsub('-', '.')
2018
s3 = "aws s3 --endpoint-url=#{endpoint}"
2119

2220
# Ensure the AWS CLI isn't going to fail with the given parameters
2321
run_command("#{s3} ls s3://#{bucket}/")
2422

25-
glob = "#{__dir__}/../output/**/*#{munged_tag}*"
23+
config = File.expand_path("../target/staging/ezbake.rb", __dir__)
24+
abort "Could not find ezbake config from the build at #{config}" unless File.exist?(config)
25+
load config
26+
version = EZBake::Config.fetch(:version)
27+
release = EZBake::Config.fetch(:release)
28+
# If release is a digit, then we built a tagged version. Otherwise,
29+
# we built a snapshot and want to include that in the path to upload to.
30+
tag = release =~ /^\d{1,2}$/ ? version : "#{version}-#{release}"
31+
32+
33+
glob = "#{__dir__}/../output/**/*#{tag}*"
2634
if os
2735
# "arch" is not used here because it's all noarch
2836
glob += "#{os}*"
2937
end
3038
files = Dir.glob(glob)
3139
abort 'No files for the given tag found in the output directory.' if files.empty?
3240

33-
path = "s3://#{bucket}/#{component}/#{args[:tag]}"
41+
path = "s3://#{bucket}/#{component}/#{tag}"
3442
files.each do |f|
3543
run_command("#{s3} cp #{f} #{path}/#{File.basename(f)}", silent: false)
3644
end

0 commit comments

Comments
 (0)