forked from ccache/ccache
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d90140d
commit 2482434
Showing
1 changed file
with
202 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
name: CMake Build Matrix | ||
|
||
on: [push] | ||
|
||
env: | ||
CMAKE_VERSION: 3.16.2 | ||
NINJA_VERSION: 1.9.0 | ||
BUILD_TYPE: Release | ||
|
||
jobs: | ||
build: | ||
name: ${{ matrix.config.name }} | ||
runs-on: ${{ matrix.config.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
config: | ||
- { | ||
name: "Windows Latest MinGW", artifact: "Windows.tar.xz", | ||
os: windows-latest, | ||
cc: "gcc", cxx: "g++" | ||
} | ||
- { | ||
name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz", | ||
os: ubuntu-latest, | ||
cc: "gcc", cxx: "g++" | ||
} | ||
- { | ||
name: "macOS Latest Clang", artifact: "macOS.tar.xz", | ||
os: macos-latest, | ||
cc: "clang", cxx: "clang++" | ||
} | ||
|
||
steps: | ||
- uses: actions/checkout@v1 | ||
|
||
- 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}") | ||
if ("${{ runner.os }}" STREQUAL "Windows") | ||
set(ninja_suffix "win.zip") | ||
set(cmake_suffix "win64-x64.zip") | ||
set(cmake_dir "cmake-${cmake_version}-win64-x64/bin") | ||
elseif ("${{ runner.os }}" STREQUAL "Linux") | ||
set(ninja_suffix "linux.zip") | ||
set(cmake_suffix "Linux-x86_64.tar.gz") | ||
set(cmake_dir "cmake-${cmake_version}-Linux-x86_64/bin") | ||
elseif ("${{ runner.os }}" STREQUAL "macOS") | ||
set(ninja_suffix "mac.zip") | ||
set(cmake_suffix "Darwin-x86_64.tar.gz") | ||
set(cmake_dir "cmake-${cmake_version}-Darwin-x86_64/CMake.app/Contents/bin") | ||
endif() | ||
set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}") | ||
file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS) | ||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip) | ||
set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}") | ||
file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS) | ||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip) | ||
# 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}") | ||
if (NOT "${{ runner.os }}" STREQUAL "Windows") | ||
execute_process( | ||
COMMAND chmod +x ninja | ||
COMMAND chmod +x ${cmake_dir}/cmake | ||
) | ||
endif() | ||
- name: Configure | ||
shell: cmake -P {0} | ||
run: | | ||
set(ENV{CC} ${{ matrix.config.cc }}) | ||
set(ENV{CXX} ${{ matrix.config.cxx }}) | ||
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/ninja" ninja_program) | ||
execute_process( | ||
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | ||
-S . | ||
-B build | ||
-D CMAKE_BUILD_TYPE=$ENV{BUILD_TYPE} | ||
-G Ninja | ||
-D CMAKE_MAKE_PROGRAM=${ninja_program} | ||
RESULT_VARIABLE result | ||
) | ||
if (NOT result EQUAL 0) | ||
message(FATAL_ERROR "Bad exit status") | ||
endif() | ||
- name: Build | ||
env: | ||
NINJA_STATUS: "[%f/%t %o/sec] " | ||
run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build build | ||
|
||
- name: Run tests | ||
env: | ||
CTEST_OUTPUT_ON_FAILURE: ON | ||
shell: cmake -P {0} | ||
run: | | ||
include(ProcessorCount) | ||
ProcessorCount(N) | ||
execute_process( | ||
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/ctest -j ${N} | ||
WORKING_DIRECTORY build | ||
RESULT_VARIABLE result | ||
) | ||
if (NOT result EQUAL 0) | ||
message(FATAL_ERROR "Running tests failed!") | ||
endif() | ||
- name: Install Strip | ||
run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --install build --prefix instdir --strip | ||
|
||
|
||
- name: Pack | ||
working-directory: instdir | ||
run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake -E tar cJfv ../${{ matrix.config.artifact }} . | ||
|
||
|
||
- name: Upload | ||
uses: actions/upload-artifact@v1 | ||
with: | ||
path: ./${{ matrix.config.artifact }} | ||
name: ${{ matrix.config.artifact }} | ||
|
||
release: | ||
if: contains(github.ref, 'tags/v') | ||
runs-on: ubuntu-latest | ||
needs: build | ||
|
||
steps: | ||
- name: Create Release | ||
id: create_release | ||
uses: actions/create-release@v1.0.0 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
tag_name: ${{ github.ref }} | ||
release_name: Release ${{ github.ref }} | ||
draft: false | ||
prerelease: false | ||
|
||
- name: Store Release url | ||
run: | | ||
echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url | ||
- uses: actions/upload-artifact@v1 | ||
with: | ||
path: ./upload_url | ||
name: upload_url | ||
|
||
publish: | ||
if: contains(github.ref, 'tags/v') | ||
name: ${{ matrix.config.name }} | ||
runs-on: ${{ matrix.config.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
config: | ||
- { | ||
name: "Windows Latest MinGW", artifact: "Windows.tar.xz", | ||
os: ubuntu-latest | ||
} | ||
- { | ||
name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz", | ||
os: ubuntu-latest | ||
} | ||
- { | ||
name: "macOS Latest Clang", artifact: "macOS.tar.xz", | ||
os: ubuntu-latest | ||
} | ||
needs: release | ||
|
||
steps: | ||
- name: Download artifact | ||
uses: actions/download-artifact@v1 | ||
with: | ||
name: ${{ matrix.config.artifact }} | ||
path: ./ | ||
|
||
- name: Download URL | ||
uses: actions/download-artifact@v1 | ||
with: | ||
name: upload_url | ||
path: ./ | ||
- id: set_upload_url | ||
run: | | ||
upload_url=`cat ./upload_url` | ||
echo ::set-output name=upload_url::$upload_url | ||
- name: Upload to Release | ||
id: upload_to_release | ||
uses: actions/upload-release-asset@v1.0.1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ steps.set_upload_url.outputs.upload_url }} | ||
asset_path: ./${{ matrix.config.artifact }} | ||
asset_name: ${{ matrix.config.artifact }} | ||
asset_content_type: application/x-gtar |