Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

154 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# Copyright Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
# Install Python runtime by --os-profile (optional) and emit PYTHON_CMD for CI.
#
# Package mapping by os_profile (default: distro python3 on PATH):
#
# - ubuntu* / debian* -> apt: python3, python3-venv, python3-pip -> PYTHON_CMD=python3
# - sles* -> zypper: python313, python313-pip (SLE/BCI; unversioned python3 / python3-pip are not valid package names) -> PYTHON_CMD=python3.13
# - rhel8 -> dnf: python3.12, python3.12-pip -> PYTHON_CMD=python3.12
# - else (e.g. UBI 10 / RHEL-like) -> dnf: python3, python3-pip -> PYTHON_CMD=python3
#
# Optional --python-version X.Y (e.g. 3.12): install that stream where supported
# (apt + dnf). Use on UBI 9 / RHEL 9 when default python3 is older than you need.
# rhel8 defaults to 3.12 when --python-version is omitted.
# On SLES, --python-version is ignored (zypper names vary); distro python3 is used.
#
# Use --install-runtime in CI so Python install lives in this script (not the workflow
# prerequisites). The workflow may run a tiny bootstrap if python3 is missing before
# calling this script.
#
# --output-format matches get_s3_config.py: env, json, github.
#
# Sample usage
# ------------
#
# CI (install + append PYTHON_CMD to GITHUB_ENV directly):
#
# bash build_tools/packaging/linux/setup_python_cmd.sh \
# --os-profile ubuntu2404 --install-runtime
#
# UBI 9 / older RHEL-like: pin 3.12 from AppStream / repos:
#
# bash build_tools/packaging/linux/setup_python_cmd.sh \
# --os-profile rhel9 --python-version 3.12 --install-runtime >> "$GITHUB_ENV"
#
# Emit PYTHON_CMD only (no package install):
#
# bash build_tools/packaging/linux/setup_python_cmd.sh --os-profile rhel10 --output-format json
set -euo pipefail
# Defaults
OS_PROFILE=""
INSTALL_RUNTIME=false
OUTPUT_FORMAT="github"
PY_MM="" # e.g. 3.12 when --python-version set; empty = distro default python3
# Parse arguments
while [[ $# -gt 0 ]]; do
case "$1" in
--os-profile)
OS_PROFILE="$2"
shift 2
;;
--install-runtime)
INSTALL_RUNTIME=true
shift
;;
--python-version)
PY_MM="$2"
shift 2
;;
--output-format)
OUTPUT_FORMAT="$2"
shift 2
;;
*)
echo "Unknown option: $1" >&2
exit 1
;;
esac
done
if [[ -z "$OS_PROFILE" ]]; then
echo "Error: --os-profile is required" >&2
exit 1
fi
# Trim whitespace; lowercase for glob matching (e.g. SLES16 must match sles*)
OS_PROFILE="${OS_PROFILE#"${OS_PROFILE%%[![:space:]]*}"}"
OS_PROFILE="${OS_PROFILE%"${OS_PROFILE##*[![:space:]]}"}"
OS_PLC="${OS_PROFILE,,}"
if [[ -n "$PY_MM" ]] && ! [[ "$PY_MM" =~ ^[0-9]+\.[0-9]+$ ]]; then
echo "Error: --python-version must be MAJOR.MINOR (e.g. 3.12)" >&2
exit 1
fi
# UBI 8 / RHEL 8: default python3 may be older than CI needs; pin 3.12 unless overridden.
if [[ -z "$PY_MM" ]] && [[ "$OS_PLC" == "rhel8" ]]; then
PY_MM="3.12"
fi
if [[ -n "$PY_MM" ]]; then
PYTHON_CMD="python${PY_MM}"
elif [[ "$OS_PLC" == sles* ]]; then
# SLE/BCI: no installable "python3" metapackage; use python313 -> python3.13
PYTHON_CMD="python3.13"
else
PYTHON_CMD="python3"
fi
# Install Python and pip with apt/zypper/dnf
# SLES uses zypper names python313, not deb-style python3.13).
install_python_runtime() {
local os_profile="$1"
if [[ "$os_profile" == ubuntu* ]] || [[ "$os_profile" == debian* ]]; then
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update -qq >&2
sudo apt-get install -y --no-install-recommends \
"$PYTHON_CMD" \
"${PYTHON_CMD}-venv" \
"${PYTHON_CMD}-pip" >&2
elif [[ "$os_profile" == sles* ]]; then
if [[ -n "$PY_MM" ]]; then
echo "Warning: --python-version is not applied on SLES; using python313 stack" >&2
fi
zypper --non-interactive refresh >&2
zypper --non-interactive install -y \
python313 \
python313-pip >&2
else
# dnf: UBI 9 / RHEL 9 default python3 may be < 3.12; use --python-version 3.12 when needed
dnf install -y --allowerasing \
"$PYTHON_CMD" \
"${PYTHON_CMD}-pip" >&2
fi
}
# Install first so emitted PYTHON_CMD exists on PATH for later workflow steps
if [[ "$INSTALL_RUNTIME" == true ]]; then
install_python_runtime "$OS_PLC"
fi
# Emit output in requested format
case "$OUTPUT_FORMAT" in
json)
echo "{\"python_cmd\": \"$PYTHON_CMD\"}"
;;
github)
echo "PYTHON_CMD=$PYTHON_CMD" >> "$GITHUB_ENV"
;;
env)
echo "export PYTHON_CMD=$PYTHON_CMD"
;;
*)
echo "Error: Unknown output format: $OUTPUT_FORMAT" >&2
exit 1
;;
esac