Merge pull request #45 from rust-bitcoin/github-ci

Add github actions files for CI
This commit is contained in:
Steven Roose 2023-02-28 02:52:48 +00:00 committed by GitHub
commit 8f43d91d3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 160 additions and 31 deletions

100
.github/workflows/rust.yml vendored Normal file
View File

@ -0,0 +1,100 @@
on: [push, pull_request]
name: Continuous integration
jobs:
Stable:
name: Test - stable toolchain
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Checkout Crate
uses: actions/checkout@v3
- name: Checkout Toolchain
# https://github.com/dtolnay/rust-toolchain
uses: dtolnay/rust-toolchain@stable
- name: Running test script
env:
DO_NO_STD: true
DO_FEATURE_MATRIX: true
run: ./contrib/test.sh
Beta:
name: Test - beta toolchain
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Checkout Crate
uses: actions/checkout@v3
- name: Checkout Toolchain
uses: dtolnay/rust-toolchain@beta
- name: Running test script
env:
DO_NO_STD: true
run: ./contrib/test.sh
Nightly:
name: Test - nightly toolchain
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Checkout Crate
uses: actions/checkout@v3
- name: Checkout Toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Running test script
env:
DO_NO_STD: true
run: ./contrib/test.sh
MSRV:
name: Test - 1.41.1 toolchain
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Checkout Crate
uses: actions/checkout@v3
- name: Checkout Toolchain
uses: dtolnay/rust-toolchain@1.41.1
- name: Running test script
env:
DO_NO_STD: true
DO_FEATURE_MATRIX: true
run: ./contrib/test.sh
Arch32bit:
name: Test 32-bit version
runs-on: ubuntu-latest
steps:
- name: Checkout Crate
uses: actions/checkout@v3
- name: Checkout Toolchain
uses: dtolnay/rust-toolchain@stable
- name: Add architecture i386
run: sudo dpkg --add-architecture i386
- name: Install i686 gcc
run: sudo apt-get update -y && sudo apt-get install -y gcc-multilib
- name: Install target
run: rustup target add i686-unknown-linux-gnu
- name: Run test on i686
run: cargo test --target i686-unknown-linux-gnu
Cross:
name: Cross test
if: ${{ !github.event.act }}
runs-on: ubuntu-latest
steps:
- name: Checkout Crate
uses: actions/checkout@v3
- name: Checkout Toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install target
run: rustup target add s390x-unknown-linux-gnu
- name: install cross
run: cargo install cross --locked
- name: run cross test
run: cross test --target s390x-unknown-linux-gnu

View File

@ -1,28 +0,0 @@
language: rust
cache: cargo
matrix:
include:
- rust: stable
env: BENCHES=false
- rust: beta
env: BENCHES=false
- rust: nightly
env: BENCHES=true
- rust: 1.29.0
env: BENCHES=false
before_install:
- sudo apt-get -qq update
- sudo apt-get install -y binutils-dev libunwind8-dev
script:
- cargo build --verbose
- cargo test --verbose
- cargo build --verbose --no-default-features --features all-languages
- cargo test --verbose --no-default-features --features all-languages
- cargo build --verbose --features rand,all-languages
- cargo test --verbose --features rand,all-languages
# benchmarks
- if ${BENCHES}; then cargo bench --verbose --features rand; fi
- if ${BENCHES}; then cargo bench --verbose --features rand,japanese; fi

View File

@ -45,7 +45,7 @@ rand_core = "0.4.0"
unicode-normalization = { version = "=0.1.9", optional = true } unicode-normalization = { version = "=0.1.9", optional = true }
rand = { version = "0.6.0", optional = true } rand = { version = "0.6.0", optional = true }
serde = { version = "1.0", default-features = false, optional = true } serde = { version = "1.0", default-features = false, features = [ "alloc" ], optional = true }
# Enabling this feature raises the MSRV to 1.51 # Enabling this feature raises the MSRV to 1.51
zeroize = {version = "1.5", features = ["zeroize_derive"], optional = true} zeroize = {version = "1.5", features = ["zeroize_derive"], optional = true}

54
contrib/test.sh Executable file
View File

@ -0,0 +1,54 @@
#!/bin/sh
set -ex
FEATURES="serde rand all-languages"
cargo --version
rustc --version
# Work out if we are using a nightly toolchain.
NIGHTLY=false
if cargo --version | grep nightly; then
NIGHTLY=true
fi
# Pin dependencies as required if we are using MSRV toolchain.
# if cargo --version | grep "1\.41"; then
# fi
echo "********* Testing std *************"
# Test without any features other than std first
cargo test --verbose --no-default-features --features="std"
echo "********* Testing default *************"
# Then test with the default features
cargo test --verbose
if [ "$DO_NO_STD" = true ]
then
echo "********* Testing no-std build *************"
# Build no_std, to make sure that cfg(test) doesn't hide any issues
cargo build --verbose --no-default-features
# Build std + no_std, to make sure they are not incompatible
cargo build --verbose
# Test no_std
cargo test --verbose --no-default-features
# Build all features
cargo build --verbose --features="$FEATURES" --no-default-features
# Build specific features
for feature in ${FEATURES}
do
cargo build --verbose --features="$feature" --no-default-features
done
fi
# Test each feature
for feature in ${FEATURES}
do
echo "********* Testing $feature *************"
cargo test --verbose --features="$feature"
done

View File

@ -8,8 +8,9 @@ macro_rules! serde_string_impl {
where where
D: $crate::serde::de::Deserializer<'de>, D: $crate::serde::de::Deserializer<'de>,
{ {
use std::fmt::{self, Formatter}; use core::fmt::{self, Formatter};
use std::str::FromStr; use core::str::FromStr;
use alloc::string::String;
struct Visitor; struct Visitor;
impl<'de> $crate::serde::de::Visitor<'de> for Visitor { impl<'de> $crate::serde::de::Visitor<'de> for Visitor {

View File

@ -28,6 +28,8 @@
#[cfg(any(test, feature = "std"))] #[cfg(any(test, feature = "std"))]
pub extern crate core; pub extern crate core;
extern crate alloc;
extern crate bitcoin_hashes; extern crate bitcoin_hashes;
extern crate rand_core; extern crate rand_core;