add workflow to build for manylinux
#819
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: CI | |
on: [] | |
jobs: | |
lint: | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: > | |
-DSPIRIT_UI_USE_IMGUI=ON | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_ENABLE_PINNING=ON | |
-DSPIRIT_ENABLE_DEFECTS=ON | |
SOURCES: > | |
find | |
core/include/ | |
core/src/ | |
ui-cpp/utility/ | |
ui-cpp/ui-imgui/include/ | |
ui-cpp/ui-imgui/src/ | |
-iname *.hpp -o -iname *.cpp" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📚 Install required system packages | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y xorg-dev libglu1-mesa-dev libgtk-3-dev tree | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: 📚 Install python packages | |
run: > | |
pip install --user numpy pylint | |
"black==22.10.0" | |
"clang-format==18.1.8" | |
"clang-tidy==18.1.8" | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: 🧪 clang-format linting | |
if: always() | |
shell: bash | |
run: | | |
clang-format --version | |
OUTPUT=$($SOURCES | xargs clang-format -n 2>&1) | |
if [[ $OUTPUT ]]; then | |
echo "$OUTPUT" | |
exit 1 | |
fi | |
- name: 🧪 clang-tidy linting | |
if: always() | |
shell: bash | |
run: | | |
clang-tidy --version | |
- name: 🧪 Python code formatting check | |
shell: bash | |
run: | | |
git ls-files core/python/{,**/}*.py | xargs black --check | |
git ls-files ui-python/{,**/}*.py | xargs black --check | |
- name: 🧪 Python code quality checks, linting | |
shell: bash | |
run: pylint core/python/spirit --fail-under=8 | |
test-gcc: | |
name: gcc ${{ matrix.parallelisation }} (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-22.04 | |
- os: ubuntu-22.04 | |
parallelisation: "openmp" | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: > | |
-DCMAKE_C_COMPILER=gcc | |
-DCMAKE_CXX_COMPILER=g++ | |
-DSPIRIT_UI_USE_IMGUI=ON | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_BUILD_TEST=ON | |
OMP_NUM_THREADS: 4 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📚 Install required system packages | |
if: matrix.os == 'ubuntu-22.04' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y xorg-dev libglu1-mesa-dev libgtk-3-dev | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: 📚 Install python packages | |
run: pip install --user numpy | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
if: matrix.parallelisation == '' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: ⚙ Configure with OpenMP | |
if: matrix.parallelisation == 'openmp' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
-DSPIRIT_USE_OPENMP=ON | |
$CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 🧪 Test | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: ctest -C $BUILD_TYPE --output-on-failure | |
test-clang: | |
name: clang ${{ matrix.parallelisation }} (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-24.04 | |
parallelisation: "" | |
- os: ubuntu-24.04 | |
parallelisation: "openmp" | |
# this build cannot be configured currently | |
# - os: ubuntu-24.04 | |
# parallelisation: "cuda" | |
- os: macos-14 | |
parallelisation: "" | |
- os: macos-14 | |
parallelisation: "openmp" | |
- os: windows-2022 | |
parallelisation: "" | |
- os: windows-2022 | |
parallelisation: "openmp" | |
env: | |
BUILD_TYPE: Release | |
BUILD_SYSTEM_FLAG: ${{ matrix.os == 'windows-2022' && '-G Ninja' || '' }} | |
CMAKE_FLAGS: > | |
-DCMAKE_C_COMPILER=clang | |
-DCMAKE_CXX_COMPILER=clang++ | |
-DSPIRIT_UI_USE_IMGUI=ON | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_BUILD_TEST=ON | |
OMP_NUM_THREADS: 4 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📚 Install LLVM 17 and some libs (Ubuntu) | |
if: matrix.os == 'ubuntu-24.04' | |
shell: bash | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y xorg-dev libglu1-mesa-dev libgtk-3-dev clang-17 lldb-17 lld-17 libomp-17-dev | |
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 10 | |
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-17 10 | |
clang --version | |
- name: 📚 Install CUDA Toolkit | |
if: matrix.parallelisation == 'cuda' | |
shell: bash | |
run: | | |
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb | |
sudo dpkg -i cuda-keyring_1.1-1_all.deb | |
sudo apt-get update | |
sudo apt-get -y install cuda-toolkit-12-5 | |
echo "/usr/local/cuda-12.5/bin" >> $GITHUB_PATH | |
echo "/usr/local/cuda-12.5/lib64" >> $GITHUB_PATH | |
# Workaround, because the setup-python action doesn't set up the PATH correctly | |
- name: 📚 Install LLVM and numpy (MacOS) | |
if: matrix.os == 'macos-14' | |
shell: bash | |
run: | | |
brew update | |
brew install llvm numpy | |
echo "/usr/local/opt/llvm/bin" >> $GITHUB_PATH | |
echo "/opt/homebrew/opt/llvm/bin" >> $GITHUB_PATH | |
- name: 📚 Install LLVM and Ninja (Windows) | |
if: matrix.os == 'windows-2022' | |
shell: pwsh | |
run: | | |
choco install llvm ninja -y | |
choco upgrade llvm | |
- uses: actions/setup-python@v5 | |
if: matrix.os != 'macos-14' | |
with: | |
python-version: '3.x' | |
- name: 📚 Install python packages | |
if: matrix.os != 'macos-14' | |
run: pip install --user numpy | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
if: matrix.parallelisation == '' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
$BUILD_SYSTEM_FLAG | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
$CMAKE_FLAGS | |
- name: ⚙ Configure with CUDA | |
if: matrix.parallelisation == 'cuda' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
CUDA_PATH=/usr/local/cuda-12.5 | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_CUDA_COMPILER=clang++ | |
-DSPIRIT_CUDA_ARCH=70 | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
$CMAKE_FLAGS | |
-DSPIRIT_USE_CUDA=ON | |
- name: ⚙ Configure with OpenMP | |
if: matrix.parallelisation == 'openmp' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
$BUILD_SYSTEM_FLAG | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
$CMAKE_FLAGS | |
-DSPIRIT_USE_OPENMP=ON | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 🧪 Test | |
if: matrix.parallelisation != 'cuda' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: ctest -C $BUILD_TYPE --output-on-failure | |
test-nvcpp: | |
name: nvcpp ${{ matrix.parallelisation }} (ubuntu-22.04) | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- parallelisation: "" | |
# - parallelisation: "openmp" # Some OpenMP that Spirit uses isn't supported by nvc++ | |
- parallelisation: "cuda" | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: > | |
-DCMAKE_CXX_COMPILER=nvc++ | |
-DSPIRIT_UI_USE_IMGUI=ON | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_BUILD_TEST=ON | |
OMP_NUM_THREADS: 4 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Force upgrade to gcc-12 on Ubuntu 22.04 | |
if: matrix.os == 'ubuntu-22.04' | |
shell: bash | |
run: | | |
sudo apt-get update | |
sudo apt-get --purge remove -y "g++*" | |
sudo apt-get install -y g++-12 | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 10 | |
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 10 | |
- name: 📚 Install NVIDIA HPC SDK and some libs | |
shell: bash | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y xorg-dev libglu1-mesa-dev libgtk-3-dev | |
curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg | |
echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list | |
sudo apt-get update -y | |
sudo apt-get install -y nvhpc-24-5 | |
echo "/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/compilers/bin" >> $GITHUB_PATH | |
echo "/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/math_libs/lib64" >> $GITHUB_PATH | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: 📚 Install python packages | |
run: pip install --user numpy | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
if: matrix.parallelisation == '' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: ⚙ Configure with OpenMP | |
if: matrix.parallelisation == 'openmp' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
$CMAKE_FLAGS | |
-DSPIRIT_USE_OPENMP=ON | |
- name: ⚙ Configure with CUDA | |
if: matrix.parallelisation == 'cuda' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
$CMAKE_FLAGS | |
-DSPIRIT_USE_CUDA=ON | |
-DCUDA_TOOLKIT_ROOT_DIR=/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/cuda/ | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 🧪 Test | |
if: matrix.parallelisation != 'cuda' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: ctest -C $BUILD_TYPE --output-on-failure | |
test-msvc: | |
name: msvc (windows-2022) | |
runs-on: windows-2022 | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: > | |
-DSPIRIT_UI_USE_IMGUI=ON | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_BUILD_TEST=ON | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: 📚 Install python packages | |
run: pip install --user numpy | |
- name: ⚙ Configure | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 🧪 Test | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: ctest -C $BUILD_TYPE --output-on-failure | |
test-debug: | |
name: test debug (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-22.04 | |
- os: macos-14 | |
env: | |
BUILD_TYPE: Debug | |
CMAKE_FLAGS: > | |
-DSPIRIT_UI_USE_IMGUI=OFF | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_BUILD_TEST=ON | |
EXCLUDETESTS: solver | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: 📚 Install python packages | |
run: pip install --user numpy | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure (without coverage) | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 🧪 Test regular debug build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: ctest -C $BUILD_TYPE -E $EXCLUDETESTS --output-on-failure | |
test-coverage: | |
name: test coverage (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-22.04 | |
env: | |
BUILD_TYPE: Debug | |
CMAKE_FLAGS: > | |
-DSPIRIT_UI_USE_IMGUI=OFF | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_BUILD_TEST=ON | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: 📚 Install python packages | |
run: pip install --user numpy | |
- name: 📚 Install coverage packages | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install coverage 'coveralls<3' | |
sudo apt-get update | |
sudo apt-get install -y lcov | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure (with coverage) | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
-DSPIRIT_TEST_COVERAGE=ON | |
$CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 🧪 Generate C++ coverage | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: | | |
lcov -c -i --no-external --directory . --base-directory $GITHUB_WORKSPACE/core -o baseline.info | |
make test | |
lcov -c --no-external --directory . --base-directory $GITHUB_WORKSPACE/core -o after_test.info | |
lcov -a baseline.info -a after_test.info -o total_test.info | |
lcov -r total_test.info \*thirdparty\* \*/test/\* \*Collection\* \*DLL_\* -o coverage.info | |
- name: ⬆ Upload C++ coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
files: ${{runner.workspace}}/build/coverage.info | |
- name: 🧪 Generate Python API coverage | |
if: matrix.coverage == true | |
working-directory: ./core/python | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
coverage run --source spirit --omit=spirit/spiritlib.py \ | |
-m unittest discover \ | |
--start-directory ./test \ | |
--pattern "*.py" \ | |
> cov.txt | |
head cov.txt | |
coverage report -m | |
coverage xml | |
coveralls | |
test-other-configurations: | |
name: test ${{ matrix.configuration }} (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- configuration: "single-precision" | |
os: ubuntu-24.04 | |
- configuration: "single-precision" | |
os: macos-14 | |
- configuration: "pinning-and-defects" | |
os: ubuntu-24.04 | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: > | |
-DSPIRIT_UI_USE_IMGUI=ON | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_BUILD_TEST=ON | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: 📚 Install python packages | |
run: pip install --user numpy | |
- name: Force install of gcc-13 on Ubuntu 24.04 | |
if: matrix.os == 'ubuntu-24.04' | |
shell: bash | |
run: | | |
sudo apt-get update | |
sudo apt-get --purge remove -y "g++*" | |
sudo apt-get install -y g++-13 | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10 | |
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10 | |
- name: 📚 Install required system packages | |
if: matrix.os == 'ubuntu-24.04' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y xorg-dev libglu1-mesa-dev libgtk-3-dev | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure single-precision build | |
if: matrix.configuration == 'single-precision' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
-DSPIRIT_SCALAR_TYPE="float" | |
$CMAKE_FLAGS | |
- name: ⚙ Configure pinning-and-defects build | |
if: matrix.configuration == 'pinning-and-defects' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$Debug | |
-DSPIRIT_ENABLE_PINNING=ON | |
-DSPIRIT_ENABLE_DEFECTS=ON | |
$CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 🧪 Test | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: ctest -C $BUILD_TYPE --output-on-failure | |
build-cuda: | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- os: ubuntu-22.04 | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: > | |
-DSPIRIT_UI_USE_IMGUI=OFF | |
-DSPIRIT_UI_CXX_USE_QT=OFF | |
-DSPIRIT_USE_CUDA=ON | |
-DSPIRIT_CUDA_ARCH=70 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Force downgrade to gcc-10 on Ubuntu 22.04 to avoid a bug in gcc-11.3 header | |
if: matrix.config.os == 'ubuntu-22.04' | |
shell: bash | |
run: | | |
sudo apt-get update | |
sudo apt-get --purge remove -y "g++*" | |
sudo apt-get install -y g++-10 cmake | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10 | |
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10 | |
- name: 📚 Install CUDA | |
shell: bash | |
run: | | |
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb | |
sudo dpkg -i cuda-keyring_1.1-1_all.deb | |
sudo apt-get update | |
sudo apt-get install -y cuda-toolkit-12-4 | |
echo "/usr/local/cuda-12.4/bin" >> $GITHUB_PATH | |
echo "/usr/local/cuda-12.4/lib64" >> $GITHUB_PATH | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
CUDA_PATH=/usr/local/cuda | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
$CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
build-ui-qt: | |
runs-on: ubuntu-20.04 | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: -DSPIRIT_UI_USE_IMGUI=OFF -DSPIRIT_UI_CXX_USE_QT=ON | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📚 Install Qt5 | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y qt5-default libqt5charts5-dev | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
build-webapp: | |
name: webapp ${{ matrix.target }} (ubuntu-22.04) | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- target: "mobile" | |
- target: "desktop" | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: -DSPIRIT_BUILD_FOR_JS=ON | |
EMSCRIPTEN_VERSION: "3.1.38" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📚 Install Emscripten | |
working-directory: ${{runner.workspace}} | |
run: | | |
git clone https://github.com/emscripten-core/emsdk.git | |
cd emsdk | |
./emsdk install $EMSCRIPTEN_VERSION | |
./emsdk activate $EMSCRIPTEN_VERSION | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure (mobile) | |
if: matrix.target == 'mobile' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
source ${{runner.workspace}}/emsdk/emsdk_env.sh; | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
-DSPIRIT_UI_USE_IMGUI=OFF | |
$CMAKE_FLAGS | |
-DCMAKE_TOOLCHAIN_FILE=${{runner.workspace}}/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake | |
- name: ⚙ Configure (desktop) | |
if: matrix.target == 'desktop' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: > | |
source ${{runner.workspace}}/emsdk/emsdk_env.sh; | |
cmake $GITHUB_WORKSPACE | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE | |
-DSPIRIT_UI_USE_IMGUI=ON $CMAKE_FLAGS | |
-DCMAKE_TOOLCHAIN_FILE=${{runner.workspace}}/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: | | |
source ${{runner.workspace}}/emsdk/emsdk_env.sh | |
cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 📦 Archive mobile web app | |
if: matrix.target == 'mobile' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: webapp-mobile | |
path: ui-web/ | |
if-no-files-found: error | |
- name: 📦 Archive desktop web app | |
if: matrix.target == 'desktop' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: webapp-desktop | |
path: ui-cpp/ui-imgui/webapp/ | |
if-no-files-found: error | |
build-pypi: | |
if: github.event_name != 'pull_request' | |
needs: | |
- lint | |
- test-gcc | |
- test-clang | |
- test-nvcpp | |
- test-msvc | |
- test-debug | |
- test-coverage | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- platform: linux | |
os: ubuntu-latest | |
- platform: macos | |
os: macos-latest | |
- platform: windows | |
os: windows-latest | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: -DSPIRIT_UI_USE_IMGUI=OFF -DSPIRIT_UI_CXX_USE_QT=OFF | |
SPIRIT_ADD_VERSION_SUFFIX: true | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: ⚙ Configure environment | |
shell: bash | |
if: github.ref == 'refs/heads/master' | |
run: echo "SPIRIT_ADD_VERSION_SUFFIX=false" >> $GITHUB_ENV | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake --build . --config $BUILD_TYPE -j 2 | |
- name: 📚 Install necessary packages | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install numpy setuptools wheel twine | |
- name: 🛠 Build Python package | |
shell: bash | |
working-directory: ./core/python | |
run: | | |
echo "Python package build" | |
echo "Add suffix to spirit version tag for python package $SPIRIT_ADD_VERSION_SUFFIX" | |
python setup.py sdist bdist_wheel | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: dist-${{ matrix.platform }} | |
path: ./core/python/dist | |
if-no-files-found: error | |
deploy-pypi: | |
if: github.event_name != 'pull_request' | |
needs: ['build-pypi'] | |
environment: 'publish' | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- uses: actions/download-artifact@v4 | |
- name: 📚 Install necessary packages | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install twine | |
- name: 🚀 Deploy to TestPyPI | |
env: | |
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} | |
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} | |
if: github.ref != 'refs/heads/master' | |
run: twine upload --skip-existing --repository testpypi dist/* | |
- name: 🚀 Deploy to PyPI | |
env: | |
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} | |
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} | |
if: github.ref == 'refs/heads/master' | |
run: twine upload --skip-existing dist/* | |
deploy-package: | |
if: github.event_name != 'pull_request' | |
needs: | |
- lint | |
- test-gcc | |
- test-clang | |
- test-nvcpp | |
- test-msvc | |
- test-debug | |
- test-coverage | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
env: | |
BUILD_TYPE: Release | |
CMAKE_FLAGS: -DSPIRIT_UI_USE_IMGUI=ON -DSPIRIT_UI_CXX_USE_QT=OFF -DSPIRIT_BUNDLE_APP=ON | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📚 Install required system packages | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y xorg-dev libglu1-mesa-dev libgtk-3-dev | |
- name: 📁 Create build folder | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: ⚙ Configure | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_FLAGS | |
- name: 🛠 Build | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: | | |
cmake --build . --config $BUILD_TYPE -j 2 | |
cmake --install . | |
cmake --build . --config $BUILD_TYPE -j 2 --target package | |
- name: 📦 Archive ubuntu package | |
if: matrix.os == 'ubuntu-latest' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: spirit-ubuntu | |
path: ${{runner.workspace}}/build/*.tar.gz | |
if-no-files-found: error | |
- name: 📦 Archive macOS package | |
if: matrix.os == 'macos-latest' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: spirit-macos | |
path: | | |
${{runner.workspace}}/build/*.dmg | |
${{runner.workspace}}/build/install/README.md | |
${{runner.workspace}}/build/install/LICENSE.txt | |
${{runner.workspace}}/build/install/VERSION.txt | |
${{runner.workspace}}/build/install/licenses/ | |
if-no-files-found: error | |
- name: 📦 Archive windows package | |
if: matrix.os == 'windows-latest' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: spirit-windows | |
path: ${{runner.workspace}}/build/*.zip | |
if-no-files-found: error | |
draft-release: | |
if: github.event_name == 'push' && startsWith( github.ref, 'refs/tags/' ) | |
needs: [deploy-pypi, deploy-package, build-webapp] | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 📄 Generate a changelog | |
id: changelog | |
uses: metcalfc/changelog-generator@v1.0.0 | |
with: | |
myToken: ${{ secrets.GITHUB_TOKEN }} | |
- name: 📄 Print the changelog | |
run: echo "${{ steps.changelog.outputs.changelog }}" | |
- name: 🎉 Create draft release | |
id: draft_release | |
uses: actions/create-release@v1 | |
with: | |
tag_name: ${{ github.ref }} | |
release_name: Release ${{ github.ref }} | |
body: ${{ steps.changelog.outputs.changelog }} | |
draft: true |