@@ -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+
2148def image_exists
2249 !`docker images -q #{ @image } ` . strip . empty?
2350end
@@ -35,7 +62,7 @@ def teardown
3562end
3663
3764def 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 )
3966end
4067
4168def 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' ) ) }
0 commit comments