ci: switch to GitHub actions (#10)
- ppc64le is not checked as there is no ppc64le runners. - valgrind is removed. - no_std check is removed Signed-off-by: Jay Lee <BusyJayLee@gmail.com>
This commit is contained in:
parent
6494cc8660
commit
e5f53b1441
|
@ -1,17 +1,81 @@
|
|||
name: CI
|
||||
|
||||
on: [push]
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
test:
|
||||
name: ${{ matrix.name }}
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- name: aarch64-unknown-linux-gnu
|
||||
target: aarch64-unknown-linux-gnu
|
||||
nobgt: 0
|
||||
no_tests: 1
|
||||
tag: arm64
|
||||
- name: x86_64-unknown-linux-gnu (nightly)
|
||||
target: x86_64-unknown-linux-gnu
|
||||
nobgt: 0
|
||||
no_tests: 0
|
||||
rust: nightly
|
||||
tag: ubuntu-latest
|
||||
- name: x86_64-unknown-linux-gnu (stable)
|
||||
target: x86_64-unknown-linux-gnu
|
||||
nobgt: 0
|
||||
no_tests: 0
|
||||
rust: stable
|
||||
tag: ubuntu-latest
|
||||
- name: x86_64-unknown-linux-musl
|
||||
target: x86_64-unknown-linux-musl
|
||||
nobgt: 1
|
||||
no_tests: 1
|
||||
tag: ubuntu-latest
|
||||
- name: x86_64-apple-darwin (stable)
|
||||
target: x86_64-apple-darwin
|
||||
nobgt: 0
|
||||
no_tests: 1
|
||||
tag: macos-latest
|
||||
runs-on: ${{ matrix.tag }}
|
||||
env:
|
||||
TARGET: ${{ matrix.target }}
|
||||
NO_JEMALLOC_TESTS: ${{ matrix.no_tests }}
|
||||
NOBGT: ${{ matrix.nobgt }}
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Run a one-line script
|
||||
run: echo Hello, world!
|
||||
- name: Run a multi-line script
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- name: install
|
||||
run: |
|
||||
echo Add other actions to build,
|
||||
echo test, and deploy your project.
|
||||
if [[ "${{ matrix.rust }}" == "nightly" ]]; then
|
||||
rustup default nightly
|
||||
fi
|
||||
rustup target add ${{ matrix.target }}
|
||||
if [[ "$TARGET" == "x86_64-unknown-linux-musl" ]]; then
|
||||
sudo apt install -y musl-tools
|
||||
fi
|
||||
- name: test
|
||||
run: sh ci/run.sh
|
||||
test_bench:
|
||||
name: Benchmarks using x86_64-unknown-linux-gnu (nightly)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- run: rustup default nightly
|
||||
- run: cargo test --bench roundtrip
|
||||
check:
|
||||
name: Rustfmt and Clippy
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- run: rustup component add rustfmt clippy
|
||||
- run: cargo fmt --all -- --check
|
||||
- run: cargo clippy -p tikv-jemalloc-sys -- -D clippy::all
|
||||
- run: cargo clippy -p tikv-jemallocator -- -D clippy::all
|
||||
- run: cargo clippy -p tikv-jemallocator-global -- -D clippy::all
|
||||
- run: cargo clippy -p tikv-jemalloc-ctl -- -D clippy::all
|
||||
- run: env RUSTDOCFLAGS="--cfg jemallocator_docs" cargo doc
|
||||
- run: shellcheck ci/*.sh
|
||||
|
|
90
.travis.yml
90
.travis.yml
|
@ -1,90 +0,0 @@
|
|||
language: rust
|
||||
rust: nightly
|
||||
services: docker
|
||||
|
||||
jobs:
|
||||
include:
|
||||
# Linux
|
||||
- name: "aarch64-unknown-linux-gnu"
|
||||
env: TARGET=aarch64-unknown-linux-gnu NO_JEMALLOC_TESTS=1
|
||||
arch: arm64
|
||||
- name: "powerpc64le-unknown-linux-gnu"
|
||||
env: TARGET=powerpc64le-unknown-linux-gnu NO_JEMALLOC_TESTS=1
|
||||
arch: ppc64le
|
||||
- name: "x86_64-unknown-linux-gnu (nightly)"
|
||||
env: TARGET=x86_64-unknown-linux-gnu VALGRIND=1
|
||||
install: rustup component add llvm-tools-preview
|
||||
addons: &valgrind
|
||||
apt:
|
||||
packages:
|
||||
- valgrind
|
||||
- name: "x86_64-unknown-linux-gnu (stable)"
|
||||
env: TARGET=x86_64-unknown-linux-gnu VALGRIND=1
|
||||
rust: stable
|
||||
install: rustup component add llvm-tools-preview
|
||||
addons: *valgrind
|
||||
- name: "Benchmarks using x86_64-unknown-linux-gnu (nightly)"
|
||||
env: TARGET=x86_64-unknown-linux-gnu
|
||||
install: true
|
||||
script:
|
||||
- cargo test --bench roundtrip
|
||||
# FIXME: Re-enable this when allocator API is stable.
|
||||
# - cargo test --features=alloc_trait --bench roundtrip
|
||||
- name: "x86_64-unknown-linux-musl"
|
||||
env: TARGET=x86_64-unknown-linux-musl NOBGT=1 NO_JEMALLOC_TESTS=1
|
||||
install: rustup target add x86_64-unknown-linux-musl
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
musl-tools
|
||||
|
||||
# OSX
|
||||
# FIXME: cannot jemalloc tests fail due to:
|
||||
# https://github.com/jemalloc/jemalloc/issues/1320
|
||||
# https://github.com/gnzlbg/jemallocator/issues/85
|
||||
# FIXME: valgrind fails on OSX
|
||||
# https://github.com/gnzlbg/jemallocator/issues/86
|
||||
- name: "x86_64-apple-darwin (nightly)"
|
||||
env: TARGET=x86_64-apple-darwin NO_JEMALLOC_TESTS=1
|
||||
os: osx
|
||||
osx_image: xcode10
|
||||
install: rustup component add llvm-tools-preview
|
||||
install: rustup component add llvm-tools-preview
|
||||
- name: "x86_64-apple-darwin (stable)"
|
||||
env: TARGET=x86_64-apple-darwin NO_JEMALLOC_TESTS=1
|
||||
os: osx
|
||||
osx_image: xcode10
|
||||
rust: stable
|
||||
install: rustup component add llvm-tools-preview
|
||||
|
||||
# TOOLING
|
||||
- name: "Documentation"
|
||||
install: true
|
||||
script: RUSTDOCFLAGS="--cfg jemallocator_docs" cargo doc
|
||||
- name: "rustfmt"
|
||||
install: true
|
||||
rust: nightly
|
||||
script: |
|
||||
if rustup component add rustfmt-preview ; then
|
||||
cargo fmt --all -- --check
|
||||
fi
|
||||
- name: "clippy"
|
||||
install: true
|
||||
rust: nightly
|
||||
# allow(clippy::all) fails in the syscrate, so we can't use --all here:
|
||||
script: |
|
||||
if rustup component add clippy-preview ; then
|
||||
cargo clippy -p tikv-jemalloc-sys -- -D clippy::all
|
||||
cargo clippy -p tikv-jemallocator -- -D clippy::all
|
||||
cargo clippy -p tikv-jemallocator-global -- -D clippy::all
|
||||
cargo clippy -p tikv-jemalloc-ctl -- -D clippy::all
|
||||
fi
|
||||
- name: "Shellcheck"
|
||||
install: true
|
||||
script: shellcheck ci/*.sh
|
||||
|
||||
install: rustup target add ${TARGET}
|
||||
script: sh ci/run.sh
|
||||
notifications:
|
||||
email:
|
||||
on_success: never
|
21
README.md
21
README.md
|
@ -1,6 +1,6 @@
|
|||
# tikv-jemallocator
|
||||
|
||||
[![Travis-CI Status]][travis] [![Latest Version]][crates.io] [![docs]][docs.rs]
|
||||
[![ci]][github actions] [![Latest Version]][crates.io] [![docs]][docs.rs]
|
||||
|
||||
This project is a simplified fork of [jemallocator](https://github.com/gnzlbg/jemallocator) focus on server.
|
||||
|
||||
|
@ -53,18 +53,17 @@ The following table describes the supported platforms:
|
|||
* `build`: does the library compile for the target?
|
||||
* `run`: do `tikv-jemallocator` and `tikv-jemalloc-sys` tests pass on the target?
|
||||
* `jemalloc`: do `tikv-jemalloc`'s tests pass on the target?
|
||||
* `valgrind`: do the tests pass under valgrind?
|
||||
|
||||
Tier 1 targets are tested on all Rust channels (stable, beta, and nightly). All
|
||||
other targets are only tested on Rust nightly.
|
||||
|
||||
| Linux targets: | build | run | jemalloc | valgrind |
|
||||
|-------------------------------------|-----------|---------|--------------|--------------|
|
||||
| `aarch64-unknown-linux-gnu` | ✓ | ✓ | ✗ | ✗ |
|
||||
| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | ✗ | ✗ |
|
||||
| `x86_64-unknown-linux-gnu` (tier 1) | ✓ | ✓ | ✓ | ✓ |
|
||||
| **MacOSX targets:** | **build** | **run** | **jemalloc** | **valgrind** |
|
||||
| `x86_64-apple-darwin` (tier 1) | ✓ | ✓ | ✗ | ✗ |
|
||||
| Linux targets: | build | run | jemalloc |
|
||||
|-------------------------------------|-----------|---------|--------------|
|
||||
| `aarch64-unknown-linux-gnu` | ✓ | ✓ | ✗ |
|
||||
| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | ✗ |
|
||||
| `x86_64-unknown-linux-gnu` (tier 1) | ✓ | ✓ | ✓ |
|
||||
| **MacOSX targets:** | **build** | **run** | **jemalloc** |
|
||||
| `x86_64-apple-darwin` (tier 1) | ✓ | ✓ | ✗ |
|
||||
|
||||
## Features
|
||||
|
||||
|
@ -88,9 +87,9 @@ Unless you explicitly state otherwise, any contribution intentionally submitted
|
|||
for inclusion in `tikv-jemallocator` by you, as defined in the Apache-2.0 license,
|
||||
shall be dual licensed as above, without any additional terms or conditions.
|
||||
|
||||
[travis]: https://travis-ci.com/tikv/jemallocator
|
||||
[Travis-CI Status]: https://travis-ci.com/tikv/jemallocator.svg?branch=master
|
||||
[Latest Version]: https://img.shields.io/crates/v/tikv-jemallocator.svg
|
||||
[crates.io]: https://crates.io/crates/tikv-jemallocator
|
||||
[docs]: https://docs.rs/tikv-jemallocator/badge.svg
|
||||
[docs.rs]: https://docs.rs/tikv-jemallocator/
|
||||
[ci]: https://github.com/tikv/jemallocator/actions/workflows/main.yml/badge.svg
|
||||
[github actions]: https://github.com/tikv/jemallocator/actions
|
||||
|
|
44
ci/run.sh
44
ci/run.sh
|
@ -24,44 +24,7 @@ else
|
|||
export JEMALLOC_SYS_RUN_JEMALLOC_TESTS=1
|
||||
fi
|
||||
|
||||
if [ "${VALGRIND}" = "1" ]
|
||||
then
|
||||
case "${TARGET}" in
|
||||
"x86_64-unknown-linux-gnu")
|
||||
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER=valgrind
|
||||
;;
|
||||
"x86_64-apple-darwin")
|
||||
export CARGO_TARGET_X86_64_APPLE_DARWIN_RUNNER=valgrind
|
||||
;;
|
||||
*)
|
||||
echo "Specify how to run valgrind for TARGET=${TARGET}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ "${TARGET}" = "x86_64-unknown-linux-gnu" ] || [ "${TARGET}" = "x86_64-apple-darwin" ]
|
||||
then
|
||||
# Not using tee to avoid too much logs that exceeds travis' limit.
|
||||
if ! cargo build -vv --target "${TARGET}" > build_no_std.txt 2>&1; then
|
||||
tail -n 1024 build_no_std.txt
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check that the no-std builds are not linked against a libc with default
|
||||
# features or the `use_std` feature enabled:
|
||||
! grep -q "default" build_no_std.txt
|
||||
! grep -q "use_std" build_no_std.txt
|
||||
|
||||
RUST_SYS_ROOT=$(rustc --target="${TARGET}" --print sysroot)
|
||||
RUST_LLVM_NM="${RUST_SYS_ROOT}/lib/rustlib/${TARGET}/bin/llvm-nm"
|
||||
|
||||
find target/ -iname '*jemalloc*.rlib' | while read -r rlib; do
|
||||
echo "${RUST_LLVM_NM} ${rlib}"
|
||||
! $RUST_LLVM_NM "${rlib}" | grep "std"
|
||||
done
|
||||
fi
|
||||
|
||||
cargo build --target "${TARGET}"
|
||||
cargo test --target "${TARGET}"
|
||||
cargo test --target "${TARGET}" --features profiling
|
||||
cargo test --target "${TARGET}" --features debug
|
||||
|
@ -103,7 +66,10 @@ case "${TARGET}" in
|
|||
;;
|
||||
esac
|
||||
|
||||
cargo test --target "${TARGET}" -p systest
|
||||
if rustc --version | grep -v nightly >/dev/null; then
|
||||
# systest can't be built on nightly
|
||||
cargo test --target "${TARGET}" -p systest
|
||||
fi
|
||||
cargo test --target "${TARGET}" --manifest-path jemallocator-global/Cargo.toml
|
||||
cargo test --target "${TARGET}" \
|
||||
--manifest-path jemallocator-global/Cargo.toml \
|
||||
|
|
|
@ -223,7 +223,7 @@ pub unsafe fn update<T>(name: &[u8], mut value: T) -> Result<T> {
|
|||
/// which is undefined behavior.
|
||||
pub unsafe fn read_str_mib(mib: &[usize]) -> Result<&'static [u8]> {
|
||||
let ptr: *const c_char = read_mib(mib)?;
|
||||
ptr2str(ptr)
|
||||
Ok(ptr2str(ptr))
|
||||
}
|
||||
|
||||
/// Uses the MIB `mib` as key to the _MALLCTL NAMESPACE_ and writes its `value`.
|
||||
|
@ -274,7 +274,7 @@ pub unsafe fn update_str_mib(
|
|||
value: &'static [u8],
|
||||
) -> Result<&'static [u8]> {
|
||||
let ptr: *const c_char = update_mib(mib, value.as_ptr() as *const c_char)?;
|
||||
ptr2str(ptr)
|
||||
Ok(ptr2str(ptr))
|
||||
}
|
||||
|
||||
/// Uses the null-terminated string `name` as key to the _MALLCTL NAMESPACE_ and
|
||||
|
@ -302,7 +302,7 @@ pub unsafe fn update_str_mib(
|
|||
/// which is undefined behavior.
|
||||
pub unsafe fn read_str(name: &[u8]) -> Result<&'static [u8]> {
|
||||
let ptr: *const c_char = read(name)?;
|
||||
ptr2str(ptr)
|
||||
Ok(ptr2str(ptr))
|
||||
}
|
||||
|
||||
/// Uses the null-terminated string `name` as key to the _MALLCTL NAMESPACE_ and
|
||||
|
@ -344,7 +344,7 @@ pub unsafe fn update_str(
|
|||
value: &'static [u8],
|
||||
) -> Result<&'static [u8]> {
|
||||
let ptr: *const c_char = update(name, value.as_ptr() as *const c_char)?;
|
||||
ptr2str(ptr)
|
||||
Ok(ptr2str(ptr))
|
||||
}
|
||||
|
||||
/// Converts a non-empty null-terminated character string at `ptr` into a valid
|
||||
|
@ -358,13 +358,13 @@ pub unsafe fn update_str(
|
|||
///
|
||||
/// If `ptr` does not point to a null-terminated character string the behavior
|
||||
/// is undefined.
|
||||
unsafe fn ptr2str(ptr: *const c_char) -> Result<&'static [u8]> {
|
||||
unsafe fn ptr2str(ptr: *const c_char) -> &'static [u8] {
|
||||
assert!(
|
||||
!ptr.is_null(),
|
||||
"attempt to convert a null-ptr to a UTF-8 string"
|
||||
);
|
||||
let len = libc::strlen(ptr);
|
||||
Ok(slice::from_raw_parts(ptr as *const u8, len + 1))
|
||||
slice::from_raw_parts(ptr as *const u8, len + 1)
|
||||
}
|
||||
|
||||
fn validate_name(name: &[u8]) {
|
||||
|
@ -396,16 +396,12 @@ mod tests {
|
|||
{
|
||||
let cstr = b"\0";
|
||||
let rstr = ptr2str(cstr as *const _ as *const c_char);
|
||||
assert!(rstr.is_ok());
|
||||
let rstr = rstr.unwrap();
|
||||
assert_eq!(rstr.len(), 1);
|
||||
assert_eq!(rstr, b"\0");
|
||||
}
|
||||
{
|
||||
let cstr = b"foo baaar\0";
|
||||
let rstr = ptr2str(cstr as *const _ as *const c_char);
|
||||
assert!(rstr.is_ok());
|
||||
let rstr = rstr.unwrap();
|
||||
assert_eq!(rstr.len(), b"foo baaar\0".len());
|
||||
assert_eq!(rstr, b"foo baaar\0");
|
||||
}
|
||||
|
|
|
@ -275,7 +275,7 @@ unsafe impl Alloc for Jemalloc {
|
|||
/// and the size reported by this function should not be depended on,
|
||||
/// since such behavior is entirely implementation-dependent.
|
||||
///
|
||||
/// # Unsafety
|
||||
/// # Safety
|
||||
///
|
||||
/// `ptr` must have been allocated by `Jemalloc` and must not have been freed yet.
|
||||
pub unsafe fn usable_size<T>(ptr: *const T) -> usize {
|
||||
|
|
Loading…
Reference in New Issue