mirror of
https://github.com/JakeHillion/object-introspection.git
synced 2024-11-14 14:26:55 +00:00
c3fec2624b
i.e. unions with non-POD members We can't examine untagged unions, but we should be able to support looking inside tagged unions at some point in the future.
286 lines
9.3 KiB
YAML
286 lines
9.3 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.*|.*pointers_incomplete_containing_struct|.*arrays_member_int0|OidIntegration.unions.*|.*thrift_unions_dynamic_.*"
|
|
- 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_.*|OidIntegration.unions.*|.*thrift_unions_dynamic_.*"
|
|
- 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_.*|OidIntegration.unions.*|.*thrift_unions_dynamic_.*"
|
|
- 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.*|.*pointers_incomplete_containing_struct|.*arrays_member_int0|.*fbstring.*|.*std_string_*|.*multi_arg_tb_.*|.*ignored_a|OidIntegration.unions.*|.*thrift_unions_dynamic_.*"
|
|
|
|
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
|
|
- 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 \
|
|
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 \
|
|
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-12 \
|
|
libboost-all-dev \
|
|
libgflags-dev \
|
|
llvm-12-dev \
|
|
libfmt-dev \
|
|
libjemalloc-dev
|
|
- 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
|
|
- 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
|