Add API/ABI checker (using LVC)

v2 (by azat):
- drop package installations
- use local .abi-check over $HOME/abi-check for build dir
- drop regex check, simply use default values (too complex otherwise)
- use sub-shell to avoid cd back
- add missing quotes
- make the style uniq across the whole file (no tabs for indent, copy-paste?)
- drop `set -x`, use `bash -x abi-check.sh` over
- drop EVENT_ABI_CHECK
- use /usr/bin/env bash as shebang
- use `find | xargs` over `cp $(grep -v)`
- adjust markdown syntax in abi-check/README.md
- adjust link to the publicly available documentation

v3 (by azat):
- docker image
- git check-ignore
- make -j8
- allow to change defaults

Refs: #887
(cherry picked from commit 735c891e71dc7de737dc09cdef26683eea394e66)
This commit is contained in:
yuangongji 2019-09-04 23:09:13 +08:00 committed by Azat Khuzhin
parent 2016f017b3
commit 709210d457
3 changed files with 98 additions and 0 deletions

35
extra/abi-check/README.md Normal file
View File

@ -0,0 +1,35 @@
## libevent ABI/API changes
This script is used to generate information about changes in libevent ABI/API
between various versions using [LVC tools](https://github.com/lvc). Such an
overview can help developers migrate from one version to another.
Here is the `abi_check.sh`, which is used to generate ABI/API timeline for
libevent.
You can limit the number of included libevent versions via a number given
as a parameter to the script. For example
```shell
$ ./abi_check.sh 3
```
generates overview for the last 3 versions and the current version.
If no parameter given, it will generate overview for the last 2 versions and
the current version by default.
But this script requires some tools that are available in the following docker image:
```
docker.pkg.github.com/azat/docker-images/lvc-debian
```
And the full command looks like:
```shell
docker run --rm -it -v $PWD:/src:ro -w /src -v tmp/le-abi-check-root:/abi-root -e ABI_CHECK_ROOT=/abi-root docker.pkg.github.com/azat/docker-images/lvc-debian /src/extra/abi-check/abi_check.sh
```
'timeline/libevent/index.html' is the final result and can be viewed
[here](https://libevent.org/abi)

51
extra/abi-check/abi_check.sh Executable file
View File

@ -0,0 +1,51 @@
#!/usr/bin/env bash
# Requirements:
# - wdiff
# - rfcdiff
# - universal-ctags
# - abi-tracker
# - abi-monitor
# - git
#
# All of this are included in:
# docker.pkg.github.com/azat/docker-images/lvc-debian:latest
#
# TODO:
# - move image into libevent namespace
# verify backward compatibility of API/ABI changes
set -e
LIMIT=${1:-2}
EVENT_SOURCE_DIR=${EVENT_SOURCE_DIR:-"$(cd "$(dirname "$0")"/../.. && pwd)"}
ABI_CHECK_ROOT=${ABI_CHECK_ROOT:-$EVENT_SOURCE_DIR/.abi-check}
ABI_CHECK_WORKSPACE=${ABI_CHECK_WORKSPACE:-"work/abi-check"}
mkdir -p "$ABI_CHECK_ROOT/$ABI_CHECK_WORKSPACE"
cd "$ABI_CHECK_ROOT/$ABI_CHECK_WORKSPACE"
# copy current source code and profile into workspace
mkdir -p src/libevent/current
mkdir -p installed/libevent/current
( # to avoid cd back
cd "$EVENT_SOURCE_DIR"
# XXX: not `git archive` since it will not copy changes that are not in index,
# and maybe some issues on CI (since it does not contain full clone)
find . -maxdepth 1 -mindepth 1 | {
git check-ignore --no-index --verbose --non-matching --stdin
} | fgrep :: | cut -f2 | grep -v /.git/ | tee /dev/stderr | {
xargs cp -r -t "$ABI_CHECK_ROOT/$ABI_CHECK_WORKSPACE/src/libevent/current/"
}
cp extra/abi-check/libevent.json "$ABI_CHECK_ROOT/$ABI_CHECK_WORKSPACE/"
)
# run LVC tools
abi-monitor -get -limit "$LIMIT" libevent.json
abi-monitor -make -j8 -v current -build libevent.json
abi-monitor -make -j8 -build libevent.json
abi-tracker -build libevent.json
# remove useless files
rm -rf src installed build_logs libevent.json

View File

@ -0,0 +1,12 @@
{
"Name": "libevent",
"Title": "Libevent",
"SourceUrl": "https://github.com/libevent/libevent/tags",
"Git": "https://github.com/libevent/libevent.git",
"Maintainer": "Nick Mathewson, Azat Khuzhin and Niels Provos",
"MaintainerUrl": "https://libevent.org",
"BuildSystem": "Autotools",
"HeadersDiff": "On",
"Package": "release-",
"ReleasePattern": "\A([\d\-\.\_]+)(|\-beta|\-rc|\-stable)\Z",
}