7474 - all
7575
7676jobs :
77+ set-variants-matrix :
78+ name : Set variants matrix
79+ runs-on : ubuntu-24.04
80+ outputs :
81+ matrix : ${{ steps.set-matrix.outputs.matrix }}
82+ steps :
83+ - name : Set matrix
84+ id : set-matrix
85+ run : |
86+ # ELevate matrix is json array of string elements like:
87+ # ["centos 7 to almalinux 8", "almalinux 8 to almalinux 9", ...]
88+ matrix=
89+
90+ # AlmaLinux variants
91+ if [ "${{ inputs.almalinux }}" = "true" ]; then
92+ if [ "${{ inputs.to8 }}" = "true" ]; then
93+ VARIANTS+=("centos 7 to almalinux 8")
94+ VARIANTS+=("scientific 7 to almalinux 8")
95+ fi
96+ if [ "${{ inputs.to9 }}" = "true" ]; then
97+ VARIANTS+=("almalinux 8 to almalinux 9")
98+ fi
99+ if [ "${{ inputs.to10 }}" = "true" ]; then
100+ # ELevation to AlmaLinux 10 is available for testing and NG repositories
101+ [[ "${{ inputs.repository }}" == *"testing"* || "${{ inputs.repository }}" == *"NG"* ]] && \
102+ VARIANTS+=("almalinux 9 to almalinux 10")
103+ # ELevation to AlmaLinux Kitten 10 is available for NG repository
104+ [[ "${{ inputs.repository }}" == *"NG"* ]] && \
105+ VARIANTS+=("almalinux 9 to almalinux-kitten 10")
106+ fi
107+ fi
108+
109+ # CentOS variants
110+ if [ "${{ inputs.centos }}" = "true" ]; then
111+ if [ "${{ inputs.to8 }}" = "true" ]; then
112+ VARIANTS+=("centos 7 to centos 8")
113+ fi
114+ if [ "${{ inputs.to9 }}" = "true" ]; then
115+ VARIANTS+=("centos 8 to centos 9")
116+ fi
117+ if [ "${{ inputs.to10 }}" = "true" ]; then
118+ # ELevation to CentOS Stream 10 is available for testing and NG repositories
119+ [[ "${{ inputs.repository }}" == *"testing"* || "${{ inputs.repository }}" == *"NG"* ]] && \
120+ VARIANTS+=("centos 9 to centos 10")
121+ fi
122+ fi
123+
124+ # Oracle Linux variants
125+ if [ "${{ inputs.oraclelinux }}" = "true" ]; then
126+ if [ "${{ inputs.to8 }}" = "true" ]; then
127+ VARIANTS+=("centos 7 to oraclelinux 8")
128+ fi
129+ fi
130+
131+ # Rocky Linux variants
132+ if [ "${{ inputs.rocky }}" = "true" ]; then
133+ if [ "${{ inputs.to8 }}" = "true" ]; then
134+ VARIANTS+=("centos 7 to rocky 8")
135+ fi
136+ if [ "${{ inputs.to9 }}" = "true" ]; then
137+ VARIANTS+=("rocky 8 to rocky 9")
138+ fi
139+ fi
140+
141+ [ ${#VARIANTS[@]} -ne 0 ] && matrix=$(printf '"%s",' "${VARIANTS[@]}")
142+ matrix=${matrix%,} # Remove the trailing comma
143+ echo matrix=$(jq -c <<< [${matrix}]) >> $GITHUB_OUTPUT
144+
77145 elevate :
78- name : from ${{ matrix.scenario == '8' && (contains(matrix.distro, 'scientific') && 'scientific 7' || 'centos 7') || (format('{0} {1}', ( contains(matrix.distro, 'almalinux-kitten') && 'almalinux' || matrix.distro ), ( matrix.scenario == '9' && '8' || ( (matrix.distro != 'false' && matrix.scenario != '') && '9' || matrix.scenario) ) )) }} to ${{ contains(matrix.distro, 'scientific') && 'almalinux' || matrix.distro}} ${{ matrix.scenario }}
146+ name : ${{ matrix.VARIANT }}
79147 runs-on : ubuntu-24.04
148+ needs : [set-variants-matrix]
149+ # Skip the job if the matrix is empty
150+ if : ${{ needs.set-variants-matrix.outputs.matrix != '[]' }}
80151 strategy :
81152 fail-fast : false
82153 matrix :
83- # Set distro+scenario+repository matrix based on boolean inputs.* with true value
84- distro : ${{ fromJSON(format('["{0}", "{1}", "{2}", "{3}"]', ( inputs.almalinux && 'almalinux", "almalinux-kitten", "scientific' || 'false'), ( inputs.centos && 'centos' ), ( inputs.oraclelinux && 'oraclelinux' ), ( inputs.rocky && 'rocky' ) )) }}
85- scenario : ${{ fromJSON(format('["{0}", "{1}", "{2}"]', ( inputs.to8 && '8' ), ( inputs.to9 && '9' ), ( inputs.to10 && '10' ) )) }}
86- repository : ${{ fromJSON(format('["{0}"]', inputs.repository )) }}
87- exclude :
88- - distro : ' false'
89- - scenario : ' false'
90- - repository : ' false'
91- # ELevation to 9 is not available for: oraclelinux, scientific
92- - distro : ' oraclelinux'
93- scenario : ' 9'
94- - distro : ' scientific'
95- scenario : ' 9'
96- # ELevation to 10 is not available for: oraclelinux, scientific, rocky
97- - distro : ' oraclelinux'
98- scenario : ' 10'
99- - distro : ' rocky'
100- scenario : ' 10'
101- - distro : ' scientific'
102- scenario : ' 10'
103- # For almalinux-kitten ELevation is available if 9 to 10
104- - distro : ' almalinux-kitten'
105- scenario : ' 8'
106- - distro : ' almalinux-kitten'
107- scenario : ' 9'
108- # TODO: ELevate to 10: skip stable repositories
109- - scenario : ' 10'
110- repository : ' stable'
111- - scenario : ' 10'
112- repository : ' stable (ALBS product)'
113- # TODO: ELevate to almalinux-kitten: skip all except 'NG (ALBS product)' repository
114- - distro : ' almalinux-kitten'
115- repository : ' stable'
116- - distro : ' almalinux-kitten'
117- repository : ' stable (ALBS product)'
118- - distro : ' almalinux-kitten'
119- repository : ' testing'
120- - distro : ' almalinux-kitten'
121- repository : ' testing (ALBS product)'
154+ VARIANT : ${{ fromJSON(needs.set-variants-matrix.outputs.matrix) }}
122155
123156 env :
124157 vm_serial_log : ' /var/log/elevatevm_consoles/serial.log'
@@ -129,53 +162,33 @@ jobs:
129162
130163 - name : Prepare some environment variables
131164 run : |
132- # Source and target systems
133- case ${{ matrix.scenario }} in
134- 8)
135- source_release=7
136- source_distro=centos
137- [ "${{ matrix.distro }}" = "scientific" ] && source_distro=scientific
138- ;;
139- 9)
140- source_release=8
141- source_distro=${{ matrix.distro }}
142- ;;
143- 10)
144- source_release=9
145- source_distro=${{ matrix.distro }}
146- [ "${{ matrix.distro }}" = "almalinux-kitten" ] && source_distro=almalinux
147- ;;
148- esac
149- variant=el${source_release}toel${{ matrix.scenario }}
150- target_distro=${{ matrix.distro }}
165+ # Read source and target systems
166+ read -r source_distro source_release to target_distro target_release <<<"${{ matrix.VARIANT }}"
151167
152168 # Target system release file, string and Vagrant image
153- target_release_file=/etc/${{ matrix.distro } }-release
154- case ${{ matrix.distro } } in
155- almalinux|scientific )
169+ target_release_file=/etc/${target_distro }-release
170+ case ${target_distro } in
171+ almalinux)
156172 vm_box=almalinux/${source_release}
157- target_distro=almalinux
158- target_release_string="AlmaLinux release ${{ matrix.scenario }}"
159- target_release_file=/etc/almalinux-release
173+ target_release_string="AlmaLinux release ${target_release}"
160174 ;;
161175 almalinux-kitten )
162176 vm_box=almalinux/${source_release}
163- target_distro=almalinux-kitten
164- target_release_string="AlmaLinux Kitten release ${{ matrix.scenario }}"
177+ target_release_string="AlmaLinux Kitten release ${target_release}"
165178 target_release_file=/etc/almalinux-release
166179 ;;
167180 centos )
168181 vm_box=eurolinux-vagrant/centos-stream-${source_release} # generic/centos8s
169- target_release_string="CentOS Stream release ${{ matrix.scenario } }"
182+ target_release_string="CentOS Stream release ${target_release }"
170183 ;;
171184 oraclelinux )
172185 vm_box=eurolinux-vagrant/oracle-linux-${source_release} # generic/oracle8
173- target_release_string="Oracle Linux Server release ${{ matrix.scenario } }"
186+ target_release_string="Oracle Linux Server release ${target_release }"
174187 target_release_file=/etc/oracle-release
175188 ;;
176189 rocky )
177190 vm_box=eurolinux-vagrant/rocky-${source_release} # generic/rocky8
178- target_release_string="Rocky Linux release ${{ matrix.scenario } }"
191+ target_release_string="Rocky Linux release ${target_release }"
179192 ;;
180193 esac
181194 if [ "${source_release}" = "7" ]; then
@@ -187,10 +200,11 @@ jobs:
187200
188201 echo "target_release_string=${target_release_string}" >> $GITHUB_ENV
189202 echo "target_release_file=${target_release_file}" >> $GITHUB_ENV
203+ echo "target_release=${target_release}" >> $GITHUB_ENV
204+ echo "target_distro=${target_distro}" >> $GITHUB_ENV
190205 echo "source_release=${source_release}" >> $GITHUB_ENV
191206 echo "source_distro=${source_distro}" >> $GITHUB_ENV
192- echo "target_distro=${target_distro}" >> $GITHUB_ENV
193- echo "variant_long=${source_distro}${source_release}-to-${target_distro}${{ matrix.scenario }}" >> $GITHUB_ENV
207+ echo "variant_long=${source_distro}${source_release}-to-${target_distro}${target_release}" >> $GITHUB_ENV
194208
195209 # Set Vagrant ENV variables, copy Vagrantfile
196210 echo "vm_box='${vm_box}'" > .env
@@ -199,7 +213,7 @@ jobs:
199213 cp -av ci/Vagrant/Vagrantfile ./
200214
201215 # Leapp packages
202- leapp_pkgs="leapp leapp-upgrade-${variant }"
216+ leapp_pkgs="leapp leapp-upgrade-el${source_release}toel${target_release }"
203217 if [ "${{ inputs.leapp-data-git }}" = "false" ]; then
204218 leapp_pkgs="${leapp_pkgs} leapp-data-${target_distro}"
205219 fi
@@ -294,7 +308,7 @@ jobs:
294308 ;;
295309 9)
296310 # TODO: workaround for CentOS Stream 9 SHA1 deprecated signature
297- [ ${{ matrix.distro }} = "centos" ] && rpm -e gpg-pubkey-8483c65d-5ccc5b19 || true
311+ [ ${{ env.source_distro }} = "centos" ] && rpm -e gpg-pubkey-8483c65d-5ccc5b19 || true
298312 res=0
299313 ;;
300314 esac
@@ -341,8 +355,8 @@ jobs:
341355 if [ "${vendor}" = "imunify" ]; then
342356 # TODO prepare/install the repository config instead of changing vendor's one
343357 sudo cp -av /etc/leapp/files/vendors.d/imunify.repo /etc/yum.repos.d/
344- sudo sed -i "s/\/${{ matrix.scenario }}\//\/${source_release}\//g" /etc/yum.repos.d/imunify.repo
345- sudo sed -i 's/cloudlinux${{ matrix.scenario }}-//g' /etc/yum.repos.d/imunify.repo
358+ sudo sed -i "s/\/${{ env.target_release }}\//\/${source_release}\//g" /etc/yum.repos.d/imunify.repo
359+ sudo sed -i 's/cloudlinux${{ env.target_release }}-//g' /etc/yum.repos.d/imunify.repo
346360
347361 sudo dnf -y install \
348362 imunify360-php-i360 \
@@ -549,22 +563,22 @@ jobs:
549563 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh epel ${{ env.source_release }}" || exit 1
550564
551565 - name : Vendor - KernelCare
552- if : inputs.vendors == 'all' && matrix.scenario != '10'
566+ if : inputs.vendors == 'all' && env.target_release != '10'
553567 run : |
554568 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh kernelcare ${{ env.source_release }}" || exit 1
555569
556570 - name : Vendor - Nginx
557- if : inputs.vendors == 'all' && matrix.scenario != '10'
571+ if : inputs.vendors == 'all' && env.target_release != '10'
558572 run : |
559573 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh nginx ${{ env.source_release }}" || exit 1
560574
561575 - name : Vendor - MariaDB
562- if : inputs.vendors == 'all' && matrix.scenario != '10'
576+ if : inputs.vendors == 'all' && env.target_release != '10'
563577 run : |
564578 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh mariadb ${{ env.source_release }}" || exit 1
565579
566580 - name : Vendor - PostgreSQL
567- if : inputs.vendors == 'all' && matrix.scenario != '10'
581+ if : inputs.vendors == 'all' && env.target_release != '10'
568582 run : |
569583 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh postgresql ${{ env.source_release }}" || exit 1
570584
@@ -574,12 +588,12 @@ jobs:
574588 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh docker ${{ env.source_release }}" || exit 1
575589
576590 - name : Vendor - Microsoft
577- if : inputs.vendors == 'all' && matrix.scenario != '10'
591+ if : inputs.vendors == 'all' && env.target_release != '10'
578592 run : |
579593 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh microsoft ${{ env.source_release }}" || exit 1
580594
581595 - name : Vendor - Imunify360
582- if : inputs.vendors == 'all' && matrix.scenario == '8'
596+ if : inputs.vendors == 'all' && env.target_release == '8'
583597 run : |
584598 sudo vagrant ssh elevatevm -c "sudo /vagrant/Vendors.sh imunify ${{ env.source_release }}" || exit 1
585599
0 commit comments