2022-12-19 14:37:51 +00:00
|
|
|
version: 2.1
|
|
|
|
|
|
|
|
workflows:
|
2023-02-01 18:03:42 +00:00
|
|
|
object-introspection:
|
2022-12-19 14:37:51 +00:00
|
|
|
jobs:
|
|
|
|
- lint
|
2023-02-01 18:03:42 +00:00
|
|
|
|
|
|
|
- build:
|
|
|
|
name: build-gcc
|
2022-12-19 14:37:51 +00:00
|
|
|
cc: /usr/bin/gcc
|
|
|
|
cxx: /usr/bin/g++
|
2023-05-22 11:02:47 +01:00
|
|
|
warnings_as_errors: "OFF"
|
2023-02-01 18:03:42 +00:00
|
|
|
- test:
|
|
|
|
name: test-gcc
|
|
|
|
requires:
|
|
|
|
- build-gcc
|
2023-06-26 16:34:52 +01:00
|
|
|
- test:
|
|
|
|
name: test-type-graph-gcc
|
|
|
|
requires:
|
|
|
|
- build-gcc
|
|
|
|
oid_test_args: "-ftype-graph"
|
|
|
|
tests_regex: "OidIntegration\\..*"
|
2023-07-31 14:28:05 +01:00
|
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*arrays_member_int0"
|
2023-06-29 16:23:06 +01:00
|
|
|
- test:
|
|
|
|
name: test-typed-data-segment-gcc
|
|
|
|
requires:
|
|
|
|
- build-gcc
|
|
|
|
oid_test_args: "-ftyped-data-segment"
|
|
|
|
tests_regex: "OidIntegration\\..*"
|
2023-07-19 14:45:28 +01:00
|
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*pointers.*|.*arrays_member_int0|.*cycles_.*"
|
2023-06-29 18:17:31 +01:00
|
|
|
- test:
|
|
|
|
name: test-tree-builder-type-checking-gcc
|
|
|
|
requires:
|
|
|
|
- build-gcc
|
|
|
|
oid_test_args: "-ftree-builder-type-checking"
|
|
|
|
tests_regex: "OidIntegration\\..*"
|
2023-07-19 14:45:28 +01:00
|
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*pointers.*|.*arrays_member_int0|.*cycles_.*"
|
2023-02-03 09:47:57 +00:00
|
|
|
- coverage:
|
2023-06-28 09:37:24 +01:00
|
|
|
name: coverage
|
2023-02-03 09:47:57 +00:00
|
|
|
requires:
|
|
|
|
- test-gcc
|
2023-06-28 09:37:24 +01:00
|
|
|
- coverage:
|
|
|
|
name: coverage-type-graph
|
|
|
|
requires:
|
2023-06-26 16:34:52 +01:00
|
|
|
- test-type-graph-gcc
|
2023-06-29 16:23:06 +01:00
|
|
|
- coverage:
|
2023-07-04 16:55:17 +01:00
|
|
|
name: coverage-typed-data-segment
|
2023-06-29 16:23:06 +01:00
|
|
|
requires:
|
|
|
|
- test-typed-data-segment-gcc
|
2023-06-29 18:17:31 +01:00
|
|
|
- coverage:
|
|
|
|
name: coverage-tree-builder-type-checking
|
|
|
|
requires:
|
|
|
|
- test-tree-builder-type-checking-gcc
|
2023-02-01 18:03:42 +00:00
|
|
|
|
|
|
|
- build:
|
|
|
|
name: build-clang
|
2022-12-19 14:37:51 +00:00
|
|
|
cc: /usr/bin/clang-12
|
|
|
|
cxx: /usr/bin/clang++-12
|
2023-05-22 11:02:47 +01:00
|
|
|
warnings_as_errors: "ON"
|
2023-02-01 18:03:42 +00:00
|
|
|
- test:
|
|
|
|
name: test-clang
|
|
|
|
requires:
|
|
|
|
- build-clang
|
2023-06-26 16:34:52 +01:00
|
|
|
- test:
|
|
|
|
name: test-type-graph-clang
|
|
|
|
requires:
|
|
|
|
- build-clang
|
|
|
|
oid_test_args: "-ftype-graph"
|
|
|
|
tests_regex: "OidIntegration\\..*"
|
2023-06-26 19:00:51 +01:00
|
|
|
# Tests disabled due to bad DWARF generated by the old clang compiler in CI
|
2023-07-31 14:28:05 +01:00
|
|
|
exclude_regex: ".*inheritance_polymorphic.*|.*arrays_member_int0|.*fbstring.*|.*std_string_*|.*multi_arg_tb_.*|.*ignored_a"
|
2022-12-19 14:37:51 +00:00
|
|
|
|
2023-02-01 18:03:42 +00:00
|
|
|
executors:
|
|
|
|
ubuntu-docker:
|
2022-12-19 14:37:51 +00:00
|
|
|
docker:
|
|
|
|
- image: ubuntu:jammy
|
2023-02-01 18:03:42 +00:00
|
|
|
resource_class: small
|
|
|
|
big-boy:
|
|
|
|
machine:
|
|
|
|
image: ubuntu-2204:2022.10.2
|
|
|
|
resource_class: 2xlarge
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
lint:
|
|
|
|
executor: ubuntu-docker
|
2022-12-19 14:37:51 +00:00
|
|
|
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
|
2023-08-01 16:58:06 +01:00
|
|
|
environment:
|
|
|
|
DEBIAN_FRONTEND: noninteractive
|
2022-12-19 14:37:51 +00:00
|
|
|
- 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/
|
|
|
|
|
2023-02-01 18:03:42 +00:00
|
|
|
build:
|
|
|
|
# TODO this job could be run in Docker
|
|
|
|
executor: big-boy
|
2022-12-19 14:37:51 +00:00
|
|
|
parameters:
|
|
|
|
cc:
|
|
|
|
type: string
|
|
|
|
cxx:
|
|
|
|
type: string
|
2023-05-22 11:02:47 +01:00
|
|
|
warnings_as_errors:
|
|
|
|
type: string
|
2022-12-19 14:37:51 +00:00
|
|
|
environment:
|
|
|
|
CC: << parameters.cc >>
|
|
|
|
CXX: << parameters.cxx >>
|
2023-02-03 09:47:57 +00:00
|
|
|
working_directory:
|
|
|
|
/tmp/object-introspection
|
2022-12-19 14:37:51 +00:00
|
|
|
steps:
|
|
|
|
- run:
|
|
|
|
name: Install dependencies
|
|
|
|
command: |
|
|
|
|
sudo apt-get update
|
|
|
|
sudo apt-get install -y \
|
|
|
|
bison \
|
|
|
|
build-essential \
|
|
|
|
clang-12 \
|
|
|
|
cmake \
|
|
|
|
flex \
|
|
|
|
gawk \
|
|
|
|
libboost-all-dev \
|
|
|
|
libbz2-dev \
|
|
|
|
libcap2-bin \
|
|
|
|
libclang-12-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-12-dev \
|
|
|
|
ninja-build \
|
|
|
|
pkg-config \
|
2023-02-01 18:06:31 +00:00
|
|
|
python3-setuptools
|
2022-12-19 14:37:51 +00:00
|
|
|
pip3 install toml
|
|
|
|
environment:
|
|
|
|
DEBIAN_FRONTEND: noninteractive
|
2023-02-01 18:03:42 +00:00
|
|
|
- checkout
|
2022-12-19 14:37:51 +00:00
|
|
|
- run:
|
|
|
|
name: Build
|
|
|
|
command: |
|
2023-05-22 11:02:47 +01:00
|
|
|
cmake -G Ninja -B build/ -DWITH_FLAKY_TESTS=Off -DCODE_COVERAGE=On -DWARNINGS_AS_ERRORS=<< parameters.warnings_as_errors >>
|
2023-02-01 18:03:42 +00:00
|
|
|
cmake --build build/
|
|
|
|
# Testing rubbish:
|
|
|
|
cp test/ci.oid.toml build/testing.oid.toml
|
|
|
|
- persist_to_workspace:
|
|
|
|
root: .
|
|
|
|
paths:
|
|
|
|
- build/*
|
|
|
|
- extern/*
|
|
|
|
- types/*
|
2022-12-19 14:37:51 +00:00
|
|
|
|
2023-02-01 18:03:42 +00:00
|
|
|
test:
|
|
|
|
executor: big-boy
|
2023-06-26 16:34:52 +01:00
|
|
|
parameters:
|
|
|
|
oid_test_args:
|
|
|
|
type: string
|
|
|
|
default: ""
|
|
|
|
tests_regex:
|
|
|
|
type: string
|
|
|
|
default: ".*"
|
|
|
|
exclude_regex:
|
|
|
|
type: string
|
|
|
|
default: ""
|
2023-02-03 09:47:57 +00:00
|
|
|
working_directory:
|
|
|
|
/tmp/object-introspection
|
2023-02-01 18:03:42 +00:00
|
|
|
steps:
|
|
|
|
- attach_workspace:
|
|
|
|
at: .
|
|
|
|
- run:
|
|
|
|
name: Install dependencies
|
|
|
|
command: |
|
|
|
|
sudo apt-get update
|
|
|
|
sudo apt-get install -y \
|
|
|
|
clang-12 \
|
2023-02-23 23:32:15 +00:00
|
|
|
libboost-all-dev \
|
2023-02-01 18:03:42 +00:00
|
|
|
libgflags-dev \
|
2023-04-05 21:56:55 +01:00
|
|
|
llvm-12-dev \
|
|
|
|
libfmt-dev \
|
|
|
|
libjemalloc-dev
|
2023-08-01 16:58:06 +01:00
|
|
|
environment:
|
|
|
|
DEBIAN_FRONTEND: noninteractive
|
2022-12-19 14:37:51 +00:00
|
|
|
- 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
|
2023-06-26 16:34:52 +01:00
|
|
|
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 \
|
2023-06-28 16:08:07 +01:00
|
|
|
--repeat until-pass:2 \
|
2023-02-01 18:06:31 +00:00
|
|
|
--output-junit results.xml
|
2022-12-19 14:37:51 +00:00
|
|
|
- store_test_results:
|
2023-02-01 18:06:31 +00:00
|
|
|
path: build/test/results.xml
|
2023-02-03 09:47:57 +00:00
|
|
|
- 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 \
|
2023-06-21 21:03:48 +01:00
|
|
|
build-essential \
|
|
|
|
cpanminus \
|
2023-02-03 09:47:57 +00:00
|
|
|
curl \
|
|
|
|
git \
|
2023-06-21 21:03:48 +01:00
|
|
|
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
|
2023-08-01 16:58:06 +01:00
|
|
|
environment:
|
|
|
|
DEBIAN_FRONTEND: noninteractive
|
2023-02-03 16:26:22 +00:00
|
|
|
- checkout
|
2023-02-03 09:47:57 +00:00
|
|
|
- attach_workspace:
|
|
|
|
at: .
|
|
|
|
- run:
|
|
|
|
name: Code Coverage
|
|
|
|
when: always
|
|
|
|
command: |
|
2023-06-21 21:03:48 +01:00
|
|
|
lcov --capture --directory . --filter branch --no-external --ignore-errors mismatch --ignore-errors source --rc lcov_branch_coverage=1 --output-file coverage.info
|
2023-05-24 16:14:19 +01:00
|
|
|
# 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
|
2023-02-03 09:47:57 +00:00
|
|
|
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
|
|
|
|
|
2023-04-21 13:50:29 +01:00
|
|
|
./codecov -Z -f coverage.info -t $CODECOV_TOKEN
|