Skip to content

GRIDEDIT-893: make curvilinear grid indexing consistent #876

GRIDEDIT-893: make curvilinear grid indexing consistent

GRIDEDIT-893: make curvilinear grid indexing consistent #876

Workflow file for this run

name: Build and test on macos
on:
push:
branches:
- master
- "release/v[0-9].[0-9].[0-9]"
pull_request:
types:
- opened # triggers build when opened
- synchronize # triggers build when commits are pushed to HEAD
branches:
- master
- "release/v[0-9].[0-9].[0-9]"
- "feature/**"
# Manual trigger
workflow_dispatch:
jobs:
build:
# Build strategy
strategy:
fail-fast: false
matrix:
platform:
# - ubuntu-latest
- macos-latest
- macos-13-xlarge
build_type:
- 'Release'
#- 'Debug'
#- 'DebugWithRelInfo '
# Build platform
runs-on: ${{ matrix.platform }}
name: ${{ matrix.platform }}-${{ matrix.build_type }}
# The default compiler on macos is clang, switch to gcc 11. Specifying the version is necessary.
# It seems like gcc and g++ are symbolic links to the default clang and clang++ compilers, respectively.
# CMAKE_CXX_COMPILER_ID will evaluate to AppleClang rather than GNU on macos.
env:
CC: gcc-11
CXX: g++-11
# Build steps
steps:
# Step: Checkout
- name: Checkout
uses: actions/checkout@v4
# Workaround for getting "git describe --tags" to work in cmake/get_version_from_git.cmake (Build step)
with:
fetch-depth: 0
# Step: Set paths
- name: Set paths
id: paths
run : |
echo "build_dir=${{ github.workspace }}/build" >> $GITHUB_OUTPUT
echo "ext_deps_dir=${{ github.workspace }}/external_dependencies" >> $GITHUB_OUTPUT
echo "install_dir=${{ github.workspace }}/install" >> $GITHUB_OUTPUT
- name: Install system-provided dependencies
run: |
if [ "${{ runner.os }}" == "macOS" ]; then
brew install boost doxygen netcdf
elif [ "${{ runner.os }}" == "Linux" ]; then
sudo apt-get install libboost-all-dev doxygen
fi
# Step: Restore cached user-provided dependencies
- if: runner.os != 'macOS'
name: Restore cached user-provided dependencies
uses: actions/cache/restore@v3
id: restore-cached-external-dependencies
with:
key: ${{ runner.os }}-cache-key
restore-keys: ${{ runner.os }}-cache-key
path: ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install/netcdf-c
# Step: Build and install user-provided dependencies, executes only if no cache restored
- name: Build and install user-provided dependencies
if: runner.os != 'macOS' && steps.restore-cached-external-dependencies.outputs.cache-hit != 'true'
# NetCDF Dependencies m4, curl, and openssl are provided by the build machine
run: >
pwsh ${{ github.workspace }}/scripts/install_netcdf_static.ps1
-WorkDir ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/work
-InstallDir ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install
-BuildType '${{ matrix.build_type }}'
-ParallelJobs 10
# Step: Cache user-provided dependencies, executes only if no cache restored
- name: Cache user-provided dependencies
uses: actions/cache/save@v3
if: runner.os != 'macOS' && steps.restore-cached-external-dependencies.outputs.cache-hit != 'true'
with:
key: ${{ runner.os }}-cache-key
path: ${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install/netcdf-c
# Step: CMake configuration
- name: Configure
run: >
cmake
-S ${{ github.workspace }}
-B ${{ steps.paths.outputs.build_dir }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-DCMAKE_PREFIX_PATH=${{ steps.paths.outputs.ext_deps_dir }}/netcdf-c/install/netcdf-c
-DCMAKE_INSTALL_PREFIX=${{ steps.paths.outputs.install_dir }}
# Step: CMake build
- name: Build
run: cmake --build ${{ steps.paths.outputs.build_dir }} --config ${{ matrix.build_type }} -j
# Step: Test
# Works if runner.os == 'Linux' or runner.os == 'macOS'
# if runner.os == 'Windows', /matrix.build_type needs to be inserted before /tests
- name: Test
run: |
echo -e "\n*************** MeshKernel Tests ***************\n"
${{ steps.paths.outputs.build_dir }}/libs/MeshKernel/tests/MeshKernelUnitTests
echo -e "\n\n*************** MeshKernel API Tests ***************\n"
${{ steps.paths.outputs.build_dir }}/libs/MeshKernelApi/tests/MeshKernelApiUnitTests
# Step: CMake install
- name: Install
run: cmake --install ${{ steps.paths.outputs.build_dir }}
# Step: Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: meshkernel-${{ matrix.platform }}-${{ matrix.build_type }}
path: ${{ steps.paths.outputs.install_dir }}
if-no-files-found: error