From 1859ddc28aa2c5575df1d12a495b7ff40a6590be Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Tue, 10 Nov 2020 23:36:07 +0000 Subject: [PATCH] switch from travis to github workflows --- .github/workflows/rust.yml | 82 ++++++++++++++++++++++++++++++++++++++ .travis.yml | 78 ------------------------------------ contrib/test.sh | 77 +++++++++++++++++++++++++++++++++++ src/context.rs | 3 +- 4 files changed, 161 insertions(+), 79 deletions(-) create mode 100644 .github/workflows/rust.yml delete mode 100644 .travis.yml create mode 100755 contrib/test.sh diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..36680c0 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,82 @@ +on: [push, pull_request] + +name: Continuous integration + +jobs: + bench_nightly: + name: Nightly - ASan + Bench + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - nightly + steps: + - name: Checkout Crate + uses: actions/checkout@v2 + - name: Checkout Toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.rust }} + override: true + components: rust-src + - name: Running address sanitizer + env: + DO_ASAN: true + run: ./contrib/test.sh + - name: Running benchmarks + env: + DO_BENCH: true + run: ./contrib/test.sh + + wasm: + name: Stable - Docs / WebAssembly Build + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - stable + steps: + - name: Checkout Crate + uses: actions/checkout@v2 + - name: Checkout Toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.rust }} + override: true + - name: Building docs + env: + DO_DOCS: true + run: ./contrib/test.sh + - name: Running WASM build + env: + DO_WASM: true + run: ./contrib/test.sh + + Tests: + name: Tests + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - 1.29.0 + - beta + - stable + steps: + - name: Checkout Crate + uses: actions/checkout@v2 + - name: Checkout Toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.rust }} + override: true + - name: Pin cc if rust 1.29 + if: matrix.rust == '1.29.0' + run: cargo generate-lockfile --verbose && cargo update -p cc --precise "1.0.41" --verbose + - name: Running cargo + env: + DO_FEATURE_MATRIX: true + run: ./contrib/test.sh + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e6b754c..0000000 --- a/.travis.yml +++ /dev/null @@ -1,78 +0,0 @@ -language: rust -cache: - directories: - - wasm - -rust: - - stable - - beta - - nightly - - 1.29.0 -distro: bionic -os: - - linux - - windows - -addons: - chrome: stable - apt: - packages: - - clang-9 - - nodejs - -matrix: - exclude: - - rust: 1.29.0 - os: windows - -script: - - if [ "$TRAVIS_RUST_VERSION" == "1.29.0" ]; then - cargo generate-lockfile --verbose && cargo update -p cc --precise "1.0.41" --verbose; - fi - - cargo build --verbose --no-default-features - - cargo build --verbose --no-default-features --features="bitcoin_hashes" - - cargo build --verbose --no-default-features --features="serde" - - cargo build --verbose --no-default-features --features="lowmemory" - - cargo build --verbose --no-default-features --features="rand" - - cargo build --verbose --no-default-features --features="rand serde recovery endomorphism" - - cargo build --verbose --no-default-features --features="fuzztarget recovery" - - cargo build --verbose --features=rand - - cargo test --no-run --features=fuzztarget - - cargo test --verbose --features="bitcoin_hashes" - - cargo test --verbose --features=rand - - cargo test --verbose --features="rand rand-std" - - cargo test --verbose --features="rand serde" - - cargo test --verbose --features="rand serde recovery endomorphism" - - if [ ${TRAVIS_RUST_VERSION} != "1.29.0" ]; then - cargo test --verbose --features global-context; - fi - - cargo build --verbose - - cargo test --verbose - - cargo build --verbose --release - - cargo test --verbose --release - - cargo run --example sign_verify - - cargo run --example sign_verify_recovery --features=recovery - - cargo run --example generate_keys --features=rand - - if [ ${TRAVIS_RUST_VERSION} == "stable" ]; then cargo doc --verbose --features="rand,serde,recovery,endomorphism"; fi - - if [ ${TRAVIS_RUST_VERSION} == "nightly" ]; then cargo test --verbose --benches --features=unstable; fi - - | - if [ ${TRAVIS_RUST_VERSION} == "nightly" -a "$TRAVIS_OS_NAME" = "linux" ]; then - cargo clean - rustup component add rust-src - CC='clang -fsanitize=address -fno-omit-frame-pointer' \ - RUSTFLAGS='-Zsanitizer=address -Clinker=clang -Cforce-frame-pointers=yes' \ - ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' \ - cargo test --lib --verbose --features="rand-std serde recovery bitcoin_hashes" -Zbuild-std --target x86_64-unknown-linux-gnu && - cargo clean && - CC='clang -fsanitize=memory -fno-omit-frame-pointer' \ - RUSTFLAGS='-Zsanitizer=memory -Zsanitizer-memory-track-origins -Cforce-frame-pointers=yes' \ - cargo test --lib --verbose --features="rand-std serde recovery bitcoin_hashes" -Zbuild-std --target x86_64-unknown-linux-gnu && - cd no_std_test && cargo run --release | grep -q "Verified Successfully" - fi - - if [ ${TRAVIS_RUST_VERSION} == "stable" -a "$TRAVIS_OS_NAME" = "linux" ]; then - clang --version && - CARGO_TARGET_DIR=wasm cargo install --verbose --force wasm-pack && - printf '\n[lib]\ncrate-type = ["cdylib", "rlib"]\n' >> Cargo.toml && - CC=clang-9 wasm-pack build && - CC=clang-9 wasm-pack test --node; - fi diff --git a/contrib/test.sh b/contrib/test.sh new file mode 100755 index 0000000..0d55b4d --- /dev/null +++ b/contrib/test.sh @@ -0,0 +1,77 @@ +#!/bin/sh -ex + +FEATURES="bitcoin_hashes endomorphism global-context lowmemory rand rand-std recovery serde" + +# Use toolchain if explicitly specified +if [ -n "$TOOLCHAIN" ] +then + alias cargo="cargo +$TOOLCHAIN" +fi + +cargo --version +rustc --version + +# Defaults / sanity checks +cargo build --verbose +cargo test --verbose + +if [ "$DO_FEATURE_MATRIX" = true ]; then + cargo build --verbose --no-default-features + #This doesn't work but probably should --andrew + #cargo test --verbose --no-default-features + + # All features + cargo build --verbose --no-default-features --features="$FEATURES" + cargo test --verbose --features="$FEATURES" + # Single features + for feature in ${FEATURES} + do + cargo build --verbose --no-default-features --features="$feature" + cargo test --verbose --features="$feature" + done + + # Other combos + cargo test --no-run --verbose --features="fuzztarget" + cargo test --no-run --verbose --features="fuzztarget recovery" + cargo test --verbose --features="rand rand-std" + cargo test --verbose --features="rand serde" + + # Examples + cargo run --example sign_verify + cargo run --example sign_verify_recovery --features=recovery + cargo run --example generate_keys --features=rand +fi + +# Docs +if [ "$DO_DOCS" = true ]; then + cargo doc --verbose --features="$FEATURES" +fi + +# Webassembly stuff +if [ "$DO_WASM" = true ]; then + clang --version && + CARGO_TARGET_DIR=wasm cargo install --verbose --force wasm-pack && + printf '\n[lib]\ncrate-type = ["cdylib", "rlib"]\n' >> Cargo.toml && + CC=clang-9 wasm-pack build && + CC=clang-9 wasm-pack test --node; +fi + +# Address Sanitizer +if [ "$DO_ASAN" = true ]; then + cargo clean + CC='clang -fsanitize=address -fno-omit-frame-pointer' \ + RUSTFLAGS='-Zsanitizer=address -Clinker=clang -Cforce-frame-pointers=yes' \ + ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' \ + cargo test --lib --verbose --features="$FEATURES" -Zbuild-std --target x86_64-unknown-linux-gnu && + cargo clean && + CC='clang -fsanitize=memory -fno-omit-frame-pointer' \ + RUSTFLAGS='-Zsanitizer=memory -Zsanitizer-memory-track-origins -Cforce-frame-pointers=yes' \ + cargo test --lib --verbose --features="$FEATURES" -Zbuild-std --target x86_64-unknown-linux-gnu && + cd no_std_test && cargo run --release | grep -q "Verified Successfully" +fi + +# Bench +if [ "$DO_BENCH" = true ]; then + cargo bench --features="unstable" +fi + diff --git a/src/context.rs b/src/context.rs index 5fb7d18..d78b3e1 100644 --- a/src/context.rs +++ b/src/context.rs @@ -12,6 +12,7 @@ pub use self::std_only::*; #[cfg(feature = "global-context")] /// Module implementing a singleton pattern for a global `Secp256k1` context pub mod global { + use rand; use std::ops::Deref; use std::sync::Once; use {Secp256k1, All}; @@ -337,4 +338,4 @@ impl<'buf> Secp256k1> { buf: ptr::null_mut::<[u8;0]>() as *mut [u8] , }) } -} \ No newline at end of file +}