Skip to content

build-and-test

build-and-test #1947

# 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/**'
- 'conanfile.py'
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"
PR_NUMBER: ${{ github.event.number }}
PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
steps:
- run: |
mkdir pr_metadata
echo "$PR_NUMBER" > pr_metadata/pr_number.txt
echo "$PR_HEAD_REPO" > pr_metadata/pr_head_repo.txt
echo "$PR_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.58.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: CMake Test (Ubuntu)
if: startsWith(matrix.config.os, 'ubuntu')
working-directory: ./build
run: |
CTEST_OUTPUT_ON_FAILURE=1 \
ARGS="-E IntegrationTest" \
../contrib/scripts/run_ssh_containers.sh \
cmake --build . --target test
- 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