Skip to content

Commit

Permalink
#97: CI refactoring to remove duplicate commands
Browse files Browse the repository at this point in the history
  • Loading branch information
tlamonthezie committed Sep 6, 2024
1 parent 82fa119 commit 1fe56ca
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 137 deletions.
89 changes: 9 additions & 80 deletions .github/workflows/build-and-test-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
VT_TV_OUTPUT_DIR: ${{ github.workspace }}/output
VT_TV_TESTS_OUTPUT_DIR: ${{ github.workspace }}/output/tests
VT_TV_ARTIFACTS_DIR: /tmp/artifacts
CONDA_PATH: /opt/miniconda # ~/miniconda3
CONDA_PREFIX: /opt/miniconda3
CC: ~
CXX: ~
GCOV: ~
Expand Down Expand Up @@ -117,7 +117,7 @@ jobs:
path: |
${{ env.VTK_SRC_DIR }}
${{ env.VTK_BUILD_DIR }}
${{ env.CONDA_PATH }}
${{ env.CONDA_PREFIX }}
~/.zshrc
~/.bash_profile
key: ${{ env.CACHE_KEY }}
Expand All @@ -126,46 +126,9 @@ jobs:
- name: Setup Miniconda3
if: ${{steps.base-cache.outputs.cache-hit != 'true'}}
run: |
mkdir -p ~/miniconda3
if [[ $(uname -a) == *"Darwin"* ]]; then
if [[ $(arch) == 'arm64' ]]; then
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda.sh
else
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh -o ~/miniconda.sh
fi
else
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o ~/miniconda.sh
fi
bash ~/miniconda.sh -b -u -p ${{ env.CONDA_PATH }}
rm -rf ~/miniconda.sh
${{ env.CONDA_PATH }}/bin/conda init bash
${{ env.CONDA_PATH }}/bin/conda init zsh
if [ -f ~/.zshrc ]; then
. ~/.zshrc
fi
if [ -f ~/.profile ]; then
. ~/.profile
fi
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
echo "Conda path: $(which conda)"
echo "Conda version: $(conda --version)"
PYTHON_VERSIONS=(`echo '${{ join(matrix.host.python) }}' | sed 's/,/\n/g'`)
for python_version in "${PYTHON_VERSIONS[@]}"
do
echo "::group::Create conda environment (py${python_version})"
conda create -y -n py${python_version} python=${python_version}
. ${{ env.CONDA_PATH }}/etc/profile.d/conda.sh && conda activate py${python_version}
echo "Python version: $(python --version)"
pip install nanobind
conda deactivate
echo "::endgroup::"
done
sudo CONDA_PREFIX=${{ env.CONDA_PREFIX }}
PYTHON_VERSIONS=${{ join(matrix.host.python) }}
./ci/setup_conda.sh
- name: Setup VTK ${{ matrix.host.vtk }}
if: ${{steps.base-cache.outputs.cache-hit != 'true'}}
Expand All @@ -176,9 +139,6 @@ jobs:
- name: Build
run: |
cd ${{ github.workspace }}
chmod +x ./ci/build.sh
mkdir -p ${{ env.VT_TV_BUILD_DIR }}
CC="${{ env.CC }}" \
Expand All @@ -191,56 +151,25 @@ jobs:
GCOV="${{ env.GCOV }}" \
VT_TV_PYTHON_BINDINGS_ENABLED=OFF \
VT_TV_WERROR_ENABLED=ON \
./build.sh
bash ./build.sh
- name: Test
run: |
cd ${{ github.workspace }}
chmod +x ./ci/test.sh
VTK_DIR=${{ env.VTK_BUILD_DIR }} \
VT_TV_COVERAGE_ENABLED=${{ env.VT_TV_COVERAGE_ENABLED }} \
VT_TV_OUTPUT_DIR="${{ env.VT_TV_OUTPUT_DIR }}" \
./ci/test.sh
bash ./ci/test.sh
- name: Build Python package (${{ join(matrix.host.python, ', ') }})
run: |
cd ${{ github.workspace }}
chmod +x ./ci/python_build.sh
PYTHON_VERSIONS=(`echo '${{ join(matrix.host.python) }}' | sed 's/,/\n/g'`)
export VTK_DIR=${{ env.VTK_BUILD_DIR }}
for python_version in "${PYTHON_VERSIONS[@]}"
do
echo "::group::Build Python package (${python_version})"
VTK_DIR=${{ env.VTK_BUILD_DIR }} \
CONDA_PATH=${{ env.CONDA_PATH }} \
VT_TV_CONDA_ENV=py${python_version} \
./ci/python_build.sh
echo "::endgroup::"
done
VTK_DIR=${{ env.VTK_BUILD_DIR }} bash ./ci/python_build.sh
- name: Test Python bindings (${{ join(matrix.host.python) }})
run: |
cd ${{ github.workspace }}
chmod +x ./ci/python_test.sh
# Create vizualization output directory (required).
sudo mkdir -p ${{ env.VT_TV_OUTPUT_DIR }}/python_tests
PYTHON_VERSIONS=(`echo '${{ join(matrix.host.python) }}' | sed 's/,/\n/g'`)
for python_version in "${PYTHON_VERSIONS[@]}"
do
# Clear vizualization output directory
rm -rf ${{ env.VT_TV_OUTPUT_DIR }}/python_tests/*
echo "::group::Test Python Bindings (${python_version})"
CONDA_PATH=${{ env.CONDA_PATH }} \
VT_TV_CONDA_ENV=py${python_version} \
VT_TV_OUTPUT_DIR="${{ env.VT_TV_OUTPUT_DIR }}/python_tests" \
./ci/python_test.sh
echo "::endgroup::"
done
VTK_DIR=${{ env.VTK_BUILD_DIR }} bash ./ci/python_test.sh
- name: Collect artifacts
run: |
Expand Down
4 changes: 1 addition & 3 deletions ci/docker/build-and-test-ubuntu.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ ARG VT_TV_TEST_PYTHON_BINDINGS=OFF

FROM ${BASE_IMAGE} AS base

# setup requirements for rendering tests (xvfb) + coverage report (lcov)
RUN apt-get update && apt-get install -y

COPY . /opt/src/vt-tv
RUN mkdir -p /opt/build/vt-tv

Expand All @@ -30,6 +27,7 @@ RUN mkdir -p /opt/src/vt-tv/output/python_tests
RUN bash /opt/src/vt-tv/ci/python_build.sh
RUN bash /opt/src/vt-tv/ci/python_test.sh


# Artifacts
FROM scratch AS artifacts
COPY --from=test-cpp /tmp/artifacts /tmp/artifacts
Expand Down
43 changes: 12 additions & 31 deletions ci/docker/make-base-ubuntu.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,17 @@ FROM ${BASE_IMAGE} AS base

# Arguments
ARG VTK_VERSION=9.2.2
ARG PYTHON_VERSION=3.8
ARG PYTHON_VERSIONS=3.8,3.9,3.10,3.11,3.12
ARG CC=gcc-11
ARG CXX=g++-11
ARG GCOV=gcov-11

# Copy scripts

RUN mkdir -p /opt/scripts
COPY ci/setup_mesa.sh /opt/scripts/setup_mesa.sh
COPY ci/vtk_build.sh /opt/scripts/vtk_build.sh
COPY ci/setup_mesa.sh /opt/scripts/setup_conda.sh
COPY ci/setup_vtk.sh /opt/scripts/setup_vtk.sh

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y -q && \
Expand Down Expand Up @@ -52,40 +54,19 @@ RUN apt-get update -y -q && \
RUN bash /opt/scripts/setup_mesa.sh
RUN xvfb-run bash -c "glxinfo | grep 'OpenGL version'"

RUN PYTHON_VERSIONS=${PYTHON_VERSIONS} bash /opt/scripts/setup_conda.sh

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Share environment variables for use in images based on this.
# Setup compiler using environment variables
ENV CC=/usr/bin/$CC
ENV CXX=/usr/bin/$CXX
ENV GCOV=/usr/bin/$GCOV
ENV VTK_DIR=/opt/build/vtk

# Setup python 3.8 with conda

# Download and install Miniconda
RUN curl -LO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda && \
rm Miniconda3-latest-Linux-x86_64.sh

# Update PATH so that conda and the installed packages are usable
ENV PATH="/opt/conda/bin:${PATH}"

# Create a new environment and install necessary packages
RUN conda create -y -n deves python=${PYTHON_VERSION} && \
echo "source activate deves" > ~/.bashrc && \
/bin/bash -c ". /opt/conda/etc/profile.d/conda.sh && conda activate deves && pip install nanobind"

# Set the environment to deves on container run
ENV CONDA_DEFAULT_ENV=deves
ENV CONDA_PREFIX=/opt/conda/envs/$CONDA_DEFAULT_ENV
ENV PATH=$PATH:$CONDA_PREFIX/bin
ENV CONDA_AUTO_UPDATE_CONDA=false

# Clone VTK source
RUN mkdir -p /opt/src/vtk
RUN git clone --recursive --branch v${VTK_VERSION} https://gitlab.kitware.com/vtk/vtk.git /opt/src/vtk

# Build VTK
RUN VTK_DIR=${VTK_DIR} bash /opt/scripts/vtk_build.sh
# Setup VTK
RUN VTK_VERSION=${VTK_VERSION} \
VTK_DIR=${VTK_DIR} \
VTK_SRC_DIR=/opt/src/vtk \
bash /opt/scripts/setup_vtk.sh

RUN echo "Base creation success"
24 changes: 15 additions & 9 deletions ci/python_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,22 @@ set -ex
CURRENT_DIR="$(dirname -- "$(realpath -- "$0")")"
PARENT_DIR="$(dirname "$CURRENT_DIR")"

CONDA_PATH=${CONDA_PATH:-/opt/conda}
VT_TV_CONDA_ENV=${VT_TV_CONDA_ENV:-deves}
VT_TV_SRC_DIR=${VT_TV_SRC_DIR:-$PARENT_DIR}

# Activate conda environment
. ${CONDA_PATH}/etc/profile.d/conda.sh && conda activate $VT_TV_CONDA_ENV
for env in $(conda env list | grep py | cut -d" " -f1); do if == "#" ; then continue; fi;
# Clear vizualization output directory
rm -rf $VT_TV_OUTPUT_DIR/python_tests/*

# Build
pip install PyYAML
pip install $VT_TV_SRC_DIR
echo "::group::Test Python Bindings (${python_version})"

# Deactivate conda environment
conda deactivate
# Activate conda environment
. $CONDA_PREFIX/etc/profile.d/conda.sh && conda activate env

# Build
pip install PyYAML
pip install $VT_TV_SRC_DIR

conda deactivate

echo "::endgroup::"
done
38 changes: 27 additions & 11 deletions ci/python_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,35 @@ set -ex
CURRENT_DIR="$(dirname -- "$(realpath -- "$0")")"
PARENT_DIR="$(dirname "$CURRENT_DIR")"

CONDA_PATH=${CONDA_PATH:-/opt/conda}
VT_TV_CONDA_ENV=${VT_TV_CONDA_ENV:-deves}
VT_TV_SRC_DIR=${VT_TV_SRC_DIR:-$PARENT_DIR}
VT_TV_OUTPUT_DIR=${VT_TV_OUTPUT_DIR:-"$VT_TV_SRC_DIR/output"}

# Activate conda environment
. ${CONDA_PATH}/etc/profile.d/conda.sh && conda activate $VT_TV_CONDA_ENV
pushd $VT_TV_SRC_DIR
chmod +x ./ci/python_test.sh

# Create vizualization output directory (required).
sudo mkdir -p $VT_TV_OUTPUT_DIR/python_tests

# Run test
if [[ $(uname -a) != *"Darwin"* ]]; then
# Start virtual display (Linux)
xvfb-run python $VT_TV_SRC_DIR/tests/test_bindings.py
else
python $VT_TV_SRC_DIR/tests/test_bindings.py
fi
for env in $(conda env list | grep py | cut -d" " -f1); do if == "#" ; then continue; fi;
# Clear vizualization output directory
rm -rf $VT_TV_OUTPUT_DIR/python_tests/*

echo "::group::Test Python Bindings (${python_version})"

# Activate conda environment
. $CONDA_PREFIX/etc/profile.d/conda.sh && conda activate env

# Run test
if [[ $(uname -a) != *"Darwin"* ]]; then
# Start virtual display (Linux)
xvfb-run python $VT_TV_SRC_DIR/tests/test_bindings.py
else
python $VT_TV_SRC_DIR/tests/test_bindings.py
fi

conda deactivate

echo "::endgroup::"
done

popd
53 changes: 53 additions & 0 deletions ci/setup_conda.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash

# This script installs Conda and setup conda environments on the host machine for the given python versions
# Example: setup_conda.sh 3.8,3.9,3.10,3.11,3.12

$CONDA_PREFIX=${CONDA_PREFIX:-/opt/conda}

echo "Installing conda to $CONDA_PREFIX..."
echo "::group::Install conda at $CONDA_PREFIX"
mkdir -p ~/miniconda3
if [[ $(uname -a) == *"Darwin"* ]]; then
if [[ $(arch) == 'arm64' ]]; then
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda.sh
else
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh -o ~/miniconda.sh
fi
else
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o ~/miniconda.sh
fi
bash ~/miniconda.sh -b -u -p $$CONDA_PREFIX
rm -rf ~/miniconda.sh

$CONDA_PREFIX/bin/conda init bash
$CONDA_PREFIX/bin/conda init zsh
if [ -f ~/.zshrc ]; then
. ~/.zshrc
fi
if [ -f ~/.profile ]; then
. ~/.profile
fi
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

echo "Conda path: $(which conda)"
echo "Conda version: $(conda --version)"

echo "::endgroup::"

PYTHON_VERSIONS=${1:"-3.8,3.9,3.10,3.11,3.12"}
PYTHON_VERSIONS=(`echo $PYTHON_VERSIONS | sed 's/,/\n/g'`)

for python_version in "${PYTHON_VERSIONS[@]}"
do
echo "::group::Create conda environment (py${python_version})"
conda create -y -n py${python_version} python=${python_version}

. $CONDA_PREFIX/etc/profile.d/conda.sh && conda activate py${python_version}
echo "Python version: $(python --version)"
pip install nanobind
conda deactivate
echo "::endgroup::"
done
4 changes: 2 additions & 2 deletions ci/setup_mesa.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

# This script installs Mesa libraries and utilities

. /etc/lsb-release

# Ubuntu 24.04 FIX.
# FIX MESA driver (Ubuntu 24.04).
# Error: MESA: error: ZINK: vkCreateInstance failed (VK_ERROR_INCOMPATIBLE_DRIVER)
. /etc/lsb-release
if [ "$DISTRIB_RELEASE" == "24.04" ]; then
echo "FIX: Using latest MESA drivers (dev) for Ubuntu 24.04 to fix MESA errors !"
add-apt-repository ppa:oibaf/graphics-drivers -y
Expand Down
7 changes: 6 additions & 1 deletion ci/vtk_build.sh → ci/setup_vtk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ set -ex

VTK_SRC_DIR=${VTK_SRC_DIR:-"/opt/src/vtk"}
VTK_DIR=${VTK_DIR:-"/opt/build/vtk"}
VTK_VERSION=${VTK_VERSION:-"9.3.1"}

echo "Setup VTK $VTK_VERSION from source..."
git clone --recursive --branch v${VTK_VERSION} https://gitlab.kitware.com/vtk/vtk.git /opt/src/vtk

mkdir -p $VTK_DIR
pushd $VTK_DIR
Expand All @@ -18,5 +22,6 @@ cmake \
cmake --build "$VTK_DIR" -j$(nproc)

echo "VTK build success"

popd

echo "VTK $VTK_VERSION has been installed successfully."

0 comments on commit 1fe56ca

Please sign in to comment.