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