6060
6161logging .basicConfig (level = logging .DEBUG , format = '%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s' )
6262
63- URL_BASE = "https://mirror.openshift.com/pub/openshift-v4/aarch64/microshift"
64- URL_BASE_X86 = "https://mirror.openshift.com/pub/openshift-v4/x86_64/microshift"
63+
64+ def get_mirror_url_base (major_version , arch ):
65+ """Get the mirror URL base for the given major version and architecture."""
66+ return f"https://mirror.openshift.com/pub/openshift-v{ major_version } /{ arch } /microshift"
67+
6568
6669# An EC RPM filename looks like
6770# microshift-4.13.0~ec.4-202303070857.p0.gcf0bce2.assembly.ec.4.el9.aarch64.rpm
@@ -102,17 +105,18 @@ def main():
102105 # We build a default list of versions to scan using the current
103106 # version and the previous version. This assumes the script is run
104107 # out of the main branch where we can find the most current
105- # version under development. During the period where 4 .n is being
106- # developed, 4 .n-1 may still be producing only release candidates,
108+ # version under development. During the period where X .n is being
109+ # developed, X .n-1 may still be producing only release candidates,
107110 # so that scanning those 2 versions give us the 2 most recent
108111 # candidates for having no releases. During the period where the
109112 # main branch has not landed a rebase to update the version and
110113 # both main and the pre-release branch have the same version, we
111- # will end up scanning for EC or RC releases of 4 .n-2, but that's
114+ # will end up scanning for EC or RC releases of X .n-2, but that's
112115 # OK because the should all have been tagged already.
116+ prev_major , prev_minor = common .get_previous_version (major , minor )
113117 versions_to_scan = [
114118 '.' .join ([major , minor ]), # this minor version
115- '.' .join ([major , str ( int ( minor ) - 1 ) ]), # the previous minor version
119+ '.' .join ([prev_major , prev_minor ]), # the previous minor version
116120 ]
117121
118122 parser = argparse .ArgumentParser (
@@ -167,13 +171,22 @@ def main():
167171 if args .versions_to_scan :
168172 versions_to_scan = args .versions_to_scan
169173
174+ # Group versions by major to use correct mirror URL bases
175+ versions_by_major = {}
176+ for version in versions_to_scan :
177+ scan_major = version .split ('.' , 1 )[0 ]
178+ versions_by_major .setdefault (scan_major , []).append (version )
179+
170180 new_releases = []
171- if args .ec :
172- new_releases .extend (find_new_releases (versions_to_scan , URL_BASE , 'ocp-dev-preview' ))
173- new_releases .extend (find_new_releases (versions_to_scan , URL_BASE_X86 , 'ocp-dev-preview' ))
174- if args .rc :
175- new_releases .extend (find_new_releases (versions_to_scan , URL_BASE , 'ocp' ))
176- new_releases .extend (find_new_releases (versions_to_scan , URL_BASE_X86 , 'ocp' ))
181+ for scan_major , scan_versions in versions_by_major .items ():
182+ url_base_aarch64 = get_mirror_url_base (scan_major , 'aarch64' )
183+ url_base_x86 = get_mirror_url_base (scan_major , 'x86_64' )
184+ if args .ec :
185+ new_releases .extend (find_new_releases (scan_versions , url_base_aarch64 , 'ocp-dev-preview' ))
186+ new_releases .extend (find_new_releases (scan_versions , url_base_x86 , 'ocp-dev-preview' ))
187+ if args .rc :
188+ new_releases .extend (find_new_releases (scan_versions , url_base_aarch64 , 'ocp' ))
189+ new_releases .extend (find_new_releases (scan_versions , url_base_x86 , 'ocp' ))
177190
178191 if not new_releases :
179192 logging .info ("No new releases found." )
@@ -194,7 +207,7 @@ def main():
194207class VersionListParser (html .parser .HTMLParser ):
195208 """HTMLParser to extract version numbers from the mirror file list pages.
196209
197- A page like https://mirror.openshift.com/pub/openshift-v4 /aarch64/microshift/ocp-dev-preview/
210+ A page like https://mirror.openshift.com/pub/openshift-v{major} /aarch64/microshift/ocp-dev-preview/
198211
199212 contains HTML like
200213
@@ -355,20 +368,25 @@ def publish_candidate_release(new_release, take_action):
355368 candidate_number = new_release .candidate_number
356369 release_type = new_release .release_type
357370
371+ # Extract major version from product version (e.g., "4" from "4.16.0")
372+ major_version = product_version .split ('.' )[0 ]
373+ url_base_x86 = get_mirror_url_base (major_version , 'x86_64' )
374+ url_base_aarch64 = get_mirror_url_base (major_version , 'aarch64' )
375+
358376 # Set up the release notes preamble with download links
359377 preamble = textwrap .dedent (f"""
360378 This is a candidate release for { product_version } .
361379
362380 See the mirror for build artifacts:
363- - { URL_BASE_X86 } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /
364- - { URL_BASE } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /
381+ - { url_base_x86 } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /
382+ - { url_base_aarch64 } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /
365383
366384 Or add this RPM repository to your x86 systems:
367385
368386 ```
369387 [microshift-{ product_version } -{ candidate_type } -{ candidate_number } ]
370388 name=MicroShift { product_version } EarlyAccess { candidate_type } .{ candidate_number } RPMs
371- baseurl={ URL_BASE_X86 } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /el9/os/
389+ baseurl={ url_base_x86 } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /el9/os/
372390 enabled=1
373391 gpgcheck=0
374392 skip_if_unavailable=0
@@ -379,7 +397,7 @@ def publish_candidate_release(new_release, take_action):
379397 ```
380398 [microshift-{ product_version } -{ candidate_type } -{ candidate_number } ]
381399 name=MicroShift { product_version } EarlyAccess { candidate_type } .{ candidate_number } RPMs
382- baseurl={ URL_BASE } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /el9/os/
400+ baseurl={ url_base_aarch64 } /{ release_type } /{ product_version } -{ candidate_type } .{ candidate_number } /el9/os/
383401 enabled=1
384402 gpgcheck=0
385403 skip_if_unavailable=0
0 commit comments