diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..c94dcd9 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,69 @@ +name: CI +on: + push: + branches: + - staging + - trying + +jobs: + + test: + name: Test + runs-on: ubuntu-latest + strategy: + matrix: + rust: [1.8.0, 1.15.0, 1.20.0, 1.26.0, 1.31.0, stable, beta, nightly] + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + override: true + - name: Checkout + uses: actions/checkout@v2 + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + - name: Test + run: ./ci/test_full.sh + + # try a target that doesn't have std at all + no_std: + name: No Std + runs-on: ubuntu-latest + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + override: true + target: thumbv6m-none-eabi + - name: Checkout + uses: actions/checkout@v1 + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + args: --target thumbv6m-none-eabi --no-default-features --features i128 + + fmt: + name: Format + runs-on: ubuntu-latest + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.42.0 + profile: minimal + override: true + components: rustfmt + - name: Checkout + uses: actions/checkout@v2 + - name: Check formatting + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check diff --git a/.github/workflows/master.yaml b/.github/workflows/master.yaml new file mode 100644 index 0000000..f9d3ad4 --- /dev/null +++ b/.github/workflows/master.yaml @@ -0,0 +1,31 @@ +name: master +on: + push: + branches: + - master + schedule: + - cron: '0 0 * * 0' # 00:00 Sunday + +jobs: + + test: + name: Test + runs-on: ubuntu-latest + strategy: + matrix: + rust: [1.8.0, stable] + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + override: true + - name: Checkout + uses: actions/checkout@v2 + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + - name: Test + run: ./ci/test_full.sh diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml new file mode 100644 index 0000000..96582ef --- /dev/null +++ b/.github/workflows/pr.yaml @@ -0,0 +1,46 @@ +name: PR +on: + pull_request: + +jobs: + + test: + name: Test + runs-on: ubuntu-latest + strategy: + matrix: + rust: [1.8.0, stable] + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + override: true + - name: Checkout + uses: actions/checkout@v2 + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + - name: Test + run: ./ci/test_full.sh + + fmt: + name: Format + runs-on: ubuntu-latest + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.42.0 + profile: minimal + override: true + components: rustfmt + - name: Checkout + uses: actions/checkout@v2 + - name: Check formatting + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5de21f3..0000000 --- a/.travis.yml +++ /dev/null @@ -1,39 +0,0 @@ -language: rust -sudo: false -rust: - - 1.8.0 - - 1.15.0 - - 1.20.0 - - 1.26.0 # has_i128 - - 1.31.0 # 2018! - - stable - - beta - - nightly -script: - - cargo build --verbose - - ./ci/test_full.sh -matrix: - include: - # try a target that doesn't have std at all - - name: "no_std" - rust: stable - env: TARGET=thumbv6m-none-eabi - before_script: - - rustup target add $TARGET - script: - - cargo build --verbose --target $TARGET --no-default-features --features i128 - - name: "rustfmt" - rust: 1.31.0 - before_script: - - rustup component add rustfmt - script: - - cargo fmt --all -- --check -notifications: - email: - on_success: never -branches: - only: - - master - - next - - staging - - trying diff --git a/Cargo.toml b/Cargo.toml index 02f5b0f..1011dfb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ name = "num-integer" version = "0.1.42" readme = "README.md" build = "build.rs" -exclude = ["/ci/*", "/.travis.yml", "/bors.toml"] +exclude = ["/bors.toml", "/ci/*", "/.github/*"] [package.metadata.docs.rs] features = ["std"] diff --git a/README.md b/README.md index 4b3d42e..4fd8199 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![crate](https://img.shields.io/crates/v/num-integer.svg)](https://crates.io/crates/num-integer) [![documentation](https://docs.rs/num-integer/badge.svg)](https://docs.rs/num-integer) ![minimum rustc 1.8](https://img.shields.io/badge/rustc-1.8+-red.svg) -[![Travis status](https://travis-ci.org/rust-num/num-integer.svg?branch=master)](https://travis-ci.org/rust-num/num-integer) +![build status](https://github.com/rust-num/num-integer/workflows/master/badge.svg) `Integer` trait and functions for Rust. diff --git a/bors.toml b/bors.toml index ca08e81..e0c5618 100644 --- a/bors.toml +++ b/bors.toml @@ -1,3 +1,12 @@ status = [ - "continuous-integration/travis-ci/push", + "Test (1.8.0)", + "Test (1.15.0)", + "Test (1.20.0)", + "Test (1.26.0)", + "Test (1.31.0)", + "Test (stable)", + "Test (beta)", + "Test (nightly)", + "No Std", + "Format", ] diff --git a/ci/rustup.sh b/ci/rustup.sh index e82ece7..9d0fc30 100755 --- a/ci/rustup.sh +++ b/ci/rustup.sh @@ -1,12 +1,10 @@ #!/bin/sh -# Use rustup to locally run the same suite of tests as .travis.yml. -# (You should first install/update 1.8.0, stable, beta, and nightly.) +# Use rustup to locally run the same suite of tests as .github/workflows/ +# (You should first install/update all of the versions below.) set -ex -export TRAVIS_RUST_VERSION -for TRAVIS_RUST_VERSION in 1.8.0 1.15.0 1.20.0 stable beta nightly; do - run="rustup run $TRAVIS_RUST_VERSION" - $run cargo build --verbose - $run $PWD/ci/test_full.sh +ci=$(dirname $0) +for version in 1.8.0 1.15.0 1.20.0 1.26.0 1.31.0 stable beta nightly; do + rustup run "$version" "$ci/test_full.sh" done diff --git a/ci/test_full.sh b/ci/test_full.sh index e7c2549..ccbcc94 100755 --- a/ci/test_full.sh +++ b/ci/test_full.sh @@ -1,23 +1,62 @@ #!/bin/bash -set -ex +set -e -echo Testing num-integer on rustc ${TRAVIS_RUST_VERSION} +CRATE=num-integer +MSRV=1.8 -# num-integer should build and test everywhere. -cargo build --verbose -cargo test --verbose +get_rust_version() { + local array=($(rustc --version)); + echo "${array[1]}"; + return 0; +} +RUST_VERSION=$(get_rust_version) -# test `no_std` -cargo build --verbose --no-default-features -cargo test --verbose --no-default-features +check_version() { + IFS=. read -ra rust <<< "$RUST_VERSION" + IFS=. read -ra want <<< "$1" + [[ "${rust[0]}" -gt "${want[0]}" || + ( "${rust[0]}" -eq "${want[0]}" && + "${rust[1]}" -ge "${want[1]}" ) + ]] +} -# test `i128` -if [[ "$TRAVIS_RUST_VERSION" =~ ^(nightly|beta|stable)$ ]]; then - cargo build --verbose --features=i128 - cargo test --verbose --features=i128 +echo "Testing $CRATE on rustc $RUST_VERSION" +if ! check_version $MSRV ; then + echo "The minimum for $CRATE is rustc $MSRV" + exit 1 fi -if [[ "$TRAVIS_RUST_VERSION" == "nightly" ]]; then - cargo test --verbose --all-features --benches +FEATURES=() +check_version 1.26 && FEATURES+=(i128) +echo "Testing supported features: ${FEATURES[*]}" + +set -x + +# test the default +cargo build +cargo test + +# test `no_std` +cargo build --no-default-features +cargo test --no-default-features + +# test each isolated feature, with and without std +for feature in ${FEATURES[*]}; do + cargo build --no-default-features --features="std $feature" + cargo test --no-default-features --features="std $feature" + + cargo build --no-default-features --features="$feature" + cargo test --no-default-features --features="$feature" +done + +# test all supported features, with and without std +cargo build --features="std ${FEATURES[*]}" +cargo test --features="std ${FEATURES[*]}" + +cargo build --features="${FEATURES[*]}" +cargo test --features="${FEATURES[*]}" + +if rustc --version | grep -q nightly; then + cargo test --all-features --benches fi