@@ -72,10 +72,13 @@ jobs:
7272 train_image : ${{ steps.contract.outputs.train_image }}
7373 inference_image : ${{ steps.contract.outputs.inference_image }}
7474 train_pkg_mgr : ${{ steps.contract.outputs.train_pkg_mgr }}
75+ train_env_name : ${{ steps.contract.outputs.train_env_name }}
7576 train_env_path : ${{ steps.contract.outputs.train_env_path }}
7677 inference_pkg_mgr : ${{ steps.contract.outputs.inference_pkg_mgr }}
78+ inference_env_name : ${{ steps.contract.outputs.inference_env_name }}
7779 inference_env_path : ${{ steps.contract.outputs.inference_env_path }}
7880 serve_pkg_mgr : ${{ steps.contract.outputs.serve_pkg_mgr }}
81+ serve_env_name : ${{ steps.contract.outputs.serve_env_name }}
7982 serve_env_path : ${{ steps.contract.outputs.serve_env_path }}
8083 steps :
8184 - name : Checkout source
@@ -169,10 +172,13 @@ jobs:
169172 inference_image=$(/usr/local/bin/yq -r \
170173 '.ci_inference_image // .ci_image // ""' "$config_file")
171174 train_pkg_mgr=""
175+ train_env_name=""
172176 train_env_path=""
173177 inference_pkg_mgr=""
178+ inference_env_name=""
174179 inference_env_path=""
175180 serve_pkg_mgr=""
181+ serve_env_name=""
176182 serve_env_path=""
177183
178184 for raw_task in "${task_names[@]}"; do
@@ -265,15 +271,36 @@ jobs:
265271 if jq -e 'index("inference") != null' <<< "$test_roles" >/dev/null; then
266272 required_roles+=(inference serve)
267273 fi
274+ reference_role="${required_roles[0]}"
268275 for role in "${required_roles[@]}"; do
269276 pkg_mgr=$(jq -r --arg role "$role" \
270277 '.test_environments[$role].pkg_mgr // ""' <<< "$entry")
278+ env_name=$(jq -r --arg role "$role" \
279+ '.test_environments[$role].env_name // ""' <<< "$entry")
271280 env_path=$(jq -r --arg role "$role" \
272281 '.test_environments[$role].env_path // ""' <<< "$entry")
273282 if [ -z "$pkg_mgr" ] || [ -z "$env_path" ]; then
274283 echo "::error::Missing test_environments.${role} for ${PLATFORM}/${task}"
275284 exit 1
276285 fi
286+ case "$pkg_mgr" in
287+ conda|pip|uv) ;;
288+ *)
289+ echo "::error::Unsupported test environment package manager: ${PLATFORM}/${task}/${role}: $pkg_mgr"
290+ exit 1
291+ ;;
292+ esac
293+ if [ "$pkg_mgr" = conda ] && [ -z "$env_name" ]; then
294+ echo "::error::Missing test_environments.${role}.env_name for ${PLATFORM}/${task}"
295+ exit 1
296+ fi
297+ if ! jq -e --arg role "$role" \
298+ --arg reference_role "$reference_role" \
299+ '.test_environments[$role] == .test_environments[$reference_role]' \
300+ <<< "$entry" >/dev/null; then
301+ echo "::error::All image test roles must share one environment: ${PLATFORM}/${task}"
302+ exit 1
303+ fi
277304 done
278305 fi
279306
@@ -345,6 +372,7 @@ jobs:
345372 if [ "$all_task_selected" != true ] || [ "$task" = all ]; then
346373 train_image="$candidate"
347374 train_pkg_mgr=$(jq -r '.test_environments.train.pkg_mgr // ""' <<< "$entry")
375+ train_env_name=$(jq -r '.test_environments.train.env_name // ""' <<< "$entry")
348376 train_env_path=$(jq -r '.test_environments.train.env_path // ""' <<< "$entry")
349377 fi
350378 candidate_test_roles=$((candidate_test_roles + 1))
@@ -353,8 +381,10 @@ jobs:
353381 if [ "$all_task_selected" != true ] || [ "$task" = all ]; then
354382 inference_image="$candidate"
355383 inference_pkg_mgr=$(jq -r '.test_environments.inference.pkg_mgr // ""' <<< "$entry")
384+ inference_env_name=$(jq -r '.test_environments.inference.env_name // ""' <<< "$entry")
356385 inference_env_path=$(jq -r '.test_environments.inference.env_path // ""' <<< "$entry")
357386 serve_pkg_mgr=$(jq -r '.test_environments.serve.pkg_mgr // ""' <<< "$entry")
387+ serve_env_name=$(jq -r '.test_environments.serve.env_name // ""' <<< "$entry")
358388 serve_env_path=$(jq -r '.test_environments.serve.env_path // ""' <<< "$entry")
359389 fi
360390 candidate_test_roles=$((candidate_test_roles + 1))
@@ -381,10 +411,13 @@ jobs:
381411 echo "train_image=$train_image"
382412 echo "inference_image=$inference_image"
383413 echo "train_pkg_mgr=$train_pkg_mgr"
414+ echo "train_env_name=$train_env_name"
384415 echo "train_env_path=$train_env_path"
385416 echo "inference_pkg_mgr=$inference_pkg_mgr"
417+ echo "inference_env_name=$inference_env_name"
386418 echo "inference_env_path=$inference_env_path"
387419 echo "serve_pkg_mgr=$serve_pkg_mgr"
420+ echo "serve_env_name=$serve_env_name"
388421 echo "serve_env_path=$serve_env_path"
389422 } >> "$GITHUB_OUTPUT"
390423
@@ -622,8 +655,11 @@ jobs:
622655 ci_train_image : ${{ needs.configure.outputs.train_image }}
623656 ci_inference_image : ${{ needs.configure.outputs.inference_image }}
624657 train_pkg_mgr : ${{ needs.configure.outputs.train_pkg_mgr }}
658+ train_env_name : ${{ needs.configure.outputs.train_env_name }}
625659 train_env_path : ${{ needs.configure.outputs.train_env_path }}
626660 inference_pkg_mgr : ${{ needs.configure.outputs.inference_pkg_mgr }}
661+ inference_env_name : ${{ needs.configure.outputs.inference_env_name }}
627662 inference_env_path : ${{ needs.configure.outputs.inference_env_path }}
628663 serve_pkg_mgr : ${{ needs.configure.outputs.serve_pkg_mgr }}
664+ serve_env_name : ${{ needs.configure.outputs.serve_env_name }}
629665 serve_env_path : ${{ needs.configure.outputs.serve_env_path }}
0 commit comments