You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Remove `test-cmd` input (shell injection risk); hardcode default pytest command for conda/poetry/hatch
- Make `Validate pixi task` step conditional on pixi-task being set (skip when not provided)
- Fall back to default pytest/pylint command when pixi-task not specified
- Use `python` instead of `python3` for cross-platform compatibility
- Fix pixi-task-args JSON parsing to emit a clear error on invalid input
- Pass $FILES_PARAM to custom pixi task in static_analysis modified-files step
Agent-Logs-Url: https://github.com/MiraGeoscience/CI-tools/sessions/80178279-2577-46b3-a3cf-d4f46677967f
Co-authored-by: RomFloreani <270727719+RomFloreani@users.noreply.github.com>
echo "::error::Input 'pixi-task' is required when package-manager is 'pixi'."
171
-
exit 1
172
-
fi
173
-
174
-
if ! pixi task list --json | python3 -c "import json, sys; target = sys.argv[1]; data = json.load(sys.stdin); has_task = lambda node: (isinstance(node, dict) and ((node.get('name') == target and any(key in node for key in ('cmd', 'depends_on', 'cwd', 'clean_env'))) or any(has_task(value) for value in node.values()))) or (isinstance(node, list) and any(has_task(item) for item in node)); sys.exit(0 if has_task(data) else 1)" "$PIXI_TASK"; then
162
+
if ! pixi task list --json | python -c "import json, sys; target = sys.argv[1]; data = json.load(sys.stdin); has_task = lambda node: (isinstance(node, dict) and ((node.get('name') == target and any(key in node for key in ('cmd', 'depends_on', 'cwd', 'clean_env'))) or any(has_task(value) for value in node.values()))) or (isinstance(node, list) and any(has_task(item) for item in node)); sys.exit(0 if has_task(data) else 1)" "$PIXI_TASK"; then
175
163
echo "::error::Pixi task '$PIXI_TASK' is not defined in pixi.toml."
args_output=$(printf '%s' "$PIXI_TASK_ARGS" | python -c "import json, sys; data = json.load(sys.stdin); assert isinstance(data, list) and all(isinstance(x, str) for x in data), 'pixi-task-args must be a JSON array of strings'; print('\n'.join(data))") || { echo "::error::Invalid pixi-task-args. Must be a JSON array of strings."; exit 1; }
echo "::error::Input 'pixi-task' is required when package-manager is 'pixi'."
165
-
exit 1
166
-
fi
167
-
168
-
if ! pixi task list --json | python3 -c "import json, sys; target = sys.argv[1]; data = json.load(sys.stdin); has_task = lambda node: (isinstance(node, dict) and ((node.get('name') == target and any(key in node for key in ('cmd', 'depends_on', 'cwd', 'clean_env'))) or any(has_task(value) for value in node.values()))) or (isinstance(node, list) and any(has_task(item) for item in node)); sys.exit(0 if has_task(data) else 1)" "$PIXI_TASK"; then
163
+
if ! pixi task list --json | python -c "import json, sys; target = sys.argv[1]; data = json.load(sys.stdin); has_task = lambda node: (isinstance(node, dict) and ((node.get('name') == target and any(key in node for key in ('cmd', 'depends_on', 'cwd', 'clean_env'))) or any(has_task(value) for value in node.values()))) or (isinstance(node, list) and any(has_task(item) for item in node)); sys.exit(0 if has_task(data) else 1)" "$PIXI_TASK"; then
169
164
echo "::error::Pixi task '$PIXI_TASK' is not defined in pixi.toml."
170
165
exit 1
171
166
fi
@@ -181,11 +176,17 @@ jobs:
181
176
elif ${{ inputs.package-manager == 'poetry' }}; then
182
177
poetry run pylint $FILES_PARAM
183
178
elif ${{ inputs.package-manager == 'pixi' }}; then
args_output=$(printf '%s' "$PIXI_TASK_ARGS" | python -c "import json, sys; data = json.load(sys.stdin); assert isinstance(data, list) and all(isinstance(x, str) for x in data), 'pixi-task-args must be a JSON array of strings'; print('\n'.join(data))") || { echo "::error::Invalid pixi-task-args. Must be a JSON array of strings."; exit 1; }
183
+
readarray -t args <<< "$args_output"
184
+
pixi run "$PIXI_TASK" -- "${args[@]}" "${files[@]}"
185
+
else
186
+
pixi run "$PIXI_TASK" -- "${files[@]}"
187
+
fi
187
188
else
188
-
pixi run "$PIXI_TASK"
189
+
pixi run pylint "${files[@]}"
189
190
fi
190
191
else
191
192
hatch run pylint $FILES_PARAM
@@ -202,11 +203,16 @@ jobs:
202
203
elif ${{ inputs.package-manager == 'poetry' }}; then
203
204
poetry run pylint --verbose $source_dir tests
204
205
elif ${{ inputs.package-manager == 'pixi' }}; then
args_output=$(printf '%s' "$PIXI_TASK_ARGS" | python -c "import json, sys; data = json.load(sys.stdin); assert isinstance(data, list) and all(isinstance(x, str) for x in data), 'pixi-task-args must be a JSON array of strings'; print('\n'.join(data))") || { echo "::error::Invalid pixi-task-args. Must be a JSON array of strings."; exit 1; }
0 commit comments