mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
* Bump minimum required CMake to 3.26 Recently, dependencies using vcpkg was updated, including boost 1.86. When boost 1.86 is linked by ResInsight, the minimum required CMake version is 3.26. It is possible to manage dependencies manually without using vcpkg. In this case, the ResInsight build might work with a lower CMake requirement. This scenario is not tested by the ResInsight team. * Use minimum required version of CMake when building on GitHub Action
301 lines
11 KiB
YAML
301 lines
11 KiB
YAML
name: ResInsight Build With Cache
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
schedule:
|
|
# Every day at 1am to make sure we have a build cache for the current date
|
|
# build cache is
|
|
- cron: '0 1 * * *'
|
|
env:
|
|
BUILD_TYPE: Release
|
|
BUILDCACHE_DIR: ${{ github.workspace }}/buildcache_dir
|
|
BUILDCACHE_ACCURACY: SLOPPY
|
|
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
|
|
|
concurrency:
|
|
group: build-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ${{ matrix.config.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Release]
|
|
config:
|
|
- {
|
|
name: "Windows Latest MSVC",
|
|
os: windows-2022,
|
|
cc: "cl",
|
|
cxx: "cl",
|
|
build-python-module: false,
|
|
execute-unit-tests: true,
|
|
execute-pytests: false,
|
|
unity-build: true,
|
|
publish-to-pypi: false,
|
|
vcpkg-bootstrap: bootstrap-vcpkg.bat,
|
|
vcpkg-triplet: x64-windows-release,
|
|
qt-version: 6.6.3,
|
|
ri-unit-test-path: "ResInsight-tests",
|
|
}
|
|
- {
|
|
name: "Ubuntu 24.04 gcc",
|
|
os: ubuntu-24.04,
|
|
cc: "gcc",
|
|
cxx: "g++",
|
|
build-python-module: true,
|
|
execute-unit-tests: true,
|
|
execute-pytests: true,
|
|
unity-build: false,
|
|
publish-to-pypi: true,
|
|
vcpkg-bootstrap: bootstrap-vcpkg.sh,
|
|
vcpkg-triplet: x64-linux-release,
|
|
qt-version: 6.7.0,
|
|
ri-unit-test-path: "ResInsight-tests",
|
|
}
|
|
- {
|
|
name: "Ubuntu 22.04 clang-16",
|
|
os: ubuntu-22.04,
|
|
cc: "clang-16",
|
|
cxx: "clang++-16",
|
|
build-python-module: true,
|
|
execute-unit-tests: true,
|
|
execute-pytests: false,
|
|
unity-build: false,
|
|
publish-to-pypi: false,
|
|
vcpkg-bootstrap: bootstrap-vcpkg.sh,
|
|
vcpkg-triplet: x64-linux-release,
|
|
qt-version: 6.7.0,
|
|
ri-unit-test-path: "ResInsight-tests",
|
|
}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.11"
|
|
- name: Display Python version
|
|
run: python -c "import sys; print(sys.version)"
|
|
|
|
- name: Get Python executable path
|
|
shell: bash
|
|
id: python-path
|
|
run: echo "PYTHON_EXECUTABLE=$(python -c 'import sys; import pathlib; print (pathlib.PurePath(sys.executable).as_posix())')" >> $GITHUB_OUTPUT
|
|
|
|
- name: Print Python path
|
|
run: echo "${{ steps.python-path.outputs.PYTHON_EXECUTABLE }}"
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r GrpcInterface/Python/build-requirements.txt
|
|
|
|
- name: Use CMake
|
|
uses: lukka/get-cmake@latest
|
|
with:
|
|
cmakeVersion: "~3.26.0"
|
|
|
|
- name: Use MSVC (Windows)
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
|
|
- name: Download buildcache
|
|
id: buildcache-download
|
|
shell: cmake -P {0}
|
|
run: |
|
|
if ("${{ runner.os }}" STREQUAL "Windows")
|
|
set(buildcache_suffix "windows.zip")
|
|
elseif ("${{ runner.os }}" STREQUAL "macOS")
|
|
set(buildcache_suffix "macos.zip")
|
|
elseif ("${{ runner.os }}" STREQUAL "Linux")
|
|
set(buildcache_suffix "linux.tar.gz")
|
|
endif()
|
|
|
|
set(buildcache_url "https://gitlab.com/bits-n-bites/buildcache/-/releases/permalink/latest/downloads/buildcache-${buildcache_suffix}")
|
|
file(DOWNLOAD "${buildcache_url}" ./buildcache.zip)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./buildcache.zip)
|
|
|
|
if (NOT "${{ runner.os }}" STREQUAL "Windows")
|
|
execute_process(
|
|
COMMAND chmod +x buildcache/bin/buildcache
|
|
)
|
|
endif()
|
|
|
|
- name: Get current time
|
|
uses: josStorer/get-current-time@v2
|
|
id: current-time
|
|
with:
|
|
format: YYYY-MM-DD
|
|
|
|
- name: Print time stamp
|
|
run: echo "timestamp ${{ steps.current-time.outputs.formattedTime }}"
|
|
|
|
- name: Cache Buildcache
|
|
id: cache-buildcache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ env.BUILDCACHE_DIR }}
|
|
key: ${{ matrix.config.os }}-${{ matrix.config.cc }}-cache-v03-${{ steps.current-time.outputs.formattedTime }}
|
|
- name: Create Folder for buildcache
|
|
run: New-Item ${{ env.BUILDCACHE_DIR }} -ItemType "directory" -Force
|
|
shell: pwsh
|
|
- name: Add buildcache to system path
|
|
run: echo "${{github.workspace}}/buildcache/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
|
|
shell: pwsh
|
|
|
|
- name: Set apt mirror
|
|
# see https://github.com/actions/runner-images/issues/7048
|
|
if: contains( matrix.config.os, 'ubuntu')
|
|
run: |
|
|
# make sure there is a `\t` between URL and `priority:*` attributes
|
|
printf 'http://azure.archive.ubuntu.com/ubuntu priority:1\n' | sudo tee /etc/apt/mirrors.txt
|
|
curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
|
|
sudo sed -i 's/http:\/\/azure.archive.ubuntu.com\/ubuntu\//mirror+file:\/etc\/apt\/mirrors.txt/' /etc/apt/sources.list
|
|
|
|
- name: Install Linux dependencies
|
|
if: contains( matrix.config.os, 'ubuntu')
|
|
run: |
|
|
sudo apt-get update --option="APT::Acquire::Retries=3"
|
|
sudo apt-get install --option="APT::Acquire::Retries=3" libxkbcommon-x11-0 libgl1-mesa-dev mesa-common-dev libglfw3-dev libglu1-mesa-dev libhdf5-dev
|
|
|
|
- name: Install clang-16
|
|
if: contains( matrix.config.cc, 'clang')
|
|
run: |
|
|
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11
|
|
sudo apt-get upgrade
|
|
wget https://apt.llvm.org/llvm.sh
|
|
sudo chmod +x llvm.sh
|
|
sudo ./llvm.sh 16 all
|
|
|
|
- name: Install Qt
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: ${{ matrix.config.qt-version }}
|
|
dir: "${{ github.workspace }}/Qt/"
|
|
cache: true
|
|
modules: "qtnetworkauth qtcharts"
|
|
|
|
- name: Export GitHub Actions cache environment variables
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
|
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
|
|
|
- name: Replace and use vcpkg.json without grpc
|
|
if: contains( matrix.config.os, 'windows')
|
|
run: |
|
|
cp vcpkg_no_grpc.json vcpkg.json
|
|
|
|
- name: vcpkg bootstrap
|
|
run: |
|
|
ThirdParty/vcpkg/${{ matrix.config.vcpkg-bootstrap }}
|
|
|
|
- name: Configure
|
|
shell: bash
|
|
env:
|
|
CC: ${{ matrix.config.cc }}
|
|
CXX: ${{ matrix.config.cxx }}
|
|
run: >
|
|
cmake -S . -B cmakebuild
|
|
-DVCPKG_BUILD_TYPE=release
|
|
-DVCPKG_TARGET_TRIPLET=${{ matrix.config.vcpkg-triplet }}
|
|
-DCMAKE_INSTALL_PREFIX=cmakebuild/install
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
|
|
-DRESINSIGHT_QT5_BUNDLE_LIBRARIES=true
|
|
-DRESINSIGHT_INCLUDE_APPLICATION_UNIT_TESTS=true
|
|
-DRESINSIGHT_TREAT_WARNINGS_AS_ERRORS=true
|
|
-DRESINSIGHT_ENABLE_PRECOMPILED_HEADERS=false
|
|
-DRESINSIGHT_ENABLE_UNITY_BUILD=${{ matrix.config.unity-build }}
|
|
-DRESINSIGHT_ENABLE_GRPC=${{ matrix.config.build-python-module }}
|
|
-DRESINSIGHT_GRPC_PYTHON_EXECUTABLE=${{ steps.python-path.outputs.PYTHON_EXECUTABLE }}
|
|
-DRESINSIGHT_GRPC_DOWNLOAD_PYTHON_MODULE=true
|
|
-DRESINSIGHT_ENABLE_HDF5=false
|
|
-DRESINSIGHT_BUILD_LIBS_FROM_SOURCE=false
|
|
-DCMAKE_TOOLCHAIN_FILE=ThirdParty/vcpkg/scripts/buildsystems/vcpkg.cmake
|
|
-G Ninja
|
|
|
|
- name: Build
|
|
run: |
|
|
cmake --build cmakebuild --target install
|
|
|
|
- name: Stats for buildcache
|
|
run: ${{ github.workspace }}/buildcache/bin/buildcache -s
|
|
|
|
- name: Run Unit Tests
|
|
if: matrix.config.execute-unit-tests
|
|
shell: bash
|
|
run: |
|
|
echo "Content of unit test folder "
|
|
ls cmakebuild/${{ matrix.config.ri-unit-test-path }}
|
|
cmakebuild/${{ matrix.config.ri-unit-test-path }}
|
|
|
|
- name: (Python) Check types using mypy
|
|
if: matrix.config.build-python-module
|
|
shell: bash
|
|
run: |
|
|
${{ steps.python-path.outputs.PYTHON_EXECUTABLE }} -m pip install mypy types-protobuf
|
|
cd GrpcInterface/Python/rips
|
|
${{ steps.python-path.outputs.PYTHON_EXECUTABLE }} -m mypy *.py generated/generated_classes.py
|
|
|
|
- name: Run pytest
|
|
if: matrix.config.execute-pytests
|
|
env:
|
|
RESINSIGHT_EXECUTABLE: ${{ runner.workspace }}/ResInsight/cmakebuild/ResInsight
|
|
run: |
|
|
cd GrpcInterface/Python
|
|
python setup.py sdist
|
|
cd rips
|
|
${{ steps.python-path.outputs.PYTHON_EXECUTABLE }} -m pytest --console
|
|
|
|
- name: Upload python distribution folder
|
|
if: matrix.config.publish-to-pypi
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: python-distribution
|
|
path: GrpcInterface/Python/dist
|
|
retention-days: 5
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ResInsight-${{ matrix.config.name }}
|
|
path: ${{ runner.workspace }}/ResInsight/cmakebuild/install
|
|
retention-days: 5
|
|
|
|
pypi-publish:
|
|
name: Upload release to PyPI
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
environment:
|
|
name: pypi
|
|
url: https://pypi.org/p/rips
|
|
permissions:
|
|
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
|
|
|
|
# If this is a tagged release
|
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
|
|
|
|
steps:
|
|
- name: Download python distribution folder
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: python-distribution
|
|
path: dist
|
|
|
|
- name: Display structure of downloaded files
|
|
run: ls -R
|
|
|
|
- name: Publish Python package to pypi
|
|
# https://docs.pypi.org/trusted-publishers/adding-a-publisher/
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
# uncomment the two lines below to publish to test PyPi
|
|
# with:
|
|
# repository-url: https://test.pypi.org/legacy/
|
|
|