From de6262046099ae784b789df2ca95860b5c1eca83 Mon Sep 17 00:00:00 2001 From: James Munns Date: Tue, 27 Aug 2019 15:23:34 +0200 Subject: [PATCH 1/7] Implement installation using trust --- .travis.yml | 2 +- ci/install-mdbook.sh | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100755 ci/install-mdbook.sh diff --git a/.travis.yml b/.travis.yml index 4c8dd88..4e68a8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ matrix: before_script: - rustup component add rustfmt - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/mdbook || cargo install --vers "^0.3" mdbook) + - (test -x $HOME/.cargo/bin/mdbook || ./ci/install-mdbook.sh) - cargo install-update -a script: diff --git a/ci/install-mdbook.sh b/ci/install-mdbook.sh new file mode 100755 index 0000000..112fc02 --- /dev/null +++ b/ci/install-mdbook.sh @@ -0,0 +1,19 @@ +set -euxo pipefail + +# Based on the Rust-Embedded WG's book CI +# https://github.com/rust-embedded/book/blob/master/ci/install.sh + +main() { + # Note - this will only accept releases tagged with v0.3.x + local tag=$(git ls-remote --tags --refs --exit-code \ + https://github.com/rust-lang-nursery/mdbook \ + | cut -d/ -f3 \ + | grep -E '^v0.3.[0-9]+$' \ + | sort --version-sort \ + | tail -n1) + + curl -LSfs https://japaric.github.io/trust/install.sh | \ + sh -s -- --git rust-lang-nursery/mdbook --tag $tag +} + +main From eba85c3ede72326f1343db3e2ac40a66761131ae Mon Sep 17 00:00:00 2001 From: James Munns Date: Tue, 27 Aug 2019 15:33:46 +0200 Subject: [PATCH 2/7] Fix regex, also install cargo-update with trust --- .travis.yml | 2 +- ci/install-cargo-update.sh | 19 +++++++++++++++++++ ci/install-mdbook.sh | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100755 ci/install-cargo-update.sh diff --git a/.travis.yml b/.travis.yml index 4e68a8b..01a364e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ matrix: before_script: - rustup component add rustfmt - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) + - (test -x $HOME/.cargo/bin/cargo-install-update || ./ci/install-cargo-update.sh) - (test -x $HOME/.cargo/bin/mdbook || ./ci/install-mdbook.sh) - cargo install-update -a diff --git a/ci/install-cargo-update.sh b/ci/install-cargo-update.sh new file mode 100755 index 0000000..0755adc --- /dev/null +++ b/ci/install-cargo-update.sh @@ -0,0 +1,19 @@ +set -euxo pipefail + +# Based on the Rust-Embedded WG's book CI +# https://github.com/rust-embedded/book/blob/master/ci/install.sh + +main() { + # Note - this will accept any tagged release + local tag=$(git ls-remote --tags --refs --exit-code \ + https://github.com/nabijaczleweli/cargo-update \ + | cut -d/ -f3 \ + | grep -E '^v[0-9\.]+$' \ + | sort --version-sort \ + | tail -n1) + + curl -LSfs https://japaric.github.io/trust/install.sh | \ + sh -s -- --git nabijaczleweli/cargo-update --tag $tag +} + +main diff --git a/ci/install-mdbook.sh b/ci/install-mdbook.sh index 112fc02..01c87f8 100755 --- a/ci/install-mdbook.sh +++ b/ci/install-mdbook.sh @@ -8,7 +8,7 @@ main() { local tag=$(git ls-remote --tags --refs --exit-code \ https://github.com/rust-lang-nursery/mdbook \ | cut -d/ -f3 \ - | grep -E '^v0.3.[0-9]+$' \ + | grep -E '^v0\.3\.[0-9]+$' \ | sort --version-sort \ | tail -n1) From f5823df70c13394ef9fbf923ad8fdbfdba00c55c Mon Sep 17 00:00:00 2001 From: James Munns Date: Tue, 27 Aug 2019 15:52:55 +0200 Subject: [PATCH 3/7] Include modified trust file --- ci/install-cargo-update.sh | 3 +- ci/install-tbz2.sh | 158 +++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+), 2 deletions(-) create mode 100755 ci/install-tbz2.sh diff --git a/ci/install-cargo-update.sh b/ci/install-cargo-update.sh index 0755adc..12382e6 100755 --- a/ci/install-cargo-update.sh +++ b/ci/install-cargo-update.sh @@ -12,8 +12,7 @@ main() { | sort --version-sort \ | tail -n1) - curl -LSfs https://japaric.github.io/trust/install.sh | \ - sh -s -- --git nabijaczleweli/cargo-update --tag $tag + $(dirname $(realpath $0))/install-tbz2.sh --git nabijaczleweli/cargo-update --tag $tag --crate cargo-install-update } main diff --git a/ci/install-tbz2.sh b/ci/install-tbz2.sh new file mode 100755 index 0000000..94a6529 --- /dev/null +++ b/ci/install-tbz2.sh @@ -0,0 +1,158 @@ +#!/bin/sh + +# NOTE: This is based on https://japaric.github.io/trust/install.sh, +# but has been modified to not expect a target tag, and to instead +# expect bzip2 tar files (.tbz2) instead of gzip tar files (.tar.gz) + +set -e + +help() { + cat <<'EOF' +Install a binary release of a Rust crate hosted on GitHub + +Usage: + install.sh [options] + +Options: + -h, --help Display this message + --git SLUG Get the crate from "https://github/$SLUG" + -f, --force Force overwriting an existing binary + --crate NAME Name of the crate to install (default ) + --tag TAG Tag (version) of the crate to install (default ) + --target TARGET Install the release compiled for $TARGET (default <`rustc` host>) + --to LOCATION Where to install the binary (default ~/.cargo/bin) +EOF +} + +say() { + echo "install.sh: $1" +} + +say_err() { + say "$1" >&2 +} + +err() { + if [ ! -z $td ]; then + rm -rf $td + fi + + say_err "ERROR $1" + exit 1 +} + +need() { + if ! command -v $1 > /dev/null 2>&1; then + err "need $1 (command not found)" + fi +} + +force=false +while test $# -gt 0; do + case $1 in + --crate) + crate=$2 + shift + ;; + --force | -f) + force=true + ;; + --git) + git=$2 + shift + ;; + --help | -h) + help + exit 0 + ;; + --tag) + tag=$2 + shift + ;; + --target) + target=$2 + shift + ;; + --to) + dest=$2 + shift + ;; + *) + ;; + esac + shift +done + +# Dependencies +need basename +need curl +need install +need mkdir +need mktemp +need tar + +# Optional dependencies +if [ -z $crate ] || [ -z $tag ] || [ -z $target ]; then + need cut +fi + +if [ -z $tag ]; then + need rev +fi + +if [ -z $target ]; then + need grep + need rustc +fi + +if [ -z $git ]; then + err 'must specify a git repository using `--git`. Example: `install.sh --git japaric/cross`' +fi + +url="https://github.com/$git" +say_err "GitHub repository: $url" + +if [ -z $crate ]; then + crate=$(echo $git | cut -d'/' -f2) +fi + +say_err "Crate: $crate" + +url="$url/releases" + +if [ -z $tag ]; then + tag=$(curl -s "$url/latest" | cut -d'"' -f2 | rev | cut -d'/' -f1 | rev) + say_err "Tag: latest ($tag)" +else + say_err "Tag: $tag" +fi + +if [ -z $target ]; then + target=$(rustc -Vv | grep host | cut -d' ' -f2) +fi + +say_err "Target: $target" + +if [ -z $dest ]; then + dest="$HOME/.cargo/bin" +fi + +say_err "Installing to: $dest" + +url="$url/download/$tag/$crate-$tag.tbz2" + +td=$(mktemp -d || mktemp -d -t tmp) +curl -sL $url | tar -C $td -xj + +for f in $(ls $td); do + test -x $td/$f || continue + + if [ -e "$dest/$f" ] && [ $force = false ]; then + err "$f already exists in $dest" + else + mkdir -p $dest + install -m 755 $td/$f $dest + fi +done + +rm -rf $td From e0212e5229ddc787077a9359777793fb23aff42a Mon Sep 17 00:00:00 2001 From: James Munns Date: Tue, 27 Aug 2019 15:59:28 +0200 Subject: [PATCH 4/7] Don't install cargo-update at all --- .travis.yml | 2 - ci/install-cargo-update.sh | 18 ----- ci/install-tbz2.sh | 158 ------------------------------------- 3 files changed, 178 deletions(-) delete mode 100755 ci/install-cargo-update.sh delete mode 100755 ci/install-tbz2.sh diff --git a/.travis.yml b/.travis.yml index 01a364e..5f9aac5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,9 +18,7 @@ matrix: before_script: - rustup component add rustfmt - - (test -x $HOME/.cargo/bin/cargo-install-update || ./ci/install-cargo-update.sh) - (test -x $HOME/.cargo/bin/mdbook || ./ci/install-mdbook.sh) - - cargo install-update -a script: - if ![[ -n "$BUILD_BOOK" ]]; then cargo check --all --benches --bins --examples --tests && cargo test --all; fi diff --git a/ci/install-cargo-update.sh b/ci/install-cargo-update.sh deleted file mode 100755 index 12382e6..0000000 --- a/ci/install-cargo-update.sh +++ /dev/null @@ -1,18 +0,0 @@ -set -euxo pipefail - -# Based on the Rust-Embedded WG's book CI -# https://github.com/rust-embedded/book/blob/master/ci/install.sh - -main() { - # Note - this will accept any tagged release - local tag=$(git ls-remote --tags --refs --exit-code \ - https://github.com/nabijaczleweli/cargo-update \ - | cut -d/ -f3 \ - | grep -E '^v[0-9\.]+$' \ - | sort --version-sort \ - | tail -n1) - - $(dirname $(realpath $0))/install-tbz2.sh --git nabijaczleweli/cargo-update --tag $tag --crate cargo-install-update -} - -main diff --git a/ci/install-tbz2.sh b/ci/install-tbz2.sh deleted file mode 100755 index 94a6529..0000000 --- a/ci/install-tbz2.sh +++ /dev/null @@ -1,158 +0,0 @@ -#!/bin/sh - -# NOTE: This is based on https://japaric.github.io/trust/install.sh, -# but has been modified to not expect a target tag, and to instead -# expect bzip2 tar files (.tbz2) instead of gzip tar files (.tar.gz) - -set -e - -help() { - cat <<'EOF' -Install a binary release of a Rust crate hosted on GitHub - -Usage: - install.sh [options] - -Options: - -h, --help Display this message - --git SLUG Get the crate from "https://github/$SLUG" - -f, --force Force overwriting an existing binary - --crate NAME Name of the crate to install (default ) - --tag TAG Tag (version) of the crate to install (default ) - --target TARGET Install the release compiled for $TARGET (default <`rustc` host>) - --to LOCATION Where to install the binary (default ~/.cargo/bin) -EOF -} - -say() { - echo "install.sh: $1" -} - -say_err() { - say "$1" >&2 -} - -err() { - if [ ! -z $td ]; then - rm -rf $td - fi - - say_err "ERROR $1" - exit 1 -} - -need() { - if ! command -v $1 > /dev/null 2>&1; then - err "need $1 (command not found)" - fi -} - -force=false -while test $# -gt 0; do - case $1 in - --crate) - crate=$2 - shift - ;; - --force | -f) - force=true - ;; - --git) - git=$2 - shift - ;; - --help | -h) - help - exit 0 - ;; - --tag) - tag=$2 - shift - ;; - --target) - target=$2 - shift - ;; - --to) - dest=$2 - shift - ;; - *) - ;; - esac - shift -done - -# Dependencies -need basename -need curl -need install -need mkdir -need mktemp -need tar - -# Optional dependencies -if [ -z $crate ] || [ -z $tag ] || [ -z $target ]; then - need cut -fi - -if [ -z $tag ]; then - need rev -fi - -if [ -z $target ]; then - need grep - need rustc -fi - -if [ -z $git ]; then - err 'must specify a git repository using `--git`. Example: `install.sh --git japaric/cross`' -fi - -url="https://github.com/$git" -say_err "GitHub repository: $url" - -if [ -z $crate ]; then - crate=$(echo $git | cut -d'/' -f2) -fi - -say_err "Crate: $crate" - -url="$url/releases" - -if [ -z $tag ]; then - tag=$(curl -s "$url/latest" | cut -d'"' -f2 | rev | cut -d'/' -f1 | rev) - say_err "Tag: latest ($tag)" -else - say_err "Tag: $tag" -fi - -if [ -z $target ]; then - target=$(rustc -Vv | grep host | cut -d' ' -f2) -fi - -say_err "Target: $target" - -if [ -z $dest ]; then - dest="$HOME/.cargo/bin" -fi - -say_err "Installing to: $dest" - -url="$url/download/$tag/$crate-$tag.tbz2" - -td=$(mktemp -d || mktemp -d -t tmp) -curl -sL $url | tar -C $td -xj - -for f in $(ls $td); do - test -x $td/$f || continue - - if [ -e "$dest/$f" ] && [ $force = false ]; then - err "$f already exists in $dest" - else - mkdir -p $dest - install -m 755 $td/$f $dest - fi -done - -rm -rf $td From b6c81868463bc58e1ac4287b587507c5861afa03 Mon Sep 17 00:00:00 2001 From: James Munns Date: Tue, 27 Aug 2019 16:06:51 +0200 Subject: [PATCH 5/7] Don't use version sort (bsd sort doesn't seem to have it) --- ci/install-mdbook.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/install-mdbook.sh b/ci/install-mdbook.sh index 01c87f8..3417c9c 100755 --- a/ci/install-mdbook.sh +++ b/ci/install-mdbook.sh @@ -9,7 +9,7 @@ main() { https://github.com/rust-lang-nursery/mdbook \ | cut -d/ -f3 \ | grep -E '^v0\.3\.[0-9]+$' \ - | sort --version-sort \ + | sort \ | tail -n1) curl -LSfs https://japaric.github.io/trust/install.sh | \ From b39c72068164ca823cf572dcb60499688cb844e3 Mon Sep 17 00:00:00 2001 From: James Munns Date: Tue, 27 Aug 2019 16:41:31 +0200 Subject: [PATCH 6/7] Only install mdbook if building the book --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5f9aac5..024d372 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ matrix: before_script: - rustup component add rustfmt - - (test -x $HOME/.cargo/bin/mdbook || ./ci/install-mdbook.sh) + - if [[ -n "$BUILD_BOOK" ]]; then (test -x $HOME/.cargo/bin/mdbook || ./ci/install-mdbook.sh); fi script: - if ![[ -n "$BUILD_BOOK" ]]; then cargo check --all --benches --bins --examples --tests && cargo test --all; fi From 192c9683d958e3022cf21d2a07466136752af360 Mon Sep 17 00:00:00 2001 From: James Munns Date: Tue, 27 Aug 2019 16:45:32 +0200 Subject: [PATCH 7/7] Correct boolean inversion and overrided env vars --- .travis.yml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 024d372..125dc16 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,28 +1,26 @@ language: rust -env: - - RUSTFLAGS="-D warnings" - matrix: fast_finish: true include: - rust: nightly os: linux - env: BUILD_DOCS=1 BUILD_BOOK=1 + env: RUSTFLAGS="-D warnings" BUILD_DOCS=1 BUILD_BOOK=1 - rust: nightly os: osx osx_image: xcode9.2 - env: BUILD_DOCS=1 + env: RUSTFLAGS="-D warnings" BUILD_DOCS=1 - rust: nightly-x86_64-pc-windows-msvc os: windows + env: RUSTFLAGS="-D warnings" before_script: - rustup component add rustfmt - - if [[ -n "$BUILD_BOOK" ]]; then (test -x $HOME/.cargo/bin/mdbook || ./ci/install-mdbook.sh); fi + - if [[ -n "$BUILD_BOOK" ]]; then (test -x $HOME/.cargo/bin/mdbook || ./ci/install-mdbook.sh); fi script: - - if ![[ -n "$BUILD_BOOK" ]]; then cargo check --all --benches --bins --examples --tests && cargo test --all; fi - - if [[ -n "$BUILD_BOOK" ]]; then cargo test --all --benches --bins --examples --tests; fi + - if ! [[ -n "$BUILD_BOOK" ]]; then cargo check --all --benches --bins --examples --tests && cargo test --all; fi + - if [[ -n "$BUILD_BOOK" ]]; then cargo test --all --benches --bins --examples --tests; fi - cargo fmt --all -- --check - - if [[ -n "$BUILD_DOCS" ]]; then cargo doc --features docs; fi - - if [[ -n "$BUILD_BOOK" ]]; then mdbook build docs && mdbook test -L ./target/debug/deps docs; fi + - if [[ -n "$BUILD_DOCS" ]]; then cargo doc --features docs; fi + - if [[ -n "$BUILD_BOOK" ]]; then mdbook build docs && mdbook test -L ./target/debug/deps docs; fi