diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..bd8c853 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,74 @@ +name: CI +on: + push: + branches: + - staging + - trying + +jobs: + + test_linux: + name: Test on Linux + runs-on: ubuntu-latest + strategy: + matrix: + rust: [1.50.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 + + test_macOS: + name: Test on macOS 11 + runs-on: macos-11 + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + override: true + target: aarch64-apple-darwin + - name: Checkout + uses: actions/checkout@v2 + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + - name: Test + run: ./ci/test_full.sh + # uses: actions-rs/cargo@v1 + # with: + # command: test + # args: --target aarch64-apple-darwin --all-features + + + fmt: + name: Format + runs-on: ubuntu-latest + steps: + - name: Rust install + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.50.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/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 0000000..d0e284a --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,31 @@ +name: main +on: + push: + branches: + - main + schedule: + - cron: '0 0 * * 0' # 00:00 Sunday + +jobs: + + test: + name: Test + runs-on: ubuntu-latest + strategy: + matrix: + rust: [1.50.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..8f67570 --- /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.50.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/README.md b/README.md index 5dc2e31..2bc4de1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # tmux-copyrat -![Rust](https://github.com/graelo/tmux-copyrat/workflows/Rust/badge.svg) +[![crate](https://img.shields.io/crates/v/tmux-copyrat.svg)](https://crates.io/crates/tmux-copyrat) +[![documentation](https://docs.rs/tmux-copyrat/badge.svg)](https://docs.rs/tmux-copyrat) +[![minimum rustc 1.8](https://img.shields.io/badge/rustc-1.50+-red.svg)](https://rust-lang.github.io/rfcs/2495-min-rust-version.html) +[![build status](https://github.com/graelo/tmux-copyrat/workflows/main/badge.svg)](https://github.com/graelo/tmux-copyrat/actions) + A hommage to [tmux-copyrat](https://github.com/tmux-plugins/tmux-copycat), written in [Rust](https://www.rust-lang.org/) for copy pasting within [tmux](http://tmux.github.io). diff --git a/ci/rustup.sh b/ci/rustup.sh new file mode 100755 index 0000000..f70cda2 --- /dev/null +++ b/ci/rustup.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# 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 + +ci=$(dirname $0) +for version in 1.50.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 new file mode 100755 index 0000000..b2f5a6c --- /dev/null +++ b/ci/test_full.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +set -e + +CRATE=tmux-copyrat +MSRV=1.50 + +get_rust_version() { + local array=($(rustc --version)); + echo "${array[1]}"; + return 0; +} +RUST_VERSION=$(get_rust_version) + +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]}" ) + ]] +} + +echo "Testing $CRATE on rustc $RUST_VERSION" +if ! check_version $MSRV ; then + echo "The minimum for $CRATE is rustc $MSRV" + exit 1 +fi + +FEATURES=() +# check_version 1.27 && FEATURES+=(libm) +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[*]}"