Update build docker container workflow, opensuse dockerfiles (#1883)

## Motivation

<!-- Explain the purpose of this PR and the goals it aims to achieve. -->

- __Reduced Code Duplication__: Version parsing logic moved from individual Dockerfiles to the central build script
- __Improved Edge Case Handling__: Better handling of ROCm versions with and without patch numbers (e.g., `6.2` vs `6.2.0`)
- __Easier Maintenance__: Future version-related changes only need to be made in one place
- __Cleaner Dockerfiles__: Simplified Dockerfiles focus on package installation rather than complex shell logic
- __Updated Platform Support__: Refreshed container matrix to reflect current platform/ROCm version combinations
- __Fix OpenSUSE Docker Generation__: OpenSUSE container generation fails due to a change to the `binutils-gold` package
- __Error Handling__: Fix bug where errors in docker image build were being masked, allowing workflow to pass anyway.


## Technical Details

<!-- Explain the changes along with any relevant GitHub links. -->
- Updated `Dockerfile.opensuse` and `Dockerfile.opensuse.ci` docker files to remove `binutils-gold`
  - Not needed since we build `binutils` with systems anyways
- Updated `rocprofiler-systems-containers.yml` to remove `pushd/popd` commands and just run the shell scripts
  - There was a silent failure observed here, which I verified in this PR before adding the fix for openSUSE
- Refactor ROCm version parsing. Move this logic to the `build-docker.sh` script to reduce duplication.
  - Fix bug that caused ROCm 7.0 to fail installation. The trailing `.0` was being trimmed.
- Fixed inconsistencies in `containers.yml` that lead to invalid ROCm-OS_VERSION combinations.
- Formatting fixes 
  - Removed trailing whitespace
  - Fix docker build warnings. Use an `=` rather than ` ` when assigning an environment variable.
Этот коммит содержится в:
Jason Bonnell
2025-12-04 23:33:15 -05:00
коммит произвёл GitHub
родитель 0f76bb45c7
Коммит 463126770a
8 изменённых файлов: 63 добавлений и 64 удалений
+8 -12
Просмотреть файл
@@ -69,7 +69,7 @@ jobs:
with:
username: ${{ secrets.ROCPROF_SYS_DOCKER_LOGIN }}
password: ${{ secrets.ROCPROF_SYS_DOCKER_TOKEN }}
- name: Build CI Container (PR - No Push)
if: github.event_name == 'pull_request'
timeout-minutes: 45
@@ -79,7 +79,7 @@ jobs:
timeout_minutes: 45
max_attempts: 3
command: |
pushd projects/rocprofiler-systems/docker
cd projects/rocprofiler-systems/docker
./build-docker-ci.sh \
--distro ${{ matrix.distro }} \
--versions ${{ matrix.version }} \
@@ -87,7 +87,6 @@ jobs:
--jobs 2 \
--elfutils-version 0.188 \
--boost-version 1.79.0
popd
- name: Build Base Container (Push)
if: github.event_name != 'pull_request'
@@ -98,7 +97,7 @@ jobs:
timeout_minutes: 45
max_attempts: 3
command: |
pushd projects/rocprofiler-systems/docker
cd projects/rocprofiler-systems/docker
./build-docker-ci.sh \
--distro ${{ matrix.distro }} \
--versions ${{ matrix.version }} \
@@ -107,7 +106,6 @@ jobs:
--elfutils-version 0.188 \
--boost-version 1.79.0 \
--push
popd
prepare_matrix_release:
if: github.repository == 'ROCm/rocm-systems'
@@ -126,7 +124,7 @@ jobs:
run: |
MATRIX_CONTENT=$(cat containers.yml | yq '.matrix' -I=0 -o=json)
echo "matrix_data=$MATRIX_CONTENT" >> $GITHUB_OUTPUT
rocprofiler-systems-release:
needs: prepare_matrix_release
runs-on: ubuntu-latest
@@ -135,7 +133,7 @@ jobs:
fail-fast: false
matrix:
include: ${{ fromJSON(needs.prepare_matrix_release.outputs.matrix_data) }}
steps:
- uses: actions/checkout@v4
with:
@@ -162,14 +160,13 @@ jobs:
timeout_minutes: 45
max_attempts: 3
command: |
pushd projects/rocprofiler-systems/docker
cd projects/rocprofiler-systems/docker
./build-docker.sh \
--distro ${{ matrix.os-distro }} \
--versions ${{ matrix.os-version }} \
--rocm-versions ${{ matrix.rocm-version }} \
--user ${{ secrets.ROCPROF_SYS_DOCKER_LOGIN }}
popd
- name: Build Base Container (Push)
if: github.event_name != 'pull_request'
timeout-minutes: 45
@@ -179,11 +176,10 @@ jobs:
timeout_minutes: 45
max_attempts: 3
command: |
pushd projects/rocprofiler-systems/docker
cd projects/rocprofiler-systems/docker
./build-docker.sh \
--distro ${{ matrix.os-distro }} \
--versions ${{ matrix.os-version }} \
--rocm-versions ${{ matrix.rocm-version }} \
--user ${{ secrets.ROCPROF_SYS_DOCKER_LOGIN }} \
--push
popd
+16 -19
Просмотреть файл
@@ -2,16 +2,16 @@ ARG DISTRO=opensuse/leap
ARG VERSION=15.5
FROM ${DISTRO}:${VERSION}
ENV HOME /root
ENV SHELL /bin/bash
ENV BASH_ENV /etc/bash.bashrc
ENV DEBIAN_FRONTEND noninteractive
ENV HOME=/root
ENV SHELL=/bin/bash
ENV BASH_ENV=/etc/bash.bashrc
ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /tmp
SHELL [ "/bin/bash", "-c" ]
ENV PATH /usr/local/bin:${PATH}
ENV LIBRARY_PATH ${LIBRARY_PATH}:/opt/amdgpu/lib64
ENV PATH=/usr/local/bin:${PATH}
ENV LIBRARY_PATH=${LIBRARY_PATH}:/opt/amdgpu/lib64
RUN set +e; \
zypper --non-interactive -i --gpg-auto-import-keys refresh; \
@@ -23,28 +23,25 @@ RUN set +e; \
RUN zypper --non-interactive update -y && \
zypper --non-interactive dist-upgrade -y && \
zypper --non-interactive install -y -t pattern devel_basis && \
zypper --non-interactive install -y binutils-gold chrpath cmake curl dpkg-devel \
gcc-c++ gcc-fortran git gmock gtest iproute2 libdrm-devel libnuma-devel ninja \
nlohmann_json-devel openmpi3-devel python3-pip rpm-build \
zypper --non-interactive install -y chrpath cmake curl dpkg-devel \
gcc-c++ gcc-fortran git gmock gtest iproute2 libdrm-devel libnuma-devel \
ninja nlohmann_json-devel openmpi3-devel python3-pip rpm-build \
sqlite3-devel wget && \
python3 -m pip install 'cmake==3.21'
ARG ROCM_VERSION=0.0
ARG ROCM_MAJOR=0
ARG ROCM_MINOR=0
ARG ROCM_PATCH=0
ARG ROCM_VERSION_URL=0.0
ARG ROCM_VERSN=0
RUN ROCM_MAJOR=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $1}') && \
ROCM_MINOR=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $2}') && \
if [ "${ROCM_MAJOR}" != "0" ] || [ "${ROCM_MINOR}" != "0" ]; then \
RUN if [ "${ROCM_MAJOR}" != "0" ] || [ "${ROCM_MINOR}" != "0" ]; then \
OS_VERSION=$(grep '^VERSION_ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"') && \
OS_VERSION_MAJOR=$(echo "$OS_VERSION" | cut -d'.' -f1) && \
OS_VERSION_MINOR=$(echo "$OS_VERSION" | cut -d'.' -f2) && \
ROCM_PATCH=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $3}') && \
if [ -z "${ROCM_PATCH}" ] || [ "${ROCM_PATCH}" = "0" ]; then \
ROCM_PATCH=0 && \
ROCM_VERSION=$(echo "${ROCM_VERSION}" | sed 's/\.0$//') \
; fi && \
ROCM_VERSN=$(( ("${ROCM_MAJOR}"*10000)+("${ROCM_MINOR}"*100) + ("${ROCM_PATCH}"))) && \
zypper --non-interactive addrepo https://download.opensuse.org/repositories/devel:languages:perl/15.6/devel:languages:perl.repo && \
zypper --non-interactive --no-gpg-checks install -y https://repo.radeon.com/amdgpu-install/${ROCM_VERSION}/sle/${OS_VERSION}/amdgpu-install-${ROCM_MAJOR}.${ROCM_MINOR}.${ROCM_VERSN}-1.noarch.rpm && \
zypper --non-interactive --no-gpg-checks install -y https://repo.radeon.com/amdgpu-install/${ROCM_VERSION_URL}/sle/${OS_VERSION}/amdgpu-install-${ROCM_MAJOR}.${ROCM_MINOR}.${ROCM_VERSN}-1.noarch.rpm && \
zypper --non-interactive --gpg-auto-import-keys refresh && \
zypper --non-interactive install -y rocm-dev rccl-devel libpciaccess0 && \
zypper --non-interactive clean --all; \
+4 -4
Просмотреть файл
@@ -27,10 +27,10 @@ RUN set +e; \
RUN zypper --non-interactive update -y && \
zypper --non-interactive dist-upgrade -y && \
zypper --non-interactive install -y -t pattern devel_basis && \
zypper --non-interactive install -y binutils-gold chrpath cmake curl dpkg-devel \
gcc-c++ gcc-fortran git gmock gtest iproute2 libnuma-devel ninja nlohmann_json-devel \
openmpi3-devel papi-devel python3-devel python3-pip \
rpm-build sqlite3-devel vim wget && \
zypper --non-interactive install -y chrpath cmake curl dpkg-devel \
gcc-c++ gcc-fortran git gmock gtest iproute2 ninja nlohmann_json-devel \
openmpi3-devel papi-devel python3-devel python3-pip rpm-build \
sqlite3-devel vim wget && \
zypper --non-interactive clean --all && \
python3 -m pip install 'cmake==3.21' perfetto
+7 -10
Просмотреть файл
@@ -23,22 +23,19 @@ RUN yum groupinstall -y "Development Tools" && \
python3 -m pip install 'perfetto'
ARG ROCM_VERSION=0.0
ARG ROCM_MAJOR=0
ARG ROCM_MINOR=0
ARG ROCM_PATCH=0
ARG ROCM_VERSION_URL=0.0
ARG ROCM_VERSN=0
RUN ROCM_MAJOR=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $1}') && \
ROCM_MINOR=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $2}') && \
if [ "${ROCM_MAJOR}" != "0" ] || [ "${ROCM_MINOR}" != "0" ]; then \
RUN if [ "${ROCM_MAJOR}" != "0" ] || [ "${ROCM_MINOR}" != "0" ]; then \
OS_VERSION=$(grep '^VERSION_ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"') && \
OS_VERSION_MAJOR=$(echo "$OS_VERSION" | cut -d'.' -f1) && \
RPM_TAG=".el${OS_VERSION_MAJOR}" && \
ROCM_PATCH=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $3}') && \
if [ -z "${ROCM_PATCH}" ] || [ "${ROCM_PATCH}" = "0" ]; then \
ROCM_PATCH=0 && \
ROCM_VERSION=$(echo "${ROCM_VERSION}" | sed 's/\.0$//') \
; fi && \
ROCM_VERSN=$(( ("${ROCM_MAJOR}"*10000)+("${ROCM_MINOR}"*100) + ("${ROCM_PATCH}"))) && \
if [ "${OS_VERSION_MAJOR}" -eq 8 ]; then PERL_REPO=powertools; else PERL_REPO=crb; fi && \
dnf -y --enablerepo=${PERL_REPO} install perl-File-BaseDir && \
yum install -y https://repo.radeon.com/amdgpu-install/${ROCM_VERSION}/rhel/${OS_VERSION}/amdgpu-install-${ROCM_MAJOR}.${ROCM_MINOR}.${ROCM_VERSN}-1${RPM_TAG}.noarch.rpm && \
yum install -y https://repo.radeon.com/amdgpu-install/${ROCM_VERSION_URL}/rhel/${OS_VERSION}/amdgpu-install-${ROCM_MAJOR}.${ROCM_MINOR}.${ROCM_VERSN}-1${RPM_TAG}.noarch.rpm && \
yum install -y rocm-dev && \
yum clean all; \
fi
+7 -10
Просмотреть файл
@@ -16,6 +16,11 @@ SHELL [ "/bin/bash", "-c" ]
ARG EXTRA_PACKAGES=""
ARG ROCM_VERSION="0.0"
ARG ROCM_MAJOR=0
ARG ROCM_MINOR=0
ARG ROCM_PATCH=0
ARG ROCM_VERSION_URL=0.0
ARG ROCM_VERSN=0
ENV PATH=${HOME}/.local/bin:${PATH}
RUN apt-get update && \
@@ -33,19 +38,11 @@ RUN apt-get update && \
python3 -m pip install --break-system-packages 'cmake==3.21' perfetto; \
fi
RUN ROCM_MAJOR=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $1}') && \
ROCM_MINOR=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $2}') && \
if [ "${ROCM_MAJOR}" != "0" ] || [ "${ROCM_MINOR}" != "0" ]; then \
RUN if [ "${ROCM_MAJOR}" != "0" ] || [ "${ROCM_MINOR}" != "0" ]; then \
OS_VERSION=$(grep '^VERSION_ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"') && \
OS_CODENAME=$(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2) && \
ROCM_PATCH=$(echo "${ROCM_VERSION}" | sed 's/\./ /g' | awk '{print $3}') && \
if [ -z "${ROCM_PATCH}" ] || [ "${ROCM_PATCH}" = "0" ]; then \
ROCM_PATCH=0 && \
ROCM_VERSION=$(echo "${ROCM_VERSION}" | sed 's/\.0$//') \
; fi && \
ROCM_VERSN=$(( ("${ROCM_MAJOR}"*10000)+("${ROCM_MINOR}"*100) + ("${ROCM_PATCH}"))) && \
AMDGPU_DEB="amdgpu-install_${ROCM_MAJOR}.${ROCM_MINOR}.${ROCM_VERSN}-1_all.deb" && \
wget https://repo.radeon.com/amdgpu-install/${ROCM_VERSION}/ubuntu/${OS_CODENAME}/${AMDGPU_DEB} && \
wget https://repo.radeon.com/amdgpu-install/${ROCM_VERSION_URL}/ubuntu/${OS_CODENAME}/${AMDGPU_DEB} && \
apt-get install -y ./${AMDGPU_DEB} && \
apt-get update && \
apt-get install -y rocm-dev rccl-dev libpciaccess0 ${EXTRA_PACKAGES} && \
+18 -4
Просмотреть файл
@@ -320,10 +320,24 @@ do
VERSION_PATCH=$(echo ${VERSION} | sed 's/\./ /g' | awk '{print $3}')
for ROCM_VERSION in ${ROCM_VERSIONS}
do
# Parse ROCm version components
ROCM_MAJOR=$(echo ${ROCM_VERSION} | sed 's/\./ /g' | awk '{print $1}')
ROCM_MINOR=$(echo ${ROCM_VERSION} | sed 's/\./ /g' | awk '{print $2}')
ROCM_PATCH=$(echo ${ROCM_VERSION} | sed 's/\./ /g' | awk '{print $3}')
if [ "${ROCM_PATCH}" = "0" ] || [ -z "${ROCM_PATCH}" ]; then
# Compute ROCM_VERSION_URL (for repo URLs) and normalize ROCM_PATCH
ROCM_VERSION_URL="${ROCM_VERSION}"
if [ -z "${ROCM_PATCH}" ]; then
ROCM_PATCH=0
elif [ "${ROCM_PATCH}" = "0" ]; then
ROCM_VERSION_URL="${ROCM_MAJOR}.${ROCM_MINOR}"
fi
# Compute ROCM_VERSN (numeric version for package names)
ROCM_VERSN=$(( ("${ROCM_MAJOR}"*10000)+("${ROCM_MINOR}"*100) + ("${ROCM_PATCH}")))
# Determine container tag
if [ "${ROCM_PATCH}" = "0" ]; then
CONTAINER=${USER}/rocprofiler-systems:release-base-${DISTRO}-${VERSION}-rocm-${ROCM_MAJOR}.${ROCM_MINOR}
else
CONTAINER=${USER}/rocprofiler-systems:release-base-${DISTRO}-${VERSION}-rocm-${ROCM_VERSION}
@@ -339,11 +353,11 @@ do
*)
;;
esac
verbose-build docker build . ${PULL} --progress plain -f ${DOCKER_FILE} --tag ${CONTAINER} --build-arg DISTRO=${DISTRO} --build-arg VERSION=${VERSION} --build-arg ROCM_VERSION=${ROCM_VERSION} --build-arg PYTHON_VERSIONS=\"${PYTHON_VERSIONS}\"
verbose-build docker build . ${PULL} --progress plain -f ${DOCKER_FILE} --tag ${CONTAINER} --build-arg DISTRO=${DISTRO} --build-arg VERSION=${VERSION} --build-arg ROCM_VERSION=${ROCM_VERSION} --build-arg ROCM_MAJOR=${ROCM_MAJOR} --build-arg ROCM_MINOR=${ROCM_MINOR} --build-arg ROCM_PATCH=${ROCM_PATCH} --build-arg ROCM_VERSION_URL=${ROCM_VERSION_URL} --build-arg ROCM_VERSN=${ROCM_VERSN} --build-arg PYTHON_VERSIONS=\"${PYTHON_VERSIONS}\"
elif [ "${DISTRO}" = "rhel" ]; then
# use Rocky Linux as a base image for RHEL builds
DISTRO_BASE_IMAGE=rockylinux/rockylinux
verbose-build docker build . ${PULL} --progress plain -f ${DOCKER_FILE} --tag ${CONTAINER} --build-arg DISTRO=${DISTRO_BASE_IMAGE} --build-arg VERSION=${VERSION} --build-arg ROCM_VERSION=${ROCM_VERSION} --build-arg PYTHON_VERSIONS=\"${PYTHON_VERSIONS}\"
verbose-build docker build . ${PULL} --progress plain -f ${DOCKER_FILE} --tag ${CONTAINER} --build-arg DISTRO=${DISTRO_BASE_IMAGE} --build-arg VERSION=${VERSION} --build-arg ROCM_VERSION=${ROCM_VERSION} --build-arg ROCM_MAJOR=${ROCM_MAJOR} --build-arg ROCM_MINOR=${ROCM_MINOR} --build-arg ROCM_PATCH=${ROCM_PATCH} --build-arg ROCM_VERSION_URL=${ROCM_VERSION_URL} --build-arg ROCM_VERSN=${ROCM_VERSN} --build-arg PYTHON_VERSIONS=\"${PYTHON_VERSIONS}\"
elif [ "${DISTRO}" = "opensuse" ]; then
DISTRO_IMAGE="opensuse/leap"
if [[ "${VERSION_MAJOR}" -le 15 && "${VERSION_MINOR}" -le 5 ]]; then
@@ -351,7 +365,7 @@ do
else
PERL_REPO="${VERSION_MAJOR}.${VERSION_MINOR}"
fi
verbose-build docker build . ${PULL} --progress plain -f ${DOCKER_FILE} --tag ${CONTAINER} --build-arg DISTRO=${DISTRO_IMAGE} --build-arg VERSION=${VERSION} --build-arg ROCM_VERSION=${ROCM_VERSION} --build-arg PERL_REPO=${PERL_REPO} --build-arg PYTHON_VERSIONS=\"${PYTHON_VERSIONS}\"
verbose-build docker build . ${PULL} --progress plain -f ${DOCKER_FILE} --tag ${CONTAINER} --build-arg DISTRO=${DISTRO_IMAGE} --build-arg VERSION=${VERSION} --build-arg ROCM_VERSION=${ROCM_VERSION} --build-arg ROCM_MAJOR=${ROCM_MAJOR} --build-arg ROCM_MINOR=${ROCM_MINOR} --build-arg ROCM_PATCH=${ROCM_PATCH} --build-arg ROCM_VERSION_URL=${ROCM_VERSION_URL} --build-arg ROCM_VERSN=${ROCM_VERSN} --build-arg PERL_REPO=${PERL_REPO} --build-arg PYTHON_VERSIONS=\"${PYTHON_VERSIONS}\"
fi
if [ "${PUSH}" -ne 0 ]; then
docker push ${CONTAINER}
+2 -4
Просмотреть файл
@@ -44,9 +44,6 @@ matrix:
- os-distro: "opensuse"
os-version: "15.6"
rocm-version: "6.4"
- os-distro: "opensuse"
os-version: "15.6"
rocm-version: "7.0"
# RHEL 8.10
- os-distro: "rhel"
os-version: "8.10"
@@ -83,6 +80,7 @@ matrix:
- os-distro: "rhel"
os-version: "9.5"
rocm-version: "6.4"
# RHEL 9.6
- os-distro: "rhel"
os-version: "9.5"
os-version: "9.6"
rocm-version: "7.0"
+1 -1
Просмотреть файл
@@ -35,7 +35,7 @@
: ${LIBGCC:="ON"}
: ${LIBSTDCXX:="ON"}
: ${MAX_THREADS:=2048}
: ${PERFETTO_TOOLS:="ON"}
: ${PERFETTO_TOOLS:="OFF"}
: ${HIDDEN_VIZ:="ON"}
: ${PYTHON_VERSIONS:="6 7 8 9 10 11 12 13"}
: ${GENERATORS:="STGZ DEB RPM"}