Created
June 3, 2020 23:55
-
-
Save NickNaso/0d478f1481686d5bcc868cac06620a60 to your computer and use it in GitHub Desktop.
Example of Github action for C++ rpoject
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
# This is a basic workflow to help you get started with Actions | |
# workflow - цепочка действий | |
# Имя процесса Билдится на всех типах 📦 🐍 | |
name: CMake Build Matrix | |
# Controls when the action will run. Triggers the workflow on push | |
on: | |
push: | |
pull_request: | |
release: | |
# tags: | |
# - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 | |
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | |
jobs: | |
# This workflow contains a single job called "build" | |
build: | |
# The type of runner that the job will run on | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} # будет запускаться по очереди на всех типах машин | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
name: "Windows Latest MSVC", | |
os: windows-latest, | |
artifact: "windows_msvc.7z", | |
build_type: "Release", | |
cc: "cl", | |
cxx: "cl", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
archiver: "7z a", | |
generators: "Visual Studio 16 2019" | |
} | |
- { | |
name: "Windows Latest MinGW", | |
os: windows-latest, | |
artifact: "windows_mingw.7z", | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
archiver: "7z a", | |
generators: "Ninja" | |
} | |
- { | |
name: "Ubuntu_Latest_GCC", | |
os: ubuntu-latest, | |
artifact: "ubuntu_gcc.7z", | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
archiver: "7z a", | |
generators: "Ninja" | |
} | |
- { | |
name: "Ubuntu_GCC_9", | |
os: ubuntu-latest, | |
artifact: "ubuntu_gcc9.7z", | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
archiver: "7z a", | |
generators: "Ninja" | |
} | |
- { | |
name: "macOS Latest Clang", | |
os: macos-latest, | |
artifact: "macos_clang.7z", | |
build_type: "Release", | |
cc: "clang", | |
cxx: "clang++", | |
archiver: "7za a", | |
generators: "Ninja" | |
} | |
steps: | |
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | |
- uses: actions/checkout@v2 | |
- name: Print env | |
run: | | |
echo github.event.action: ${{ github.event.action }} | |
echo github.event_name: ${{ github.event_name }} | |
- name: Install dependencies on windows | |
if: startsWith(matrix.config.os, 'windows') | |
run: | | |
choco install ninja cmake | |
ninja --version | |
cmake --version | |
# cmd "${{ matrix.config.environment_script }}" | |
- name: Install dependencies on ubuntu | |
if: startsWith(matrix.config.name, 'Ubuntu_Latest_GCC') | |
run: | | |
sudo apt-get update | |
sudo apt-get install ninja-build cmake | |
ninja --version | |
cmake --version | |
gcc --version | |
- name: Install dependencies on ubuntu9 | |
if: startsWith(matrix.config.name, 'Ubuntu_GCC_9') | |
run: | | |
echo Update gcc-9 ======================================================================= | |
echo gcc version before | |
gcc --version | |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test | |
sudo apt-get update | |
sudo apt-get install ninja-build cmake gcc-9 g++-9 | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9 | |
echo gcc version after | |
gcc --version | |
echo Update ninja ======================================================================= | |
echo ninja version before | |
ninja --version | |
# wget https://github.com/ninja-build/ninja/releases/download/v1.10.0/ninja-linux.zip | |
wget https://github.com/ninja-build/ninja/releases/latest/download/ninja-linux.zip | |
sudo unzip ninja-linux.zip -d /usr/local/bin/ | |
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force | |
echo ninja version after | |
ninja --version | |
echo Update cmake ======================================================================= | |
echo cmake version before | |
cmake --version | |
# curl --silent "https://api.github.com/repos/Kitware/CMake/releases/latest" | sed -n 's/.*tag_name":\s"\(.*\)".*/\1/p' | head -2 | |
# wget https://github.com/Kitware/CMake/releases/latest/download/cmake-3.16.5-Linux-x86_64.sh | |
cmake_version=$(curl --silent "https://api.github.com/repos/Kitware/CMake/releases/latest" | sed -n 's/.*tag_name":\s"\(.*\)".*/\1/p' | head -2 | cut -c 2-) | |
echo cmake download latest v$cmake_version version | |
wget https://github.com/Kitware/CMake/releases/download/v$cmake_version/cmake-$cmake_version-Linux-x86_64.sh | |
chmod +x cmake-$cmake_version-Linux-x86_64.sh | |
sudo mkdir /opt/cmake | |
sudo ./cmake-$cmake_version-Linux-x86_64.sh --prefix=/opt/cmake --skip-license | |
sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake/bin/cmake 1 --force | |
echo cmake version after | |
cmake --version | |
- name: Install dependencies on macos | |
if: startsWith(matrix.config.os, 'macos') | |
run: | | |
brew install p7zip cmake ninja | |
ninja --version | |
cmake --version | |
- name: Configure | |
shell: bash | |
run: | | |
mkdir build | |
mkdir instdir | |
cmake \ | |
-S . \ | |
-B . \ | |
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=instdir | |
- name: Build | |
shell: bash | |
run: cmake --build . --config ${{ matrix.config.build_type }} | |
- name: Install Strip | |
shell: bash | |
run: cmake --install . --strip | |
- name: Pack | |
shell: bash | |
working-directory: instdir | |
run: | | |
ls -laR | |
${{ matrix.config.archiver }} ../${{ matrix.config.artifact }} . | |
- name: Upload | |
uses: actions/upload-artifact@v1 | |
with: | |
path: ./${{ matrix.config.artifact }} | |
name: ${{ matrix.config.artifact }} | |
- name: Upload release asset | |
if: github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'created') | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ github.event.release.upload_url }} | |
asset_path: ./${{ matrix.config.artifact }} | |
asset_name: ${{ matrix.config.artifact }}.zip | |
asset_content_type: application/zip |
Thanks, I let github generate the workflow for cmake. I appreciate the gist!
Jobs using the windows-latest
runner label migrated from Windows Server 2019 to Windows Server 2022. See article.
Use updated environment_script and generators like shown below,
name: "Windows Latest MSVC",
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat",
generators: "Visual Studio 17 2022"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @camielverdult,
what I know is that C++20 is not yet the default option for the compiler to I think that you should set the flag
-std=HERE-SOME-VALUE
. The value is different across compiler version for example for GCC:-std=c++20
-std=c++2a
Sometimes if you set the standard in cmake it uses the default library that is not the C++20 library and you get errors. I'm not sure if this is the real problem.