From cb690384fb8218ef3bf0669438a0869282564362 Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Fri, 30 Jan 2026 09:09:48 -0500 Subject: [PATCH 01/15] Use official docker images as flag Signed-off-by: Crola1702 --- ros_buildfarm/release_job.py | 11 ++++++++--- .../release/create_binarydeb_task_generator.py | 5 +++++ .../scripts/release/generate_release_script.py | 7 ++++++- .../scripts/release/run_binarydeb_job.py | 4 ++++ .../deb/binarypkg_create_task.Dockerfile.em | 4 +++- .../templates/release/deb/binarypkg_job.xml.em | 15 ++++++++++++--- .../release/deb/binarypkg_task.Dockerfile.em | 1 + .../templates/snippet/builder_check-docker.xml.em | 8 ++++++-- .../snippet/from_base_image.Dockerfile.em | 4 +++- 9 files changed, 48 insertions(+), 11 deletions(-) diff --git a/ros_buildfarm/release_job.py b/ros_buildfarm/release_job.py index 17f14cd33..68c5dc0ca 100644 --- a/ros_buildfarm/release_job.py +++ b/ros_buildfarm/release_job.py @@ -403,7 +403,8 @@ def configure_release_job( is_disabled=False, other_build_files_same_platform=None, groovy_script=None, filter_arches=None, - dry_run=False): + dry_run=False, + use_official_docker_images=False): """ Configure a Jenkins release job. @@ -565,7 +566,8 @@ def configure_release_job( config, build_file, os_name, os_code_name, arch, pkg_name, repo_name, repo.release_repository, cached_pkgs=cached_pkgs, upstream_job_names=upstream_job_names, - is_disabled=is_disabled) + is_disabled=is_disabled, + use_official_docker_images=use_official_docker_images) # jenkinsapi.jenkins.Jenkins evaluates to false if job count is zero if isinstance(jenkins, object) and jenkins is not False: configure_job(jenkins, job_name, job_config, dry_run=dry_run) @@ -687,7 +689,8 @@ def _get_binarydeb_job_config( config, build_file, os_name, os_code_name, arch, pkg_name, repo_name, release_repository, cached_pkgs=None, upstream_job_names=None, - is_disabled=False): + is_disabled=False, + use_official_docker_images=False): package_format = package_format_mapping[os_name] template_name = 'release/%s/binarypkg_job.xml.em' % package_format @@ -765,6 +768,8 @@ def _get_binarydeb_job_config( 'credential_id': build_file.upload_credential_id, 'shared_ccache': build_file.shared_ccache, + + 'use_official_docker_images': use_official_docker_images, } job_config = expand_template(template_name, job_data) return job_config diff --git a/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py b/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py index 569801026..cedf61a5f 100644 --- a/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py +++ b/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py @@ -56,6 +56,10 @@ def main(argv=sys.argv[1:]): add_argument_dockerfile_dir(parser) add_argument_env_vars(parser) add_argument_skip_tests(parser) + parser.add_argument( + '--use-official-docker-images', + action='store_true', + help='Use official docker images instead of osrf/ wrappers') args = parser.parse_args(argv) debian_package_name = get_os_package_name( @@ -112,6 +116,7 @@ def main(argv=sys.argv[1:]): 'rosdistro_name': args.rosdistro_name, 'package_name': args.package_name, 'binarypkg_dir': args.binarypkg_dir, + 'use_official_docker_images': args.use_official_docker_images, } create_dockerfile( 'release/deb/binarypkg_task.Dockerfile.em', data, args.dockerfile_dir) diff --git a/ros_buildfarm/scripts/release/generate_release_script.py b/ros_buildfarm/scripts/release/generate_release_script.py index 55da41fd7..8ec90e6cc 100644 --- a/ros_buildfarm/scripts/release/generate_release_script.py +++ b/ros_buildfarm/scripts/release/generate_release_script.py @@ -53,6 +53,10 @@ def main(argv=sys.argv[1:]): '--skip-source', action='store_true', help='Skip the entire source package build process') + parser.add_argument( + '--use-official-docker-images', + action='store_true', + help='Use official docker images instead of osrf/ wrappers') args = parser.parse_args(argv) package_format = package_format_mapping[args.os_name] @@ -97,7 +101,8 @@ def beforeInclude(self, *args, **kwargs): args.config_url, args.rosdistro_name, args.release_build_name, args.package_name, args.os_name, args.os_code_name, jenkins=False, views=[], generate_import_package_job=False, - generate_sync_packages_jobs=False, filter_arches=args.arch) + generate_sync_packages_jobs=False, filter_arches=args.arch, + use_official_docker_images=args.use_official_docker_images) templates.template_hooks = None diff --git a/ros_buildfarm/scripts/release/run_binarydeb_job.py b/ros_buildfarm/scripts/release/run_binarydeb_job.py index c7c4ad068..eb78b9c85 100644 --- a/ros_buildfarm/scripts/release/run_binarydeb_job.py +++ b/ros_buildfarm/scripts/release/run_binarydeb_job.py @@ -55,6 +55,10 @@ def main(argv=sys.argv[1:]): add_argument_append_timestamp(parser) add_argument_env_vars(parser) add_argument_skip_tests(parser) + parser.add_argument( + '--use-official-docker-images', + action='store_true', + help='Use official docker images instead of osrf/ wrappers') args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) diff --git a/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em b/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em index 982e12af5..81c3865a9 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em @@ -5,6 +5,7 @@ os_name=os_name, os_code_name=os_code_name, arch=arch, + use_official_docker_images=vars().get('use_official_docker_images', False), ))@ VOLUME ["/var/cache/apt/archives"] @@ -108,6 +109,7 @@ cmds.append( ' --binarypkg-dir ' + binarypkg_dir + ' --env-vars ' + ' '.join(build_environment_variables) + ' --dockerfile-dir ' + dockerfile_dir + - (' --skip-tests' if skip_tests else '')) + (' --skip-tests' if skip_tests else '') + + (' --use-official-docker-images' if vars().get('use_official_docker_images', False) else '')) }@ CMD ["@(' && '.join(cmds))"] diff --git a/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em b/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em index 18fa14b73..5c99e925d 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em @@ -1,3 +1,8 @@ +@{ +docker_platform_arg = '' +if arch == 'arm64' and vars().get('use_official_docker_images', False): + docker_platform_arg = '--platform linux/arm64' +}@ Generated at @ESCAPE(now_str) from template '@ESCAPE(template_name)'@ @@ -75,6 +80,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config os_name=os_name, os_code_name=os_code_name, arch=arch, + use_official_docker_images=vars().get('use_official_docker_images', False), ))@ @(SNIPPET( 'builder_shell_clone-ros-buildfarm', @@ -113,13 +119,14 @@ but disabled since the package is blacklisted (or not whitelisted) in the config ' --dockerfile-dir $WORKSPACE/docker_generating_docker' + ' --env-vars ' + ' '.join(build_environment_variables) + (' --append-timestamp' if append_timestamp else '') + - (' --skip-tests' if skip_tests else ''), + (' --skip-tests' if skip_tests else '') + + (' --use-official-docker-images' if vars().get('use_official_docker_images', False) else ''), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Build Dockerfile - binarydeb task"', 'cd $WORKSPACE/docker_generating_docker', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --network=host --force-rm -t binarydeb_task_generation.%s_%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, arch, pkg_name), + 'docker build %s --network=host --force-rm -t binarydeb_task_generation.%s_%s_%s_%s_%s .' % (docker_platform_arg, rosdistro_name, os_name, os_code_name, arch, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - binarydeb task"', @@ -135,6 +142,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config '# If using Podman, change the user namespace to preserve UID. No effect if using Docker.', 'export PODMAN_USERNS=keep-id', 'docker run' + + (' %s' % docker_platform_arg) + ' --rm ' + ' --cidfile=$WORKSPACE/docker_generating_docker/docker.cid' + ' -e=TRAVIS=$TRAVIS' + @@ -160,7 +168,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config '# build and run build_binarydeb Dockerfile', 'cd $WORKSPACE/docker_build_binarydeb', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --network=host --force-rm -t binarydeb_build.%s_%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, arch, pkg_name), + 'docker build %s --network=host --force-rm -t binarydeb_build.%s_%s_%s_%s_%s .' % (docker_platform_arg, rosdistro_name, os_name, os_code_name, arch, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - build binarydeb"', @@ -172,6 +180,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config '# If using Podman, change the user namespace to preserve UID. No effect if using Docker.', 'export PODMAN_USERNS=keep-id', 'docker run' + + (' %s' % docker_platform_arg) + ' --rm ' + ' --cidfile=$WORKSPACE/docker_build_binarydeb/docker.cid' + ' -e=HOME=/home/buildfarm' + diff --git a/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em b/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em index f1762a433..532fe787d 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em @@ -6,6 +6,7 @@ os_name=os_name, os_code_name=os_code_name, arch=arch, + use_official_docker_images=vars().get('use_official_docker_images', False), ))@ VOLUME ["/var/cache/apt/archives"] diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index 61f873f2f..af5168990 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -1,7 +1,11 @@ @{ # same logic as in from_base_image.Dockerfile.em -if arch in ['i386', 'armhf', 'arm64']: +docker_platform_arg = '' +if arch in ['i386', 'armhf', 'arm64'] and not vars().get('use_official_docker_images', False): base_image = 'osrf/%s_%s:%s' % (os_name, arch, os_code_name) +elif arch == 'arm64' and vars().get('use_official_docker_images', False): + base_image = 'arm64v8/%s:%s' % (os_name, os_code_name) + docker_platform_arg = '--platform linux/arm64' else: base_image = '%s:%s' % (os_name, os_code_name) }@ @@ -10,7 +14,7 @@ else: script='\n'.join([ 'echo "# BEGIN SECTION: Check docker status"', 'echo "Testing trivial docker invocation..."', - 'docker run --rm %s true ; echo "\'docker run\' returned $?"' % base_image, + 'docker run %s --rm %s true ; echo "\'docker run\' returned $?"' % (docker_platform_arg, base_image), ]), ))@ @(SNIPPET( diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index 205216950..4f07dd91f 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -2,8 +2,10 @@ FROM @base_image @[else]@ @# same logic as in builder_check-docker.xml.em -@[ if arch in ['i386', 'armhf', 'arm64']]@ +@[ if arch in ['i386', 'armhf', 'arm64'] and not vars().get('use_official_docker_images', False)]@ FROM osrf/@(os_name)_@arch:@os_code_name +@[ elif arch == 'arm64' and vars().get('use_official_docker_images', False)]@ +FROM arm64v8/@(os_name):@os_code_name @[ else]@ FROM @os_name:@os_code_name @[ end if]@ From 6c2ad894accd0338cda4d1d5a854a30dc6986b9a Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Fri, 30 Jan 2026 09:32:02 -0500 Subject: [PATCH 02/15] Use arguments to pass arguments Signed-off-by: Crola1702 --- ros_buildfarm/argument.py | 5 +++++ ros_buildfarm/scripts/release/run_binarydeb_job.py | 6 ++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ros_buildfarm/argument.py b/ros_buildfarm/argument.py index ebfee8de3..7bba2fd9a 100644 --- a/ros_buildfarm/argument.py +++ b/ros_buildfarm/argument.py @@ -452,6 +452,11 @@ def add_argument_skip_tests(parser): '--skip-tests', action='store_true', help='Skip execution of tests as part of the package build process.') +def add_argument_use_official_docker_images(parser): + parser.add_argument( + '--use-official-docker-images', + action='store_true', + help='Use official docker images instead of osrf/ wrappers') def check_len_action(minargs, maxargs): class CheckLength(argparse.Action): diff --git a/ros_buildfarm/scripts/release/run_binarydeb_job.py b/ros_buildfarm/scripts/release/run_binarydeb_job.py index eb78b9c85..02a8b9c51 100644 --- a/ros_buildfarm/scripts/release/run_binarydeb_job.py +++ b/ros_buildfarm/scripts/release/run_binarydeb_job.py @@ -32,6 +32,7 @@ from ros_buildfarm.argument import add_argument_skip_download_sourcepkg from ros_buildfarm.argument import add_argument_skip_tests from ros_buildfarm.argument import add_argument_target_repository +from ros_buildfarm.argument import add_argument_use_official_docker_images from ros_buildfarm.common import get_distribution_repository_keys from ros_buildfarm.common import get_user_id from ros_buildfarm.templates import create_dockerfile @@ -55,10 +56,7 @@ def main(argv=sys.argv[1:]): add_argument_append_timestamp(parser) add_argument_env_vars(parser) add_argument_skip_tests(parser) - parser.add_argument( - '--use-official-docker-images', - action='store_true', - help='Use official docker images instead of osrf/ wrappers') + add_argument_use_official_docker_images(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) From d0720d6eb07788e2ee9b5127b65985dfdeab84ce Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Fri, 30 Jan 2026 09:43:30 -0500 Subject: [PATCH 03/15] Use platform in docker pull Signed-off-by: Crola1702 --- .../scripts/misc/docker_pull_baseimage.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/ros_buildfarm/scripts/misc/docker_pull_baseimage.py b/ros_buildfarm/scripts/misc/docker_pull_baseimage.py index b07959676..c82d68370 100644 --- a/ros_buildfarm/scripts/misc/docker_pull_baseimage.py +++ b/ros_buildfarm/scripts/misc/docker_pull_baseimage.py @@ -24,12 +24,17 @@ def main(argv=sys.argv[1:]): base_image = get_base_image_from_dockerfile(dockerfile) print(base_image) + platform_flag = None + if base_image.startswith('arm64v8/'): + platform_flag = 'linux/arm64' + known_error_strings = [ 'Error pulling image', 'Server error: Status 502 while fetching image layer', ] max_tries = 10 - rc, _ = call_docker_pull_repeatedly(base_image, known_error_strings, max_tries) + rc, _ = call_docker_pull_repeatedly( + base_image, known_error_strings, max_tries, platform_flag=platform_flag) return rc @@ -46,14 +51,16 @@ def get_base_image_from_dockerfile(dockerfile): (from_prefix, dockerfile) -def call_docker_pull_repeatedly(base_image, known_error_strings, max_tries): +def call_docker_pull_repeatedly( + base_image, known_error_strings, max_tries, platform_flag=None): for i in range(1, max_tries + 1): if i > 1: sleep_time = 5 + 2 * i print("Reinvoke 'docker pull' (%d/%d) after sleeping %s seconds" % (i, max_tries, sleep_time)) sleep(sleep_time) - rc, known_error_conditions = call_docker_pull(base_image, known_error_strings) + rc, known_error_conditions = call_docker_pull( + base_image, known_error_strings, platform_flag=platform_flag) if rc == 0 or not known_error_conditions: break print('') @@ -64,10 +71,13 @@ def call_docker_pull_repeatedly(base_image, known_error_strings, max_tries): return rc, known_error_conditions -def call_docker_pull(base_image, known_error_strings): +def call_docker_pull(base_image, known_error_strings, platform_flag=None): known_error_conditions = [] - cmd = ['docker', 'pull', base_image] + cmd = ['docker', 'pull'] + if platform_flag: + cmd.extend(['--platform', platform_flag]) + cmd.append(base_image) print('Check docker base image for updates: %s' % ' '.join(cmd)) proc = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) From 73a8a7e4fd721d9595255c1bd91d6bd53bb8296a Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Fri, 30 Jan 2026 09:56:46 -0500 Subject: [PATCH 04/15] Use arguments file to pass arguments Signed-off-by: Crola1702 --- ros_buildfarm/scripts/release/generate_release_script.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ros_buildfarm/scripts/release/generate_release_script.py b/ros_buildfarm/scripts/release/generate_release_script.py index 8ec90e6cc..4d2ab937a 100644 --- a/ros_buildfarm/scripts/release/generate_release_script.py +++ b/ros_buildfarm/scripts/release/generate_release_script.py @@ -23,6 +23,7 @@ from ros_buildfarm.argument import add_argument_os_name from ros_buildfarm.argument import add_argument_package_name from ros_buildfarm.argument import add_argument_rosdistro_name +from ros_buildfarm.argument import add_argument_use_official_docker_images from ros_buildfarm.common import get_binarydeb_job_name from ros_buildfarm.common import get_sourcedeb_job_name from ros_buildfarm.common import package_format_mapping @@ -41,6 +42,7 @@ def main(argv=sys.argv[1:]): add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) + add_argument_use_official_docker_images(parser) parser.add_argument( '--skip-binary', action='store_true', @@ -53,10 +55,6 @@ def main(argv=sys.argv[1:]): '--skip-source', action='store_true', help='Skip the entire source package build process') - parser.add_argument( - '--use-official-docker-images', - action='store_true', - help='Use official docker images instead of osrf/ wrappers') args = parser.parse_args(argv) package_format = package_format_mapping[args.os_name] From b2b7f1d273d6508d7901e3841c89aa101bf471e1 Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Tue, 3 Feb 2026 09:57:04 -0500 Subject: [PATCH 05/15] Update argument to --docker-image-prefix Signed-off-by: Crola1702 --- ros_buildfarm/argument.py | 7 +++---- ros_buildfarm/release_job.py | 8 ++++---- .../scripts/misc/docker_pull_baseimage.py | 17 +++++------------ .../release/create_binarydeb_task_generator.py | 8 +++----- .../scripts/release/generate_release_script.py | 6 +++--- .../scripts/release/run_binarydeb_job.py | 4 ++-- .../deb/binarypkg_create_task.Dockerfile.em | 18 +++++++++--------- .../templates/release/deb/binarypkg_job.xml.em | 15 ++++----------- .../release/deb/binarypkg_task.Dockerfile.em | 2 +- .../snippet/builder_check-docker.xml.em | 10 ++++------ .../snippet/from_base_image.Dockerfile.em | 6 +++--- 11 files changed, 41 insertions(+), 60 deletions(-) diff --git a/ros_buildfarm/argument.py b/ros_buildfarm/argument.py index 7bba2fd9a..522174374 100644 --- a/ros_buildfarm/argument.py +++ b/ros_buildfarm/argument.py @@ -452,11 +452,10 @@ def add_argument_skip_tests(parser): '--skip-tests', action='store_true', help='Skip execution of tests as part of the package build process.') -def add_argument_use_official_docker_images(parser): +def add_argument_docker_image_prefix(parser): parser.add_argument( - '--use-official-docker-images', - action='store_true', - help='Use official docker images instead of osrf/ wrappers') + '--docker-image-prefix', + help='Prefix for the docker image (e.g. "osrf/" or "arm64v8/")') def check_len_action(minargs, maxargs): class CheckLength(argparse.Action): diff --git a/ros_buildfarm/release_job.py b/ros_buildfarm/release_job.py index 68c5dc0ca..e674b55a9 100644 --- a/ros_buildfarm/release_job.py +++ b/ros_buildfarm/release_job.py @@ -404,7 +404,7 @@ def configure_release_job( groovy_script=None, filter_arches=None, dry_run=False, - use_official_docker_images=False): + docker_image_prefix=None): """ Configure a Jenkins release job. @@ -567,7 +567,7 @@ def configure_release_job( pkg_name, repo_name, repo.release_repository, cached_pkgs=cached_pkgs, upstream_job_names=upstream_job_names, is_disabled=is_disabled, - use_official_docker_images=use_official_docker_images) + docker_image_prefix=docker_image_prefix) # jenkinsapi.jenkins.Jenkins evaluates to false if job count is zero if isinstance(jenkins, object) and jenkins is not False: configure_job(jenkins, job_name, job_config, dry_run=dry_run) @@ -690,7 +690,7 @@ def _get_binarydeb_job_config( pkg_name, repo_name, release_repository, cached_pkgs=None, upstream_job_names=None, is_disabled=False, - use_official_docker_images=False): + docker_image_prefix=None): package_format = package_format_mapping[os_name] template_name = 'release/%s/binarypkg_job.xml.em' % package_format @@ -769,7 +769,7 @@ def _get_binarydeb_job_config( 'shared_ccache': build_file.shared_ccache, - 'use_official_docker_images': use_official_docker_images, + 'docker_image_prefix': docker_image_prefix, } job_config = expand_template(template_name, job_data) return job_config diff --git a/ros_buildfarm/scripts/misc/docker_pull_baseimage.py b/ros_buildfarm/scripts/misc/docker_pull_baseimage.py index c82d68370..c9b9d793a 100644 --- a/ros_buildfarm/scripts/misc/docker_pull_baseimage.py +++ b/ros_buildfarm/scripts/misc/docker_pull_baseimage.py @@ -24,17 +24,13 @@ def main(argv=sys.argv[1:]): base_image = get_base_image_from_dockerfile(dockerfile) print(base_image) - platform_flag = None - if base_image.startswith('arm64v8/'): - platform_flag = 'linux/arm64' - known_error_strings = [ 'Error pulling image', 'Server error: Status 502 while fetching image layer', ] max_tries = 10 rc, _ = call_docker_pull_repeatedly( - base_image, known_error_strings, max_tries, platform_flag=platform_flag) + base_image, known_error_strings, max_tries) return rc @@ -52,7 +48,7 @@ def get_base_image_from_dockerfile(dockerfile): def call_docker_pull_repeatedly( - base_image, known_error_strings, max_tries, platform_flag=None): + base_image, known_error_strings, max_tries): for i in range(1, max_tries + 1): if i > 1: sleep_time = 5 + 2 * i @@ -60,7 +56,7 @@ def call_docker_pull_repeatedly( (i, max_tries, sleep_time)) sleep(sleep_time) rc, known_error_conditions = call_docker_pull( - base_image, known_error_strings, platform_flag=platform_flag) + base_image, known_error_strings) if rc == 0 or not known_error_conditions: break print('') @@ -71,13 +67,10 @@ def call_docker_pull_repeatedly( return rc, known_error_conditions -def call_docker_pull(base_image, known_error_strings, platform_flag=None): +def call_docker_pull(base_image, known_error_strings): known_error_conditions = [] - cmd = ['docker', 'pull'] - if platform_flag: - cmd.extend(['--platform', platform_flag]) - cmd.append(base_image) + cmd = ['docker', 'pull', base_image] print('Check docker base image for updates: %s' % ' '.join(cmd)) proc = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) diff --git a/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py b/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py index cedf61a5f..22c6388c7 100644 --- a/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py +++ b/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py @@ -32,6 +32,7 @@ from ros_buildfarm.argument import add_argument_rosdistro_index_url from ros_buildfarm.argument import add_argument_rosdistro_name from ros_buildfarm.argument import add_argument_skip_tests +from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.common import get_binary_package_versions from ros_buildfarm.common import get_distribution_repository_keys from ros_buildfarm.common import get_os_package_name @@ -56,10 +57,7 @@ def main(argv=sys.argv[1:]): add_argument_dockerfile_dir(parser) add_argument_env_vars(parser) add_argument_skip_tests(parser) - parser.add_argument( - '--use-official-docker-images', - action='store_true', - help='Use official docker images instead of osrf/ wrappers') + add_argument_docker_image_prefix(parser) args = parser.parse_args(argv) debian_package_name = get_os_package_name( @@ -116,7 +114,7 @@ def main(argv=sys.argv[1:]): 'rosdistro_name': args.rosdistro_name, 'package_name': args.package_name, 'binarypkg_dir': args.binarypkg_dir, - 'use_official_docker_images': args.use_official_docker_images, + 'docker_image_prefix': args.docker_image_prefix, } create_dockerfile( 'release/deb/binarypkg_task.Dockerfile.em', data, args.dockerfile_dir) diff --git a/ros_buildfarm/scripts/release/generate_release_script.py b/ros_buildfarm/scripts/release/generate_release_script.py index 4d2ab937a..5fa9a525b 100644 --- a/ros_buildfarm/scripts/release/generate_release_script.py +++ b/ros_buildfarm/scripts/release/generate_release_script.py @@ -23,7 +23,7 @@ from ros_buildfarm.argument import add_argument_os_name from ros_buildfarm.argument import add_argument_package_name from ros_buildfarm.argument import add_argument_rosdistro_name -from ros_buildfarm.argument import add_argument_use_official_docker_images +from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.common import get_binarydeb_job_name from ros_buildfarm.common import get_sourcedeb_job_name from ros_buildfarm.common import package_format_mapping @@ -42,7 +42,7 @@ def main(argv=sys.argv[1:]): add_argument_os_name(parser) add_argument_os_code_name(parser) add_argument_arch(parser) - add_argument_use_official_docker_images(parser) + add_argument_docker_image_prefix(parser) parser.add_argument( '--skip-binary', action='store_true', @@ -100,7 +100,7 @@ def beforeInclude(self, *args, **kwargs): args.package_name, args.os_name, args.os_code_name, jenkins=False, views=[], generate_import_package_job=False, generate_sync_packages_jobs=False, filter_arches=args.arch, - use_official_docker_images=args.use_official_docker_images) + docker_image_prefix=args.docker_image_prefix) templates.template_hooks = None diff --git a/ros_buildfarm/scripts/release/run_binarydeb_job.py b/ros_buildfarm/scripts/release/run_binarydeb_job.py index 02a8b9c51..b5c7468ee 100644 --- a/ros_buildfarm/scripts/release/run_binarydeb_job.py +++ b/ros_buildfarm/scripts/release/run_binarydeb_job.py @@ -32,7 +32,7 @@ from ros_buildfarm.argument import add_argument_skip_download_sourcepkg from ros_buildfarm.argument import add_argument_skip_tests from ros_buildfarm.argument import add_argument_target_repository -from ros_buildfarm.argument import add_argument_use_official_docker_images +from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.common import get_distribution_repository_keys from ros_buildfarm.common import get_user_id from ros_buildfarm.templates import create_dockerfile @@ -56,7 +56,7 @@ def main(argv=sys.argv[1:]): add_argument_append_timestamp(parser) add_argument_env_vars(parser) add_argument_skip_tests(parser) - add_argument_use_official_docker_images(parser) + add_argument_docker_image_prefix(parser) args = parser.parse_args(argv) data = copy.deepcopy(args.__dict__) diff --git a/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em b/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em index 81c3865a9..5c5a01e81 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em @@ -2,11 +2,11 @@ @(TEMPLATE( 'snippet/from_base_image.Dockerfile.em', - os_name=os_name, - os_code_name=os_code_name, - arch=arch, - use_official_docker_images=vars().get('use_official_docker_images', False), -))@ + os_name=os_name, + os_code_name=os_code_name, + arch=arch, + docker_image_prefix=vars().get('docker_image_prefix'), + )) @ VOLUME ["/var/cache/apt/archives"] @@ -108,8 +108,8 @@ cmds.append( ' --distribution-repository-key-files ' + ' ' .join(['/etc/apt/keyrings/ros-buildfarm-%d.asc' % i for i in range(len(distribution_repository_keys))]) + ' --binarypkg-dir ' + binarypkg_dir + ' --env-vars ' + ' '.join(build_environment_variables) + - ' --dockerfile-dir ' + dockerfile_dir + - (' --skip-tests' if skip_tests else '') + - (' --use-official-docker-images' if vars().get('use_official_docker_images', False) else '')) -}@ + ' --dockerfile-dir ' + dockerfile_dir + + (' --skip-tests' if skip_tests else '') + + (' --docker-image-prefix ' + docker_image_prefix if vars().get('docker_image_prefix') else '')) + } @ CMD ["@(' && '.join(cmds))"] diff --git a/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em b/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em index 5c99e925d..5c9db409d 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em @@ -1,8 +1,3 @@ -@{ -docker_platform_arg = '' -if arch == 'arm64' and vars().get('use_official_docker_images', False): - docker_platform_arg = '--platform linux/arm64' -}@ Generated at @ESCAPE(now_str) from template '@ESCAPE(template_name)'@ @@ -80,7 +75,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config os_name=os_name, os_code_name=os_code_name, arch=arch, - use_official_docker_images=vars().get('use_official_docker_images', False), + docker_image_prefix=vars().get('docker_image_prefix'), ))@ @(SNIPPET( 'builder_shell_clone-ros-buildfarm', @@ -120,13 +115,13 @@ but disabled since the package is blacklisted (or not whitelisted) in the config ' --env-vars ' + ' '.join(build_environment_variables) + (' --append-timestamp' if append_timestamp else '') + (' --skip-tests' if skip_tests else '') + - (' --use-official-docker-images' if vars().get('use_official_docker_images', False) else ''), + (' --docker-image-prefix ' + docker_image_prefix if vars().get('docker_image_prefix') else ''), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Build Dockerfile - binarydeb task"', 'cd $WORKSPACE/docker_generating_docker', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build %s --network=host --force-rm -t binarydeb_task_generation.%s_%s_%s_%s_%s .' % (docker_platform_arg, rosdistro_name, os_name, os_code_name, arch, pkg_name), + 'docker build --network=host --force-rm -t binarydeb_task_generation.%s_%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, arch, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - binarydeb task"', @@ -142,7 +137,6 @@ but disabled since the package is blacklisted (or not whitelisted) in the config '# If using Podman, change the user namespace to preserve UID. No effect if using Docker.', 'export PODMAN_USERNS=keep-id', 'docker run' + - (' %s' % docker_platform_arg) + ' --rm ' + ' --cidfile=$WORKSPACE/docker_generating_docker/docker.cid' + ' -e=TRAVIS=$TRAVIS' + @@ -168,7 +162,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config '# build and run build_binarydeb Dockerfile', 'cd $WORKSPACE/docker_build_binarydeb', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build %s --network=host --force-rm -t binarydeb_build.%s_%s_%s_%s_%s .' % (docker_platform_arg, rosdistro_name, os_name, os_code_name, arch, pkg_name), + 'docker build --network=host --force-rm -t binarydeb_build.%s_%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, arch, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - build binarydeb"', @@ -180,7 +174,6 @@ but disabled since the package is blacklisted (or not whitelisted) in the config '# If using Podman, change the user namespace to preserve UID. No effect if using Docker.', 'export PODMAN_USERNS=keep-id', 'docker run' + - (' %s' % docker_platform_arg) + ' --rm ' + ' --cidfile=$WORKSPACE/docker_build_binarydeb/docker.cid' + ' -e=HOME=/home/buildfarm' + diff --git a/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em b/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em index 532fe787d..1fbd8581a 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em @@ -6,7 +6,7 @@ os_name=os_name, os_code_name=os_code_name, arch=arch, - use_official_docker_images=vars().get('use_official_docker_images', False), + docker_image_prefix=vars().get('docker_image_prefix'), ))@ VOLUME ["/var/cache/apt/archives"] diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index af5168990..e81b55dab 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -1,11 +1,9 @@ @{ # same logic as in from_base_image.Dockerfile.em -docker_platform_arg = '' -if arch in ['i386', 'armhf', 'arm64'] and not vars().get('use_official_docker_images', False): +if vars().get('docker_image_prefix'): + base_image = '%s%s:%s' % (docker_image_prefix, os_name, os_code_name) +elif arch in ['i386', 'armhf', 'arm64']: base_image = 'osrf/%s_%s:%s' % (os_name, arch, os_code_name) -elif arch == 'arm64' and vars().get('use_official_docker_images', False): - base_image = 'arm64v8/%s:%s' % (os_name, os_code_name) - docker_platform_arg = '--platform linux/arm64' else: base_image = '%s:%s' % (os_name, os_code_name) }@ @@ -14,7 +12,7 @@ else: script='\n'.join([ 'echo "# BEGIN SECTION: Check docker status"', 'echo "Testing trivial docker invocation..."', - 'docker run %s --rm %s true ; echo "\'docker run\' returned $?"' % (docker_platform_arg, base_image), + 'docker run --rm %s true ; echo "\'docker run\' returned $?"' % base_image, ]), ))@ @(SNIPPET( diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index 4f07dd91f..88f3126da 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -2,10 +2,10 @@ FROM @base_image @[else]@ @# same logic as in builder_check-docker.xml.em -@[ if arch in ['i386', 'armhf', 'arm64'] and not vars().get('use_official_docker_images', False)]@ +@[ if vars().get('docker_image_prefix')]@ +FROM @(docker_image_prefix)@(os_name):@os_code_name +@[ elif arch in ['i386', 'armhf', 'arm64']]@ FROM osrf/@(os_name)_@arch:@os_code_name -@[ elif arch == 'arm64' and vars().get('use_official_docker_images', False)]@ -FROM arm64v8/@(os_name):@os_code_name @[ else]@ FROM @os_name:@os_code_name @[ end if]@ From 09003fe4326ffd6dcbdeb0f6bc1e93b7b567d442 Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Mon, 9 Feb 2026 11:04:10 -0500 Subject: [PATCH 06/15] Enable --platform flag in the templates using arch variable Partially generated using Gemini 3.0 Pro Signed-off-by: Crola1702 --- ros_buildfarm/templates/ci/ci_job.xml.em | 8 ++++---- ros_buildfarm/templates/devel/devel_job.xml.em | 6 +++--- ros_buildfarm/templates/doc/doc_independent_job.xml.em | 2 +- ros_buildfarm/templates/doc/doc_job.xml.em | 4 ++-- ros_buildfarm/templates/doc/doc_metadata_job.xml.em | 2 +- ros_buildfarm/templates/doc/rosdoc2_job.xml.em | 4 ++-- ros_buildfarm/templates/release/deb/binarypkg_job.xml.em | 4 ++-- ros_buildfarm/templates/release/deb/sourcepkg_job.xml.em | 2 +- ros_buildfarm/templates/release/rpm/binarypkg_job.xml.em | 2 +- ros_buildfarm/templates/release/rpm/sourcepkg_job.xml.em | 2 +- .../templates/snippet/builder_check-docker.xml.em | 2 -- .../templates/snippet/from_base_image.Dockerfile.em | 2 -- 12 files changed, 18 insertions(+), 22 deletions(-) diff --git a/ros_buildfarm/templates/ci/ci_job.xml.em b/ros_buildfarm/templates/ci/ci_job.xml.em index 6d1ed4c99..97e125d7e 100644 --- a/ros_buildfarm/templates/ci/ci_job.xml.em +++ b/ros_buildfarm/templates/ci/ci_job.xml.em @@ -220,7 +220,7 @@ parameters = [ 'echo "# BEGIN SECTION: Build Dockerfile - generating CI tasks"', 'cd $WORKSPACE/docker_generating_dockers', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t $DOCKER_IMAGE_PREFIX.ci_task_generation.%s .' % (rosdistro_name or 'global'), + 'docker build --force-rm --platform=linux/%s -t $DOCKER_IMAGE_PREFIX.ci_task_generation.%s .' % (arch, rosdistro_name or 'global'), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - generating CI tasks"', @@ -260,7 +260,7 @@ parameters = [ '# build and run create_workspace Dockerfile', 'cd $WORKSPACE/docker_create_workspace', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t $DOCKER_IMAGE_PREFIX.ci_create_workspace.%s .' % (rosdistro_name or 'global'), + 'docker build --force-rm --platform=linux/%s -t $DOCKER_IMAGE_PREFIX.ci_create_workspace.%s .' % (arch, rosdistro_name or 'global'), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - create workspace"', @@ -314,7 +314,7 @@ parameters = [ '# build and run build and install Dockerfile', 'cd $WORKSPACE/docker_build_and_install', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t $DOCKER_IMAGE_PREFIX.ci_build_and_install.%s .' % (rosdistro_name or 'global'), + 'docker build --force-rm --platform=linux/%s -t $DOCKER_IMAGE_PREFIX.ci_build_and_install.%s .' % (arch, rosdistro_name or 'global'), 'echo "# END SECTION"', '', ] + ([ @@ -398,7 +398,7 @@ parameters = [ '# build and run build and test Dockerfile', 'cd $WORKSPACE/docker_build_and_test', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t $DOCKER_IMAGE_PREFIX.ci_build_and_test.%s .' % (rosdistro_name or 'global'), + 'docker build --force-rm --platform=linux/%s -t $DOCKER_IMAGE_PREFIX.ci_build_and_test.%s .' % (arch, rosdistro_name or 'global'), 'echo "# END SECTION"', '', ] + ([ diff --git a/ros_buildfarm/templates/devel/devel_job.xml.em b/ros_buildfarm/templates/devel/devel_job.xml.em index 0dcf3b463..6721085f9 100644 --- a/ros_buildfarm/templates/devel/devel_job.xml.em +++ b/ros_buildfarm/templates/devel/devel_job.xml.em @@ -159,7 +159,7 @@ if pull_request: 'echo "# BEGIN SECTION: Build Dockerfile - generating devel tasks"', 'cd $WORKSPACE/docker_generating_dockers', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t devel_task_generation.%s_%s .' % (rosdistro_name, source_repo_spec.name.lower()), + 'docker build --force-rm --platform=linux/%s -t devel_task_generation.%s_%s .' % (arch, rosdistro_name, source_repo_spec.name.lower()), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - generating devel tasks"', @@ -199,7 +199,7 @@ if pull_request: '# build and run build_and_install Dockerfile', 'cd $WORKSPACE/docker_build_and_install', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t devel_build_and_install.%s_%s .' % (rosdistro_name, source_repo_spec.name.lower()), + 'docker build --force-rm --platform=linux/%s -t devel_build_and_install.%s_%s .' % (arch, rosdistro_name, source_repo_spec.name.lower()), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - build and install"', @@ -234,7 +234,7 @@ if pull_request: '# build and run build_and_test Dockerfile', 'cd $WORKSPACE/docker_build_and_test', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t devel_build_and_test.%s_%s .' % (rosdistro_name, source_repo_spec.name.lower()), + 'docker build --force-rm --platform=linux/%s -t devel_build_and_test.%s_%s .' % (arch, rosdistro_name, source_repo_spec.name.lower()), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - build and test"', diff --git a/ros_buildfarm/templates/doc/doc_independent_job.xml.em b/ros_buildfarm/templates/doc/doc_independent_job.xml.em index 7c27f8810..54cf5fd98 100644 --- a/ros_buildfarm/templates/doc/doc_independent_job.xml.em +++ b/ros_buildfarm/templates/doc/doc_independent_job.xml.em @@ -117,7 +117,7 @@ else: 'echo "# BEGIN SECTION: Build Dockerfile - doc independent"', 'cd $WORKSPACE/docker_doc_independent', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t doc_independent .', + 'docker build --force-rm --platform=linux/amd64 -t doc_independent .', 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - doc independent"', diff --git a/ros_buildfarm/templates/doc/doc_job.xml.em b/ros_buildfarm/templates/doc/doc_job.xml.em index 3a001f788..1756c635e 100644 --- a/ros_buildfarm/templates/doc/doc_job.xml.em +++ b/ros_buildfarm/templates/doc/doc_job.xml.em @@ -178,7 +178,7 @@ else: 'echo "# BEGIN SECTION: Build Dockerfile - generating doc task"', 'cd $WORKSPACE/docker_generating_docker', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t doc_task_generation.%s_%s .' % (rosdistro_name, doc_repo_spec.name.lower()), + 'docker build --force-rm --platform=linux/%s -t doc_task_generation.%s_%s .' % (arch, rosdistro_name, doc_repo_spec.name.lower()), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - generating doc task"', @@ -218,7 +218,7 @@ else: '# build and run build_and_install Dockerfile', 'cd $WORKSPACE/docker_doc', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t doc.%s_%s .' % (rosdistro_name, doc_repo_spec.name.lower()), + 'docker build --force-rm --platform=linux/%s -t doc.%s_%s .' % (arch, rosdistro_name, doc_repo_spec.name.lower()), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - doc"', diff --git a/ros_buildfarm/templates/doc/doc_metadata_job.xml.em b/ros_buildfarm/templates/doc/doc_metadata_job.xml.em index 6485c469a..d1c5aab52 100644 --- a/ros_buildfarm/templates/doc/doc_metadata_job.xml.em +++ b/ros_buildfarm/templates/doc/doc_metadata_job.xml.em @@ -91,7 +91,7 @@ 'echo "# BEGIN SECTION: Build Dockerfile - doc metadata"', 'cd $WORKSPACE/docker_doc_metadata', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t doc_metadata.%s .' % rosdistro_name, + 'docker build --force-rm --platform=linux/amd64 -t doc_metadata.%s .' % rosdistro_name, 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - doc metadata"', diff --git a/ros_buildfarm/templates/doc/rosdoc2_job.xml.em b/ros_buildfarm/templates/doc/rosdoc2_job.xml.em index 96f7668a2..a58c4a81d 100644 --- a/ros_buildfarm/templates/doc/rosdoc2_job.xml.em +++ b/ros_buildfarm/templates/doc/rosdoc2_job.xml.em @@ -136,7 +136,7 @@ else: 'echo "# BEGIN SECTION: Build Dockerfile - generating doc task"', 'cd $WORKSPACE/docker_generating_docker', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t rosdoc2_task_generation.%s_%s .' % (rosdistro_name, doc_repo_spec.name.lower()), + 'docker build --force-rm --platform=linux/%s -t rosdoc2_task_generation.%s_%s .' % (arch, rosdistro_name, doc_repo_spec.name.lower()), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - generating doc task"', @@ -173,7 +173,7 @@ else: '# build and run build_and_install Dockerfile', 'cd $WORKSPACE/docker_doc', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t rosdoc2.%s_%s .' % (rosdistro_name, doc_repo_spec.name.lower()), + 'docker build --force-rm --platform=linux/%s -t rosdoc2.%s_%s .' % (arch, rosdistro_name, doc_repo_spec.name.lower()), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - doc"', diff --git a/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em b/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em index 5c9db409d..51d768544 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_job.xml.em @@ -121,7 +121,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config 'echo "# BEGIN SECTION: Build Dockerfile - binarydeb task"', 'cd $WORKSPACE/docker_generating_docker', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --network=host --force-rm -t binarydeb_task_generation.%s_%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, arch, pkg_name), + 'docker build --network=host --force-rm --platform=linux/%s -t binarydeb_task_generation.%s_%s_%s_%s_%s .' % (arch, rosdistro_name, os_name, os_code_name, arch, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - binarydeb task"', @@ -162,7 +162,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config '# build and run build_binarydeb Dockerfile', 'cd $WORKSPACE/docker_build_binarydeb', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --network=host --force-rm -t binarydeb_build.%s_%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, arch, pkg_name), + 'docker build --network=host --force-rm --platform=linux/%s -t binarydeb_build.%s_%s_%s_%s_%s .' % (arch, rosdistro_name, os_name, os_code_name, arch, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - build binarydeb"', diff --git a/ros_buildfarm/templates/release/deb/sourcepkg_job.xml.em b/ros_buildfarm/templates/release/deb/sourcepkg_job.xml.em index 50e712e57..ab375c406 100644 --- a/ros_buildfarm/templates/release/deb/sourcepkg_job.xml.em +++ b/ros_buildfarm/templates/release/deb/sourcepkg_job.xml.em @@ -104,7 +104,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config 'echo "# BEGIN SECTION: Build Dockerfile - generate sourcedeb"', 'cd $WORKSPACE/docker_sourcedeb', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --network=host --force-rm -t sourcedeb.%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, pkg_name), + 'docker build --network=host --force-rm --platform=linux/%s -t sourcedeb.%s_%s_%s_%s .' % (arch, rosdistro_name, os_name, os_code_name, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - generate sourcedeb"', diff --git a/ros_buildfarm/templates/release/rpm/binarypkg_job.xml.em b/ros_buildfarm/templates/release/rpm/binarypkg_job.xml.em index 8fff5ac3c..85b0c6fb4 100644 --- a/ros_buildfarm/templates/release/rpm/binarypkg_job.xml.em +++ b/ros_buildfarm/templates/release/rpm/binarypkg_job.xml.em @@ -121,7 +121,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config 'echo "# BEGIN SECTION: Build Dockerfile - build binaryrpm"', 'cd $WORKSPACE/docker_binaryrpm', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t binaryrpm.%s_%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, arch, pkg_name), + 'docker build --force-rm --platform=linux/%s -t binaryrpm.%s_%s_%s_%s_%s .' % (arch, rosdistro_name, os_name, os_code_name, arch, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - build binaryrpm"', diff --git a/ros_buildfarm/templates/release/rpm/sourcepkg_job.xml.em b/ros_buildfarm/templates/release/rpm/sourcepkg_job.xml.em index a91a89908..8bc071977 100644 --- a/ros_buildfarm/templates/release/rpm/sourcepkg_job.xml.em +++ b/ros_buildfarm/templates/release/rpm/sourcepkg_job.xml.em @@ -104,7 +104,7 @@ but disabled since the package is blacklisted (or not whitelisted) in the config 'echo "# BEGIN SECTION: Build Dockerfile - generate sourcerpm"', 'cd $WORKSPACE/docker_sourcerpm', 'python3 -u $WORKSPACE/ros_buildfarm/scripts/misc/docker_pull_baseimage.py', - 'docker build --force-rm -t sourcerpm.%s_%s_%s_%s .' % (rosdistro_name, os_name, os_code_name, pkg_name), + 'docker build --force-rm --platform=linux/%s -t sourcerpm.%s_%s_%s_%s .' % (arch, rosdistro_name, os_name, os_code_name, pkg_name), 'echo "# END SECTION"', '', 'echo "# BEGIN SECTION: Run Dockerfile - generate sourcerpm"', diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index e81b55dab..839344885 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -2,8 +2,6 @@ # same logic as in from_base_image.Dockerfile.em if vars().get('docker_image_prefix'): base_image = '%s%s:%s' % (docker_image_prefix, os_name, os_code_name) -elif arch in ['i386', 'armhf', 'arm64']: - base_image = 'osrf/%s_%s:%s' % (os_name, arch, os_code_name) else: base_image = '%s:%s' % (os_name, os_code_name) }@ diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index 88f3126da..86679a386 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -4,8 +4,6 @@ FROM @base_image @# same logic as in builder_check-docker.xml.em @[ if vars().get('docker_image_prefix')]@ FROM @(docker_image_prefix)@(os_name):@os_code_name -@[ elif arch in ['i386', 'armhf', 'arm64']]@ -FROM osrf/@(os_name)_@arch:@os_code_name @[ else]@ FROM @os_name:@os_code_name @[ end if]@ From bf4d4140970c5011b530f0aae430968371b5fd97 Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Tue, 10 Feb 2026 10:48:18 -0500 Subject: [PATCH 07/15] Use whole docker image instead of prefix Signed-off-by: Crola1702 --- ros_buildfarm/templates/snippet/builder_check-docker.xml.em | 5 +---- .../templates/snippet/from_base_image.Dockerfile.em | 6 +----- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index 839344885..171c02da5 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -1,9 +1,6 @@ @{ # same logic as in from_base_image.Dockerfile.em -if vars().get('docker_image_prefix'): - base_image = '%s%s:%s' % (docker_image_prefix, os_name, os_code_name) -else: - base_image = '%s:%s' % (os_name, os_code_name) +base_image = '%s:%s' % (vars().get('docker_image_prefix', os_name), os_code_name) }@ @(SNIPPET( 'builder_shell', diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index 86679a386..dc418b813 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -2,11 +2,7 @@ FROM @base_image @[else]@ @# same logic as in builder_check-docker.xml.em -@[ if vars().get('docker_image_prefix')]@ -FROM @(docker_image_prefix)@(os_name):@os_code_name -@[ else]@ -FROM @os_name:@os_code_name -@[ end if]@ +FROM vars().get('docker_image_prefix', @os_name):@os_code_name @[end if]@ @[if vars().get('maintainer_name')]@ LABEL maintainer "@maintainer_name" From 180de85ad20d4063b18dc76fe7d7e9c08e90e04f Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Tue, 10 Feb 2026 12:08:31 -0500 Subject: [PATCH 08/15] Extra tests commits Signed-off-by: Crola1702 --- .../templates/release/deb/binarypkg_task.Dockerfile.em | 2 +- ros_buildfarm/templates/snippet/builder_check-docker.xml.em | 2 +- ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em b/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em index 1fbd8581a..6653018a3 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_task.Dockerfile.em @@ -6,7 +6,7 @@ os_name=os_name, os_code_name=os_code_name, arch=arch, - docker_image_prefix=vars().get('docker_image_prefix'), + docker_image_prefix=docker_image_prefix, ))@ VOLUME ["/var/cache/apt/archives"] diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index 171c02da5..b5866d47b 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -1,6 +1,6 @@ @{ # same logic as in from_base_image.Dockerfile.em -base_image = '%s:%s' % (vars().get('docker_image_prefix', os_name), os_code_name) +base_image = '%s:%s' % (vars().get('docker_image_prefix', '%s' % os_name), os_code_name) }@ @(SNIPPET( 'builder_shell', diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index dc418b813..269e3dae0 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -2,7 +2,7 @@ FROM @base_image @[else]@ @# same logic as in builder_check-docker.xml.em -FROM vars().get('docker_image_prefix', @os_name):@os_code_name +FROM @docker_image_prefix:@os_code_name @[end if]@ @[if vars().get('maintainer_name')]@ LABEL maintainer "@maintainer_name" From 1c2a44e7d550235fcf6d7ff0a79d8942628e69b8 Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Thu, 12 Feb 2026 10:25:28 -0500 Subject: [PATCH 09/15] Alphabetize imports Signed-off-by: Crola1702 --- ros_buildfarm/scripts/misc/docker_pull_baseimage.py | 9 +++------ .../scripts/release/create_binarydeb_task_generator.py | 2 +- ros_buildfarm/scripts/release/generate_release_script.py | 2 +- ros_buildfarm/scripts/release/run_binarydeb_job.py | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ros_buildfarm/scripts/misc/docker_pull_baseimage.py b/ros_buildfarm/scripts/misc/docker_pull_baseimage.py index c9b9d793a..b07959676 100644 --- a/ros_buildfarm/scripts/misc/docker_pull_baseimage.py +++ b/ros_buildfarm/scripts/misc/docker_pull_baseimage.py @@ -29,8 +29,7 @@ def main(argv=sys.argv[1:]): 'Server error: Status 502 while fetching image layer', ] max_tries = 10 - rc, _ = call_docker_pull_repeatedly( - base_image, known_error_strings, max_tries) + rc, _ = call_docker_pull_repeatedly(base_image, known_error_strings, max_tries) return rc @@ -47,16 +46,14 @@ def get_base_image_from_dockerfile(dockerfile): (from_prefix, dockerfile) -def call_docker_pull_repeatedly( - base_image, known_error_strings, max_tries): +def call_docker_pull_repeatedly(base_image, known_error_strings, max_tries): for i in range(1, max_tries + 1): if i > 1: sleep_time = 5 + 2 * i print("Reinvoke 'docker pull' (%d/%d) after sleeping %s seconds" % (i, max_tries, sleep_time)) sleep(sleep_time) - rc, known_error_conditions = call_docker_pull( - base_image, known_error_strings) + rc, known_error_conditions = call_docker_pull(base_image, known_error_strings) if rc == 0 or not known_error_conditions: break print('') diff --git a/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py b/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py index 22c6388c7..30eae4abf 100644 --- a/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py +++ b/ros_buildfarm/scripts/release/create_binarydeb_task_generator.py @@ -24,6 +24,7 @@ from ros_buildfarm.argument import \ add_argument_distribution_repository_key_files from ros_buildfarm.argument import add_argument_distribution_repository_urls +from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.argument import add_argument_dockerfile_dir from ros_buildfarm.argument import add_argument_env_vars from ros_buildfarm.argument import add_argument_os_code_name @@ -32,7 +33,6 @@ from ros_buildfarm.argument import add_argument_rosdistro_index_url from ros_buildfarm.argument import add_argument_rosdistro_name from ros_buildfarm.argument import add_argument_skip_tests -from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.common import get_binary_package_versions from ros_buildfarm.common import get_distribution_repository_keys from ros_buildfarm.common import get_os_package_name diff --git a/ros_buildfarm/scripts/release/generate_release_script.py b/ros_buildfarm/scripts/release/generate_release_script.py index 5fa9a525b..424af4dae 100644 --- a/ros_buildfarm/scripts/release/generate_release_script.py +++ b/ros_buildfarm/scripts/release/generate_release_script.py @@ -19,11 +19,11 @@ from ros_buildfarm.argument import add_argument_arch from ros_buildfarm.argument import add_argument_build_name from ros_buildfarm.argument import add_argument_config_url +from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.argument import add_argument_os_code_name from ros_buildfarm.argument import add_argument_os_name from ros_buildfarm.argument import add_argument_package_name from ros_buildfarm.argument import add_argument_rosdistro_name -from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.common import get_binarydeb_job_name from ros_buildfarm.common import get_sourcedeb_job_name from ros_buildfarm.common import package_format_mapping diff --git a/ros_buildfarm/scripts/release/run_binarydeb_job.py b/ros_buildfarm/scripts/release/run_binarydeb_job.py index b5c7468ee..f2369a96a 100644 --- a/ros_buildfarm/scripts/release/run_binarydeb_job.py +++ b/ros_buildfarm/scripts/release/run_binarydeb_job.py @@ -22,6 +22,7 @@ from ros_buildfarm.argument import \ add_argument_distribution_repository_key_files from ros_buildfarm.argument import add_argument_distribution_repository_urls +from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.argument import add_argument_dockerfile_dir from ros_buildfarm.argument import add_argument_env_vars from ros_buildfarm.argument import add_argument_os_code_name @@ -32,7 +33,6 @@ from ros_buildfarm.argument import add_argument_skip_download_sourcepkg from ros_buildfarm.argument import add_argument_skip_tests from ros_buildfarm.argument import add_argument_target_repository -from ros_buildfarm.argument import add_argument_docker_image_prefix from ros_buildfarm.common import get_distribution_repository_keys from ros_buildfarm.common import get_user_id from ros_buildfarm.templates import create_dockerfile From 3877b1bfd9d71ca3f2514b955c73c9960468a3cf Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Thu, 12 Feb 2026 10:49:05 -0500 Subject: [PATCH 10/15] Address logic PR comments Signed-off-by: Crola1702 --- .../deb/binarypkg_create_task.Dockerfile.em | 18 +++++++++--------- .../snippet/builder_check-docker.xml.em | 9 ++++++++- .../snippet/from_base_image.Dockerfile.em | 18 +++++++++++++----- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em b/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em index 5c5a01e81..32e9b765f 100644 --- a/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em +++ b/ros_buildfarm/templates/release/deb/binarypkg_create_task.Dockerfile.em @@ -2,11 +2,11 @@ @(TEMPLATE( 'snippet/from_base_image.Dockerfile.em', - os_name=os_name, - os_code_name=os_code_name, - arch=arch, - docker_image_prefix=vars().get('docker_image_prefix'), - )) @ + os_name=os_name, + os_code_name=os_code_name, + arch=arch, + docker_image_prefix=vars().get('docker_image_prefix'), +))@ VOLUME ["/var/cache/apt/archives"] @@ -108,8 +108,8 @@ cmds.append( ' --distribution-repository-key-files ' + ' ' .join(['/etc/apt/keyrings/ros-buildfarm-%d.asc' % i for i in range(len(distribution_repository_keys))]) + ' --binarypkg-dir ' + binarypkg_dir + ' --env-vars ' + ' '.join(build_environment_variables) + - ' --dockerfile-dir ' + dockerfile_dir + - (' --skip-tests' if skip_tests else '') + - (' --docker-image-prefix ' + docker_image_prefix if vars().get('docker_image_prefix') else '')) - } @ + ' --dockerfile-dir ' + dockerfile_dir + + (' --skip-tests' if skip_tests else '') + + (' --docker-image-prefix ' + docker_image_prefix if vars().get('docker_image_prefix') else '')) +}@ CMD ["@(' && '.join(cmds))"] diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index b5866d47b..ad56e1be1 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -1,6 +1,13 @@ @{ # same logic as in from_base_image.Dockerfile.em -base_image = '%s:%s' % (vars().get('docker_image_prefix', '%s' % os_name), os_code_name) +base_image = '%s:%s' % ( + vars().get('docker_image_prefix') or ( + 'osrf/%s_%s' %(os_name, arch) + if arch in ('i386', 'armhf', 'arm64') + else os_name + ), + os_code_name, +) }@ @(SNIPPET( 'builder_shell', diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index 269e3dae0..af68b7dd6 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -1,9 +1,17 @@ -@[if 'base_image' in locals()]@ -FROM @base_image -@[else]@ -@# same logic as in builder_check-docker.xml.em -FROM @docker_image_prefix:@os_code_name +@[if 'base_image' not locals()]@ +@{ +base_image = '%s:%s' % ( + vars().get('docker_image_prefix') or ( + 'osrf/%s_%s' %(os_name, arch) + if arch in ('i386', 'armhf', 'arm64') + else os_name + ), + os_code_name, +) +} @[end if]@ +@# same logic as in builder_check-docker.xml.em +FROM @base_image @[if vars().get('maintainer_name')]@ LABEL maintainer "@maintainer_name" @[end if]@ From 2cfac7a7dbcb9d5c0e7047d6ea81a7122f8b4c99 Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Thu, 12 Feb 2026 11:30:27 -0500 Subject: [PATCH 11/15] Syntax fix Signed-off-by: Crola1702 --- ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index af68b7dd6..413e80428 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -1,4 +1,4 @@ -@[if 'base_image' not locals()]@ +@[if 'base_image' not in locals()]@ @{ base_image = '%s:%s' % ( vars().get('docker_image_prefix') or ( From e92c1cf10579cd069160cbc182e90d094f725bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Crist=C3=B3bal=20Arroyo?= Date: Fri, 13 Feb 2026 11:20:18 -0500 Subject: [PATCH 12/15] Update ros_buildfarm/templates/snippet/builder_check-docker.xml.em Co-authored-by: Scott K Logan --- ros_buildfarm/templates/snippet/builder_check-docker.xml.em | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index ad56e1be1..c9bb1e2c1 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -2,7 +2,7 @@ # same logic as in from_base_image.Dockerfile.em base_image = '%s:%s' % ( vars().get('docker_image_prefix') or ( - 'osrf/%s_%s' %(os_name, arch) + 'osrf/%s_%s' % (os_name, arch) if arch in ('i386', 'armhf', 'arm64') else os_name ), From 8996dc11501022ed740a6565b1e333460707b8cc Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Thu, 19 Feb 2026 08:28:49 -0500 Subject: [PATCH 13/15] Please flake8 Signed-off-by: Crola1702 --- ros_buildfarm/argument.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ros_buildfarm/argument.py b/ros_buildfarm/argument.py index 522174374..480e8f3ee 100644 --- a/ros_buildfarm/argument.py +++ b/ros_buildfarm/argument.py @@ -452,11 +452,13 @@ def add_argument_skip_tests(parser): '--skip-tests', action='store_true', help='Skip execution of tests as part of the package build process.') + def add_argument_docker_image_prefix(parser): parser.add_argument( '--docker-image-prefix', help='Prefix for the docker image (e.g. "osrf/" or "arm64v8/")') + def check_len_action(minargs, maxargs): class CheckLength(argparse.Action): From d4e56dae30a2ee0b689dec9a9462ca522d29732e Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Thu, 19 Feb 2026 10:05:02 -0500 Subject: [PATCH 14/15] Use old images for old os codenames Signed-off-by: Crola1702 --- .../templates/snippet/builder_check-docker.xml.em | 7 ++++++- .../templates/snippet/from_base_image.Dockerfile.em | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index c9bb1e2c1..e40441c2b 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -3,7 +3,12 @@ base_image = '%s:%s' % ( vars().get('docker_image_prefix') or ( 'osrf/%s_%s' % (os_name, arch) - if arch in ('i386', 'armhf', 'arm64') + if arch in ('i386', 'armhf', 'arm64') or ( + os_code_name in ( + 'artful', 'bionic', 'cosmic', 'disco', 'focal', + 'jammy', 'noble', 'wily', 'xenial', 'yakkety', + 'zesty') + ) else os_name ), os_code_name, diff --git a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em index 413e80428..99f598107 100644 --- a/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em +++ b/ros_buildfarm/templates/snippet/from_base_image.Dockerfile.em @@ -2,8 +2,13 @@ @{ base_image = '%s:%s' % ( vars().get('docker_image_prefix') or ( - 'osrf/%s_%s' %(os_name, arch) - if arch in ('i386', 'armhf', 'arm64') + 'osrf/%s_%s' % (os_name, arch) + if arch in ('i386', 'armhf', 'arm64') and ( + os_code_name in ( + 'artful', 'bionic', 'cosmic', 'disco', 'focal', + 'jammy', 'noble', 'wily', 'xenial', 'yakkety', + 'zesty') + ) else os_name ), os_code_name, From 51eaf1c0e49a1fe5542b5dc95c1be08e29040863 Mon Sep 17 00:00:00 2001 From: Crola1702 Date: Mon, 23 Feb 2026 09:54:24 -0500 Subject: [PATCH 15/15] Fix condition to use old images only on specific arch Signed-off-by: Crola1702 --- ros_buildfarm/templates/snippet/builder_check-docker.xml.em | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em index e40441c2b..1fd343da6 100644 --- a/ros_buildfarm/templates/snippet/builder_check-docker.xml.em +++ b/ros_buildfarm/templates/snippet/builder_check-docker.xml.em @@ -3,7 +3,7 @@ base_image = '%s:%s' % ( vars().get('docker_image_prefix') or ( 'osrf/%s_%s' % (os_name, arch) - if arch in ('i386', 'armhf', 'arm64') or ( + if arch in ('i386', 'armhf', 'arm64') and ( os_code_name in ( 'artful', 'bionic', 'cosmic', 'disco', 'focal', 'jammy', 'noble', 'wily', 'xenial', 'yakkety',