mirror of
https://github.com/JakeHillion/object-introspection.git
synced 2024-11-09 21:24:14 +00:00
a6d74a20a6
Summary: Update to clang-15 compiler and libraries as clang-12 is ancient. The changes to oilgen are necessary because the new internal toolchain is being more picky about linking PIC to PIC. In certain modes we build with PIC, but try to link a non-PIC oilgen artifact. Add the ability to build the oilgen artifacts with PIC which sorts this. Reviewed By: ttreyer Differential Revision: D46220858
293 lines
9.2 KiB
YAML
293 lines
9.2 KiB
YAML
version: 2.1
|
|
|
|
workflows:
|
|
object-introspection:
|
|
jobs:
|
|
- lint
|
|
|
|
- build:
|
|
name: build-gcc
|
|
cc: /usr/bin/gcc
|
|
cxx: /usr/bin/g++
|
|
warnings_as_errors: "OFF"
|
|
- test:
|
|
name: test-gcc
|
|
requires:
|
|
- build-gcc
|
|
- test:
|
|
name: test-type-graph-gcc
|
|
requires:
|
|
- build-gcc
|
|
oid_test_args: "-ftype-graph"
|
|
tests_regex: "OidIntegration\\..*"
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*arrays_member_int0"
|
|
- test:
|
|
name: test-typed-data-segment-gcc
|
|
requires:
|
|
- build-gcc
|
|
oid_test_args: "-ftyped-data-segment"
|
|
tests_regex: "OidIntegration\\..*"
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*pointers.*|.*arrays_member_int0|.*cycles_.*"
|
|
- test:
|
|
name: test-tree-builder-type-checking-gcc
|
|
requires:
|
|
- build-gcc
|
|
oid_test_args: "-ftree-builder-type-checking"
|
|
tests_regex: "OidIntegration\\..*"
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*pointers.*|.*arrays_member_int0|.*cycles_.*"
|
|
- coverage:
|
|
name: coverage
|
|
requires:
|
|
- test-gcc
|
|
- coverage:
|
|
name: coverage-type-graph
|
|
requires:
|
|
- test-type-graph-gcc
|
|
- coverage:
|
|
name: coverage-typed-data-segment
|
|
requires:
|
|
- test-typed-data-segment-gcc
|
|
- coverage:
|
|
name: coverage-tree-builder-type-checking
|
|
requires:
|
|
- test-tree-builder-type-checking-gcc
|
|
|
|
- build:
|
|
name: build-clang
|
|
cc: /usr/bin/clang-12
|
|
cxx: /usr/bin/clang++-12
|
|
warnings_as_errors: "ON"
|
|
- test:
|
|
name: test-clang
|
|
requires:
|
|
- build-clang
|
|
- test:
|
|
name: test-type-graph-clang
|
|
requires:
|
|
- build-clang
|
|
oid_test_args: "-ftype-graph"
|
|
tests_regex: "OidIntegration\\..*"
|
|
# Tests disabled due to bad DWARF generated by the old clang compiler in CI
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*arrays_member_int0|.*fbstring.*|.*std_string_*|.*multi_arg_tb_.*|.*ignored_a"
|
|
|
|
executors:
|
|
ubuntu-docker:
|
|
docker:
|
|
- image: ubuntu:jammy
|
|
resource_class: small
|
|
big-boy:
|
|
machine:
|
|
image: ubuntu-2204:2022.10.2
|
|
resource_class: 2xlarge
|
|
|
|
jobs:
|
|
lint:
|
|
executor: ubuntu-docker
|
|
steps:
|
|
- run:
|
|
name: Install dependencies
|
|
command: |
|
|
apt-get update
|
|
apt-get install -y \
|
|
clang-format \
|
|
git \
|
|
python3-pip
|
|
# click broke semver with 8.1.0, causing issues for black
|
|
pip install click==8.0.0 black isort
|
|
environment:
|
|
DEBIAN_FRONTEND: noninteractive
|
|
- checkout
|
|
- run:
|
|
name: clang-format
|
|
command: |
|
|
git ls-files '*.cpp' '*.h' | xargs clang-format --fallback-style=Google -i
|
|
git ls-files '*.py' | xargs black
|
|
git ls-files '*.py' | xargs isort
|
|
git diff --exit-code
|
|
- run:
|
|
name: python linting
|
|
command: |
|
|
black --check --diff test/
|
|
isort --check --diff test/
|
|
|
|
build:
|
|
# TODO this job could be run in Docker
|
|
executor: big-boy
|
|
parameters:
|
|
cc:
|
|
type: string
|
|
cxx:
|
|
type: string
|
|
warnings_as_errors:
|
|
type: string
|
|
environment:
|
|
CC: << parameters.cc >>
|
|
CXX: << parameters.cxx >>
|
|
working_directory:
|
|
/tmp/object-introspection
|
|
steps:
|
|
- run:
|
|
name: Install dependencies
|
|
command: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
bison \
|
|
build-essential \
|
|
clang-12 \
|
|
clang-15 \
|
|
cmake \
|
|
flex \
|
|
gawk \
|
|
libboost-all-dev \
|
|
libbz2-dev \
|
|
libcap2-bin \
|
|
libclang-15-dev \
|
|
libcurl4-gnutls-dev \
|
|
libdouble-conversion-dev \
|
|
libdw-dev \
|
|
libfmt-dev \
|
|
libgflags-dev \
|
|
libgmock-dev \
|
|
libgoogle-glog-dev \
|
|
libgtest-dev \
|
|
libjemalloc-dev \
|
|
libmsgpack-dev \
|
|
libzstd-dev \
|
|
llvm-15-dev \
|
|
ninja-build \
|
|
pkg-config \
|
|
python3-setuptools
|
|
pip3 install toml
|
|
environment:
|
|
DEBIAN_FRONTEND: noninteractive
|
|
- checkout
|
|
- run:
|
|
name: Build
|
|
command: |
|
|
cmake -G Ninja -B build/ -DWITH_FLAKY_TESTS=Off -DCODE_COVERAGE=On -DWARNINGS_AS_ERRORS=<< parameters.warnings_as_errors >>
|
|
cmake --build build/
|
|
# Testing rubbish:
|
|
cp test/ci.oid.toml build/testing.oid.toml
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- build/*
|
|
- extern/*
|
|
- types/*
|
|
|
|
test:
|
|
executor: big-boy
|
|
parameters:
|
|
oid_test_args:
|
|
type: string
|
|
default: ""
|
|
tests_regex:
|
|
type: string
|
|
default: ".*"
|
|
exclude_regex:
|
|
type: string
|
|
default: ""
|
|
working_directory:
|
|
/tmp/object-introspection
|
|
steps:
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Install dependencies
|
|
command: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
clang-15 \
|
|
libboost-all-dev \
|
|
libgflags-dev \
|
|
llvm-15-dev \
|
|
libfmt-dev \
|
|
libjemalloc-dev
|
|
environment:
|
|
DEBIAN_FRONTEND: noninteractive
|
|
- run:
|
|
name: Test
|
|
environment:
|
|
# disable drgn multithreading as tests are already run in parallel
|
|
OMP_NUM_THREADS: 1
|
|
command: |
|
|
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
|
|
OID_TEST_ARGS='<< parameters.oid_test_args >>' ctest \
|
|
--test-dir build/test/ \
|
|
--test-action Test \
|
|
-j 16 \
|
|
--tests-regex '<< parameters.tests_regex >>' \
|
|
--exclude-regex '<< parameters.exclude_regex >>' \
|
|
--no-compress-output \
|
|
--output-on-failure \
|
|
--schedule-random \
|
|
--timeout 60 \
|
|
--repeat until-pass:2 \
|
|
--output-junit results.xml
|
|
- store_test_results:
|
|
path: build/test/results.xml
|
|
- persist_to_workspace:
|
|
# Save code coverage data
|
|
root: .
|
|
paths:
|
|
- build/*
|
|
|
|
coverage:
|
|
executor: ubuntu-docker
|
|
working_directory:
|
|
/tmp/object-introspection
|
|
steps:
|
|
- run:
|
|
name: Install dependencies
|
|
command: |
|
|
apt-get update
|
|
apt-get install -y \
|
|
build-essential \
|
|
cpanminus \
|
|
curl \
|
|
git \
|
|
gpg
|
|
# Install lcov 2.0 - required for the "--filter branch" option.
|
|
# This improves C++ branch coverage by excluding compiler-generated
|
|
# branches, which primarily come from exception handling in
|
|
# standard library functions.
|
|
cpanm --notest Capture::Tiny DateTime
|
|
pushd /tmp
|
|
curl -sLO https://github.com/linux-test-project/lcov/releases/download/v2.0/lcov-2.0.tar.gz
|
|
tar -xf lcov-2.0.tar.gz
|
|
cd lcov-2.0
|
|
make install
|
|
popd
|
|
environment:
|
|
DEBIAN_FRONTEND: noninteractive
|
|
- checkout
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Code Coverage
|
|
when: always
|
|
command: |
|
|
lcov --capture --directory . --filter branch --no-external --ignore-errors mismatch --ignore-errors source --rc lcov_branch_coverage=1 --output-file coverage.info
|
|
# Empirically, extract-then-remove is faster than remove-then-extract
|
|
lcov --extract coverage.info '/tmp/object-introspection/*' --rc lcov_branch_coverage=1 --output-file coverage.info
|
|
lcov --remove coverage.info '/tmp/object-introspection/build/*' '/tmp/object-introspection/extern/*' --rc lcov_branch_coverage=1 --output-file coverage.info
|
|
lcov --list --rc lcov_branch_coverage=1 coverage.info
|
|
|
|
curl https://keybase.io/codecovsecurity/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import
|
|
curl -Os https://uploader.codecov.io/latest/linux/codecov
|
|
curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM
|
|
curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM.sig
|
|
gpgv codecov.SHA256SUM.sig codecov.SHA256SUM
|
|
shasum -a 256 -c codecov.SHA256SUM
|
|
chmod +x codecov
|
|
|
|
# It appears that codecov wants to scan through all directories
|
|
# other than "build", looking for files to upload, even if we
|
|
# specify a file name on the command line.
|
|
#
|
|
# "extern" is huge and makes uploading the coverage report take
|
|
# forever. Delete it for a speedup.
|
|
rm -rf extern
|
|
|
|
./codecov -Z -f coverage.info -t $CODECOV_TOKEN
|