diff --git a/create_jenkins_job.py b/create_jenkins_job.py index 062288b8..47fcc567 100755 --- a/create_jenkins_job.py +++ b/create_jenkins_job.py @@ -108,6 +108,7 @@ def main(argv=None): 'ci_scripts_default_branch': args.ci_scripts_default_branch, 'default_repos_url': DEFAULT_REPOS_URL, 'supplemental_repos_url': '', + 'pixi_toml_url': '', 'time_trigger_spec': '', 'mailer_recipients': '', 'ignore_rmw_default': {'rmw_fastrtps_dynamic_cpp'}, diff --git a/job_templates/ci_job.xml.em b/job_templates/ci_job.xml.em index cb515835..c7867a1d 100644 --- a/job_templates/ci_job.xml.em +++ b/job_templates/ci_job.xml.em @@ -27,6 +27,7 @@ ci_scripts_default_branch=ci_scripts_default_branch, default_repos_url=default_repos_url, supplemental_repos_url=supplemental_repos_url, + pixi_toml_url=pixi_toml_url, ignore_rmw_default=ignore_rmw_default, use_connext_debs_default=use_connext_debs_default, use_isolated_default=use_isolated_default, @@ -98,6 +99,7 @@ use_fastrtps_dynamic: ${build.buildVariableResolver.resolve('CI_USE_FASTRTPS_DYN ci_branch: ${build.buildVariableResolver.resolve('CI_SCRIPTS_BRANCH')},
repos_url: ${build.buildVariableResolver.resolve('CI_ROS2_REPOS_URL')},
supplemental_repos_url: ${build.buildVariableResolver.resolve('CI_ROS2_SUPPLEMENTAL_REPOS_URL')},
+pixi_toml_url: ${build.buildVariableResolver.resolve('CI_PIXI_TOML_URL')},
colcon_branch: ${build.buildVariableResolver.resolve('CI_COLCON_BRANCH')},
use_whitespace: ${build.buildVariableResolver.resolve('CI_USE_WHITESPACE_IN_PATHS')},
isolated: ${build.buildVariableResolver.resolve('CI_ISOLATED')},
@@ -248,6 +250,9 @@ set /p RELEASE_VERSION=< release_version.txt rem "Put current date in Dockerfile to force cache invalidation once per day" powershell "(Get-Content ${Env:DOCKERFILE}).replace('@@today_str', $(Get-Date).ToLongDateString()) | Set-Content ${Env:DOCKERFILE}" set BUILD_ARGS=--build-arg WINDOWS_RELEASE_VERSION=%RELEASE_VERSION% --build-arg ROS_DISTRO=%CI_ROS_DISTRO% +if "!CI_PIXI_TOML_URL!" NEQ "" ( + set "BUILD_ARGS=!BUILD_ARGS! --build-arg PIXI_TOML_URL=%CI_PIXI_TOML_URL%" +) docker build %BUILD_ARGS% -t %CONTAINER_NAME% -f %DOCKERFILE% windows_docker_resources || exit /b !ERRORLEVEL! echo "# END SECTION" diff --git a/job_templates/ci_launcher_job.xml.em b/job_templates/ci_launcher_job.xml.em index 479541f4..0131d51e 100644 --- a/job_templates/ci_launcher_job.xml.em +++ b/job_templates/ci_launcher_job.xml.em @@ -26,6 +26,7 @@ ci_scripts_default_branch=ci_scripts_default_branch, default_repos_url=default_repos_url, supplemental_repos_url=supplemental_repos_url, + pixi_toml_url=pixi_toml_url, ignore_rmw_default=ignore_rmw_default, use_connext_debs_default=use_connext_debs_default, use_isolated_default=use_isolated_default, diff --git a/job_templates/packaging_job.xml.em b/job_templates/packaging_job.xml.em index e61f0581..36c190b5 100644 --- a/job_templates/packaging_job.xml.em +++ b/job_templates/packaging_job.xml.em @@ -29,6 +29,7 @@ ci_scripts_default_branch=ci_scripts_default_branch, default_repos_url=default_repos_url, supplemental_repos_url=supplemental_repos_url, + pixi_toml_url=pixi_toml_url, ubuntu_distro=ubuntu_distro, el_release=el_release, ros_distro=ros_distro, @@ -104,6 +105,7 @@ ubuntu_distro: ${build.buildVariableResolver.resolve('CI_UBUNTU_DISTRO')},
el_release: ${build.buildVariableResolver.resolve('CI_EL_RELEASE')},
@[end if]@ ros_distro: ${build.buildVariableResolver.resolve('CI_ROS_DISTRO')},
+pixi_toml_url: ${build.buildVariableResolver.resolve('CI_PIXI_TOML_URL')},
branch: ${build.buildVariableResolver.resolve('CI_BRANCH_TO_TEST')},
ci_branch: ${build.buildVariableResolver.resolve('CI_SCRIPTS_BRANCH')},
repos_url: ${build.buildVariableResolver.resolve('CI_ROS2_REPOS_URL')},
@@ -244,6 +246,9 @@ set /p RELEASE_VERSION=< release_version.txt rem "Put current date in Dockerfile to force cache invalidation once per day" powershell "(Get-Content ${Env:DOCKERFILE}).replace('@@today_str', $(Get-Date).ToLongDateString()) | Set-Content ${Env:DOCKERFILE}" set BUILD_ARGS=--build-arg WINDOWS_RELEASE_VERSION=%RELEASE_VERSION% --build-arg ROS_DISTRO=%CI_ROS_DISTRO% +if "!CI_PIXI_TOML_URL!" NEQ "" ( + set "BUILD_ARGS=!BUILD_ARGS! --build-arg PIXI_TOML_URL=!CI_PIXI_TOML_URL!%" +) docker build %BUILD_ARGS% -t %CONTAINER_NAME% -f %DOCKERFILE% windows_docker_resources || exit /b !ERRORLEVEL! echo "# END SECTION" diff --git a/job_templates/snippet/property_parameter-definition.xml.em b/job_templates/snippet/property_parameter-definition.xml.em index 2be1b77b..f0be1af1 100644 --- a/job_templates/snippet/property_parameter-definition.xml.em +++ b/job_templates/snippet/property_parameter-definition.xml.em @@ -5,6 +5,7 @@ ci_scripts_default_branch=ci_scripts_default_branch, default_repos_url=default_repos_url, supplemental_repos_url=supplemental_repos_url, + pixi_toml_url=pixi_toml_url, ubuntu_distro=ubuntu_distro, el_release=el_release, ros_distro=ros_distro, diff --git a/job_templates/snippet/property_parameter-definition_common.xml.em b/job_templates/snippet/property_parameter-definition_common.xml.em index 8e0c9367..6f3336f9 100644 --- a/job_templates/snippet/property_parameter-definition_common.xml.em +++ b/job_templates/snippet/property_parameter-definition_common.xml.em @@ -32,6 +32,14 @@ Use this instead of the Custom .repos file if you want to add to the default rep @supplemental_repos_url false + + CI_PIXI_TOML_URL + Custom pixi.toml file URL to use instead of the default pixi.toml file. +For example, copy the content of pixi.toml to use instead of the default in a gist, then pass the raw URL here. +The pixi.toml file defines the Pixi environment configuration for the build. + @(pixi_toml_url) + false + CI_COLCON_BRANCH Use a specific branch of the colcon repositories. diff --git a/windows_docker_resources/Dockerfile b/windows_docker_resources/Dockerfile index ea09b934..809f900e 100644 --- a/windows_docker_resources/Dockerfile +++ b/windows_docker_resources/Dockerfile @@ -18,6 +18,10 @@ ARG WINDOWS_RELEASE_VERSION=$WINDOWS_RELEASE_ID # Use --isolation=process if you need to build in a mounted volume FROM mcr.microsoft.com/windows/server:$WINDOWS_RELEASE_VERSION +# Set ROS distro value and pixi.toml url +ARG ROS_DISTRO=rolling +ARG PIXI_TOML_URL=https://raw.githubusercontent.com/ros2/ros2/refs/heads/${ROS_DISTRO}/pixi.toml + # Enable long paths on folders RUN powershell -noexit "New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1 -PropertyType DWORD -Force" @@ -48,9 +52,9 @@ RUN powershell -noexit "$bindir = Join-Path $Env:USERPROFILE\.pixi 'bin' ; $path RUN echo "@today_str" # Install dependencies via pixi -ARG ROS_DISTRO=rolling WORKDIR C:\pixi_ws -RUN powershell -noexit irm https://raw.githubusercontent.com/ros2/ros2/refs/heads/%ROS_DISTRO%/pixi.toml -OutFile pixi.toml +RUN powershell -Command "if (-not $env:PIXI_TOML_URL.StartsWith('https://')) { Write-Error 'PIXI_TOML_URL must use HTTPS protocol'; exit 1 }" +ADD ${PIXI_TOML_URL} pixi.toml RUN pixi --color never --no-progress -q install RUN pixi --color never --no-progress -q list