mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
The cache on GitHub is limited to 10 GB. Recent versions of vcpkg includes debug symbols in Windows release builds, and creates really huge binary libraries. To make sure the binaries fit into the cache, the debug symbols are removed from both debug and release builds.
296 lines
10 KiB
YAML
296 lines
10 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: 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/
|
|
|