Skip to content

Added a workflow dedicated to MacOS. #1

Added a workflow dedicated to MacOS.

Added a workflow dedicated to MacOS. #1

Workflow file for this run

name: range-v3 CI
# Trigger on pushes to all branches and for all pull-requests
on: [push, pull_request]
env:
CMAKE_VERSION: 3.16.2
NINJA_VERSION: 1.12.1
jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
container: ${{ matrix.config.container }}
strategy:
fail-fast: false
matrix:
config:
# AppleClang
- {
name: "macOS Clang Debug (C++17)", artifact: "macOS.tar.xz",
os: macos-13,
build_type: Debug,
cc: "clang", cxx: "clang++",
cxx_standard: 17,
cxx_asan: true,
}
- {
name: "macOS Clang Release (C++17)", artifact: "macOS.tar.xz",
os: macos-13,
build_type: RelWithDebInfo,
cc: "clang", cxx: "clang++",
cxx_standard: 17,
}
- {
name: "macOS Clang Debug (C++20 / ASAN)", artifact: "macOS.tar.xz",
os: macos-13,
build_type: Debug,
cc: "clang", cxx: "clang++",
cxx_standard: 20,
cxx_asan: true,
}
- {
name: "macOS Clang Release (C++20)", artifact: "macOS.tar.xz",
os: macos-13,
build_type: RelWithDebInfo,
cc: "clang", cxx: "clang++",
cxx_standard: 20,
}
- {
name: "macOS Clang Debug (C++17)", artifact: "macOS.tar.xz",
os: macos-14,
build_type: Debug,
cc: "clang", cxx: "clang++",
cxx_standard: 17,
cxx_asan: true,
}
- {
name: "macOS Clang Release (C++17)", artifact: "macOS.tar.xz",
os: macos-14,
build_type: RelWithDebInfo,
cc: "clang", cxx: "clang++",
cxx_standard: 17,
}
- {
name: "macOS Clang Debug (C++20 / ASAN)", artifact: "macOS.tar.xz",
os: macos-14,
build_type: Debug,
cc: "clang", cxx: "clang++",
cxx_standard: 20,
cxx_asan: true,
}
- {
name: "macOS Clang Release (C++20)", artifact: "macOS.tar.xz",
os: macos-14,
build_type: RelWithDebInfo,
cc: "clang", cxx: "clang++",
cxx_standard: 20,
}
- {
name: "macOS Clang Debug (C++17)", artifact: "macOS.tar.xz",
os: macos-latest,
build_type: Debug,
cc: "clang", cxx: "clang++",
cxx_standard: 17,
cxx_asan: true,
}
- {
name: "macOS Clang Release (C++17)", artifact: "macOS.tar.xz",
os: macos-latest,
build_type: RelWithDebInfo,
cc: "clang", cxx: "clang++",
cxx_standard: 17,
}
- {
name: "macOS Clang Debug (C++20 / ASAN)", artifact: "macOS.tar.xz",
os: macos-latest,
build_type: Debug,
cc: "clang", cxx: "clang++",
cxx_standard: 20,
cxx_asan: true,
}
- {
name: "macOS Clang Release (C++20)", artifact: "macOS.tar.xz",
os: macos-latest,
build_type: RelWithDebInfo,
cc: "clang", cxx: "clang++",
cxx_standard: 20,
}
steps:
- uses: actions/checkout@v4
- name: Download Ninja and CMake
id: cmake_and_ninja
shell: cmake -P {0}
run: |
set(cmake_version $ENV{CMAKE_VERSION})
set(ninja_version $ENV{NINJA_VERSION})
message(STATUS "Using host CMake version: ${CMAKE_VERSION}")
# Save the path for other steps
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir)
message("::set-output name=cmake_dir::${cmake_dir}")
- name: Configure
shell: cmake -P {0}
run: |
set(ENV{CC} ${{ matrix.config.cc }})
set(ENV{CXX} ${{ matrix.config.cxx }})
if ("${{ matrix.config.cxx }}" MATCHES "clang.*")
# clang spurious warning on <=> use
set(cxx_flags "${cxx_flags} -Wno-zero-as-null-pointer-constant")
endif()
if ("x${{ matrix.config.cxx_asan }}" STREQUAL "xtrue")
set(cxx_flags "${cxx_flags} -fsanitize=address")
if ("${{ runner.os }}" STREQUAL "Windows")
set(link_flags "${link_flags} /INFERASANLIBS /INCREMENTAL:NO")
else()
set(cxx_flags "${cxx_flags} -fno-omit-frame-pointer")
endif()
endif()
set(cxx_concepts ON)
if ("x${{ matrix.config.cxx_concepts }}" STREQUAL "xfalse")
set(cxx_concepts OFF)
endif()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
-S .
-B build
# -G Ninja
-D CMAKE_BUILD_TYPE=${{ matrix.config.build_type }}
# -D CMAKE_MAKE_PROGRAM:STRING=ninja
-D CMAKE_CXX_STANDARD:STRING=${{ matrix.config.cxx_standard }}
-D "CMAKE_CXX_FLAGS:STRING=${cxx_flags}"
-D "CMAKE_EXE_LINKER_FLAGS:STRING=${link_flags}"
-D CMAKE_VERBOSE_MAKEFILE:BOOL=ON
-D RANGE_V3_HEADER_CHECKS:BOOL=ON
-D RANGES_PREFER_REAL_CONCEPTS:BOOL=${cxx_concepts}
${{ matrix.config.cmake_args }}
${extra_cmake_args}
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
- name: Build
shell: cmake -P {0}
continue-on-error: ${{ matrix.config.experimental || false }}
run: |
set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ")
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x")
file(STRINGS environment_script_output.txt output_lines)
foreach(line IN LISTS output_lines)
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$")
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}")
endif()
endforeach()
endif()
set(path_separator ":")
if ("${{ runner.os }}" STREQUAL "Windows")
set(path_separator ";")
endif()
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}")
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
- name: Run tests
shell: cmake -P {0}
continue-on-error: ${{ matrix.config.experimental || false }}
run: |
include(ProcessorCount)
ProcessorCount(N)
set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON")
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/ctest --verbose -j ${N}
WORKING_DIRECTORY build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Running tests failed!")
endif()