build-and-test #1274
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
# Copyright (c) 2022 The Orbit Authors. All rights reserved. | |
# Use of this source code is governed by a BSD-style license that can be | |
# found in the LICENSE file. | |
name: build-and-test | |
on: | |
push: | |
branches: | |
- 'main' | |
paths: | |
- 'CMakeLists.txt' | |
- '.github/**' | |
- 'cmake/**' | |
- 'src/**' | |
- 'third_party/**' | |
pull_request: | |
branches: | |
- 'main' | |
paths: | |
- 'CMakeLists.txt' | |
- '.github/**' | |
- 'cmake/**' | |
- 'src/**' | |
- 'third_party/**' | |
schedule: | |
- cron: '0 7 * * *' | |
permissions: read-all | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
job: | |
name: ${{ matrix.config.build_type }}.${{ matrix.config.cc }}.build-and-test-${{ matrix.config.os }} | |
runs-on: ${{ matrix.config.os }} | |
timeout-minutes: 360 | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
name: "GCC Release", | |
build_type: 'Release', | |
cc: "gcc", | |
cxx: "g++", | |
os: "ubuntu-22.04" | |
} | |
- { | |
name: "Clang Release", | |
build_type: 'Release', | |
cc: "clang", | |
cxx: "clang++", | |
os: "ubuntu-22.04" | |
} | |
- { | |
name: "Clang Debug", | |
build_type: 'Debug', | |
cc: "clang", | |
cxx: "clang++", | |
os: "ubuntu-22.04" | |
} | |
- { | |
name: "MSVC Release", | |
build_type: 'Release', | |
cc: "msvc", | |
os: "windows-2019", | |
conan_profile: "msvc2019_release" | |
} | |
env: | |
CCACHE_BASEDIR: "${GITHUB_WORKSPACE}" | |
CCACHE_DIR: "${GITHUB_WORKSPACE}/.ccache" | |
CCACHE_COMPRESS: "true" | |
CCACHE_COMPRESSLEVEL: "6" | |
CCACHE_MAXSIZE: "600M" | |
steps: | |
- run: | | |
mkdir pr_metadata | |
echo "${{ github.event.number }}" > pr_metadata/pr_number.txt | |
echo "${{ github.event.pull_request.head.repo.full_name }}" > pr_metadata/pr_head_repo.txt | |
echo "${{ github.event.pull_request.head.ref }}" > pr_metadata/pr_head_ref.txt | |
if: github.event_name == 'pull_request' && matrix.config.name == 'Clang Debug' | |
- name: 'Upload PR metadata' | |
if: github.event_name == 'pull_request' && matrix.config.name == 'Clang Debug' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pr_metadata | |
path: pr_metadata | |
retention-days: 1 | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: '0' | |
- name: Install dependencies (Ubuntu) | |
if: startsWith(matrix.config.os, 'ubuntu') | |
run: | | |
sudo apt update && \ | |
sudo apt install --yes --no-install-recommends \ | |
build-essential \ | |
clang-tidy-14 \ | |
cmake \ | |
ccache \ | |
libboost-dev \ | |
libcapstone-dev \ | |
libgrpc++-dev \ | |
libssh2-1-dev \ | |
vulkan-validationlayers-dev \ | |
libz-dev \ | |
llvm-dev \ | |
protobuf-compiler-grpc \ | |
pkg-config \ | |
libvulkan-volk-dev \ | |
libvulkan-dev \ | |
libopengl-dev \ | |
libglx-dev \ | |
mesa-common-dev \ | |
qtbase5-dev \ | |
libgtest-dev \ | |
libgmock-dev \ | |
git \ | |
libprotobuf-dev | |
- name: Install dependencies (Windows) | |
if: startsWith(matrix.config.os, 'windows') | |
run: | | |
py -3 -m pip install aqtinstall | |
py -3 -m aqt install-qt --outputdir C:\Qt windows desktop 5.15 win64_msvc2019_64 | |
py -3 -m pip install conan==1.54.0 | |
choco install -y ccache | |
echo "C:\ProgramData\chocolatey\lib\ccache\tools\ccache-4.7.3-windows-x86_64" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
- name: Save CCache Timestamp | |
id: ccache_timestamp | |
run: echo "timestamp=$(date +%m-%d-%Y--%H:%M:%S)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Setup CCache Files | |
uses: actions/cache@v3 | |
with: | |
path: | | |
.ccache | |
~/.conan | |
C:\.conan | |
key: ${{ matrix.config.build_type }}-${{ matrix.config.cc }}-ccache-${{ steps.ccache_timestamp.outputs.timestamp }} | |
restore-keys: | | |
${{ matrix.config.build_type }}-${{ matrix.config.cc }}-ccache- | |
ccache- | |
- run: ccache -p | |
- run: ccache -z | |
- run: mkdir "build" | |
if: startsWith(matrix.config.os, 'ubuntu') | |
- name: CMake Configure (Ubuntu) | |
if: startsWith(matrix.config.os, 'ubuntu') | |
working-directory: ./build | |
env: | |
CXX: ${{ matrix.config.cxx }} | |
CC: ${{ matrix.config.cc }} | |
run: | | |
cmake -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ | |
-DCMAKE_CXX_FLAGS="-march=sandybridge -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" \ | |
-DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ | |
${GITHUB_WORKSPACE} | |
- name: CMake Build (Ubuntu) | |
if: startsWith(matrix.config.os, 'ubuntu') | |
working-directory: ./build | |
run: cmake --build . | |
- name: Run clang-tidy (Clang Debug) | |
if: github.event_name == 'pull_request' && matrix.config.name == 'Clang Debug' | |
run: | | |
# Use origin/main as reference branch, if not specified by Github | |
REFERENCE="origin/${GITHUB_BASE_REF:-main}" | |
MERGE_BASE="$(git merge-base $REFERENCE HEAD)" # Merge base is the commit on main this PR was branched from. | |
git diff -U0 --no-color --diff-filter=r $MERGE_BASE -- 'src/**' | clang-tidy-diff-14.py -p1 -path build -export-fixes clang-tidy-fixes.yml | |
- uses: actions/upload-artifact@v3 | |
if: github.event_name == 'pull_request' && matrix.config.name == 'Clang Debug' | |
with: | |
name: clang_tidy_fixes | |
path: clang-tidy-fixes.yml | |
- name: Set up simple SSH server (Ubuntu) | |
if: startsWith(matrix.config.os, 'ubuntu') | |
working-directory: ./contrib/docker/ssh_server_simple | |
run: | | |
podman build . -t ssh_server_simple | |
echo "Starting Simple SSH Server" | |
podman run -dP --rm --name ssh_server_simple ssh_server_simple | |
SSH_SERVER_SIMPLE_PORT=$(podman port ssh_server_simple 22 | grep 0.0.0.0 | cut -f2 -d:) | |
echo "Determined SSH port of Simple SSH Server: ${SSH_SERVER_SIMPLE_PORT}" | |
echo "SSH_SERVER_SIMPLE_PORT=${SSH_SERVER_SIMPLE_PORT}" >> $GITHUB_ENV | |
- name: CMake Test (Ubuntu) | |
if: startsWith(matrix.config.os, 'ubuntu') | |
working-directory: ./build | |
run: | | |
CTEST_OUTPUT_ON_FAILURE=1 \ | |
ARGS="-E IntegrationTest" \ | |
ORBIT_TESTING_SSH_SERVER_SIMPLE_ADDRESS="127.0.0.1:${{ env.SSH_SERVER_SIMPLE_PORT }}" \ | |
cmake --build . --target test | |
- name: Shut down simple SSH server (Ubuntu) | |
if: startsWith(matrix.config.os, 'ubuntu') | |
run: podman stop ssh_server_simple | |
- name: Install conan config (Windows) | |
if: startsWith(matrix.config.os, 'windows') | |
run: | | |
py -3 -m conans.conan config install .\third_party\conan\configs\windows\ | |
py -3 -m conans.conan config install .\third_party\conan\configs\windows_ci\ | |
- name: Build & Test (Windows) | |
if: startsWith(matrix.config.os, 'windows') | |
env: | |
Qt5_DIR: "C:\\Qt\\5.15.2\\msvc2019_64" | |
CMAKE_CXX_COMPILER_LAUNCHER: "ccache" | |
CMAKE_C_COMPILER_LAUNCHER: "ccache" | |
run: | | |
py -3 -m conans.conan install -pr:b msvc2019_release -pr:h ${{ matrix.config.conan_profile }} -if build/ --build outdated --update ./ | |
py -3 -m conans.conan build -bf build/ . | |
- name: Clean up conan cache (Windows) | |
run: py -3 -m conans.conan remove --src --builds --force * | |
if: startsWith(matrix.config.os, 'windows') | |
- name: CCache Stats | |
run: ccache -s -v | |
- name: Upload test artifacts | |
uses: actions/upload-artifact@v3 | |
if: success() || failure() | |
with: | |
name: test-results-${{ matrix.config.cc }}-${{ matrix.config.build_type }} | |
path: 'build/testresults/**/*.xml' | |
retention-days: 1 |