From c721ba82b2910967ccc9aec90595aae5ba13e616 Mon Sep 17 00:00:00 2001 From: Michael Bryan Date: Sat, 30 Dec 2017 19:15:17 +0800 Subject: [PATCH] Update travis CI (#516) * Use japaric/trust for travis configuration * Moved the github pages logic (not running the script breaks the build) * Removed the x86 linux musl build --- .travis.yml | 91 +++++++++++++++++++++++-------- ci/before_deploy.sh | 51 +++++++++-------- ci/{deploy.sh => github_pages.sh} | 25 ++++++--- ci/install.sh | 47 ++++++++++++++++ ci/script.sh | 21 +++++++ 5 files changed, 177 insertions(+), 58 deletions(-) rename ci/{deploy.sh => github_pages.sh} (57%) create mode 100644 ci/install.sh create mode 100644 ci/script.sh diff --git a/.travis.yml b/.travis.yml index dcca59d2..1a919db9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,42 +1,87 @@ +# Based on the "trust" template v0.1.1 +# https://github.com/japaric/trust/tree/v0.1.1 + +dist: trusty language: rust -sudo: false +services: docker +sudo: required cache: cargo +before_cache: +- chmod -R a+r $HOME/.cargo -rust: - - stable - - nightly +env: + global: + - CRATE_NAME=mdbook + - secure: DPzSRXyfRIVTibv1wOKFeGekXlL8sumGEZxpeq911MpLlrndOKmOo5Ibi3JD8fbUOsE9A/5spj4B2KQNjhbplH+Cp26oEikjuNAA6cA/b2+/TMoC3i0klAYpVopBBV3FFna0gLP+q6t6fzG2v9TJrvmmVav6KVX6ylPNvD/LoReCjrkpgLIQuAQ6dSQNor9uV+EVt4plKhhkiS28DlYdgmTvNb5g4dzOhs8hoWty72J765VYWEDDC8qXn6N9GyrhsC3dhjASGn+1QDSCADYdbG9nrRlb4CZhrfcgOnHhAFva363kshg9HtCphigMgQy2oZXk4nLWK90/HuaPPkVj+N/lpIYjtiHOunToZJfIb0MWzyVI+7+I7WR6n6XbhLCPMe/sPXHHQ3HhQhZZ9xv7CDx9IkYJQBcF3LC+9kzJRi4QT0UTqrxcO3ncgXwvholP8Vg2KKPqFcbuyLPzbvr/o8zIilvLUFAEoDPfTEwSAC4BCzaGkFQVWzhWkgw8Pe1ckOEYFkZ0VLBuCpEiz+x45sbBL1SnnO5xhpjmdc572ZyW7ZmAABw1VfiWhhBWg4WGSf8lLnDHhNA36Qon34pnME/xpJQtWoo7ZZkkzvzYP/oW88/0UIMWDSOYKz7MijXlbNUggwAwUhrLzXDuB71HUKfPreFubfUxbOpu+OtTcOQ= -os: - - linux - - osx +matrix: + include: + # Android + - env: TARGET=arm-linux-androideabi DISABLE_TESTS=1 + + # Linux + - env: TARGET=aarch64-unknown-linux-gnu + - env: TARGET=arm-unknown-linux-gnueabi + - env: TARGET=i686-unknown-linux-gnu + - env: TARGET=x86_64-unknown-linux-gnu + - env: TARGET=x86_64-unknown-linux-musl + + # Mac + - env: TARGET=i686-apple-darwin + os: osx + - env: TARGET=x86_64-apple-darwin + os: osx + + # BSD + - env: TARGET=i686-unknown-freebsd DISABLE_TESTS=1 + - env: TARGET=x86_64-unknown-freebsd DISABLE_TESTS=1 + - env: TARGET=x86_64-unknown-netbsd DISABLE_TESTS=1 + + # Other channels + - env: TARGET=x86_64-unknown-linux-gnu + rust: beta + - env: TARGET=x86_64-apple-darwin + os: osx + rust: beta + - env: TARGET=x86_64-unknown-linux-gnu + rust: nightly + - env: TARGET=x86_64-apple-darwin + os: osx + rust: nightly + +before_install: +- set -e +- rustup self update + +install: +- sh ci/install.sh +- source ~/.cargo/env || true script: - - cargo build --verbose - - cargo test --verbose +- bash ci/script.sh after_success: - # Deploy the docs if the commit is on master - - test "$TRAVIS_PULL_REQUEST" == "false" && - test "$TRAVIS_BRANCH" == "master" && - test "$TRAVIS_RUST_VERSION" == "stable" && - npm install stylus nib && - bash ci/deploy.sh +- bash ci/github_pages.sh before_deploy: - # Script to create packages from the build artefacts to upload to GitHub - - bash ci/before_deploy.sh +- sh ci/before_deploy.sh deploy: - provider: releases api_key: - secure: Z1k7WqX7z+tT4+SzTh4tBBzf11VaADB4AWuEczHtylaEb/0hRs8gaiHCNSVHm/QTp0QPWQR2Vw7uKMhVuxG7I8X7h31j3A7ulYBh/iVk0DVIrtrn2Q4WOED9CpoXLuLtk2nxo9MBViFW7mw4nJe9H2Tn9o/9oEYBuwzekvW5mh4muqUuCVTr8eQVYbs3jbC9pQy5oYjOLeUnlL9Cey5VN/nAhzAtyFP+6lIMri0PKit4JtkFou/O1MEpFYlP3VGC2lFiWuByocPKBT/L45FecS9qoHq+i6+ZCPDH2eu46nuYsDbLKAkPdGvf1MdPBPwoj0vSnZbgaTisQ4hIoBngQQQPZlPaGtcdd6g6asxSfnbA9cQhClI5oZJmg+ksxQE+peE8pnbmZ10Ix0PpIkkfWdQeMdUUCQarOTkTK54Munw+X+kp1lH19j6+krQPLBYr95fPRd4b5tWsJD2+pb/UOYFEEJxMNoUHyLCrtdCO7imOwrSUcv51+Z8UudqfPpKQeszrJcntL4owip35r3sF5TsE9YfW5qssLC164IylvP32y1AcfL1jqg8b+zrqLZKanjvDOJ1dtHHuwKqxcwf7PhAf0YjAtVSH9OIYcDzmDa0EMLrq7EK0fs6NAeb5qt6CML7pZrRS3fmOxN53Fbmj81qm6TmjQjDe4dmZlELgNow= - file: ${PROJECT_NAME}-${TRAVIS_TAG}-${TRAVIS_OS_NAME}.tar.gz - # don't delete the artifacts from previous phases - skip_cleanup: true + - secure: cURRWBr034iqBz/ifD7uOunBfNR30YxIXfgLX0osWz+iafkVbhDGYYz9sBmRraqO2P7L2koEXMADVb/md1kI2+ykiq/ml+l9zuEAZPVmvSGUN7ZD+7s+lu3l5OBPG5z175T+b2q2q2m8XVR7TW20ra4QbE0bq06KAoOyjSgQVBTSCYsL9uTsGwiVRMEqqJT/BmKhKJNkpGsTKyBSKkOXvfeAAbE260vXUDEN9TYdJ3fvteRrpwLX56ee64gIZUq0RjDc4SKIEqilM6iUtNMvurqaewYNGkiXKRruV6BPCHxEHo6NNT46kOJLBJTf7gZw//dWhSoWpg9P0gdAnPWm407kSa3F7aJ1eRShAFQ4BLyfz9efTqm+jP3fOp7Mm7igSh9w6caSRuOnSsUf5+raRQ8E5Y9HsWGzzpZQk24Fx9EGZ04EeDSdpZAFz+jcbMpHf8t2p4CEx0CCNwYvKx6EydMKbMF5QteQ8SQkXNLhv7Rz2OgtXWYZPRVCMfQfOplsi2InsLCrQxTgwh+6u654SqVSgaHG+IncEAxBrdWy4rHcg7qereUcKfcY3k96vaDxdn/T2c00Ig0aNFR91YnixGMd6J6tQgDcRK9jh6fUm1CCBE9hT+pNUmtgYKuWBoLZexUZFFnfuBed0WciBot1bGDDamndqKq0jJiAzg+GMHk= + file_glob: true + file: "$CRATE_NAME-$TRAVIS_TAG-$TARGET.*" on: - condition: $TRAVIS_RUST_VERSION = stable + condition: "$TRAVIS_RUST_VERSION = stable" tags: true + provider: releases + skip_cleanup: true + +branches: + only: + - "/^v\\d+\\.\\d+\\.\\d+.*$/" + - master notifications: email: diff --git a/ci/before_deploy.sh b/ci/before_deploy.sh index a61411fa..c74f519f 100644 --- a/ci/before_deploy.sh +++ b/ci/before_deploy.sh @@ -1,32 +1,31 @@ -# `before_deploy` phase: here we package the build artifacts +# This script takes care of building your crate and packaging it for release set -ex -mktempd() { - echo $(mktemp -d 2>/dev/null || mktemp -d -t tmp) -} - -mk_artifacts() { - cargo build --target $TARGET --release -} - -mk_tarball() { - local td=$(mktempd) - local out_dir=$(pwd) - - cp target/$TARGET/release/mdbook $td - - pushd $td - - tar czf $out_dir/${PROJECT_NAME}-${TRAVIS_TAG}-${TRAVIS_OS_NAME}.tar.gz * - - popd $td - rm -r $td -} - main() { - mk_artifacts - mk_tarball + local src=$(pwd) \ + stage= + + case $TRAVIS_OS_NAME in + linux) + stage=$(mktemp -d) + ;; + osx) + stage=$(mktemp -d -t tmp) + ;; + esac + + test -f Cargo.lock || cargo generate-lockfile + + cross rustc --bin mdbook --target $TARGET --release -- -C lto + + cp target/$TARGET/release/mdbook $stage/ + + cd $stage + tar czf $src/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz * + cd $src + + rm -rf $stage } -main +main \ No newline at end of file diff --git a/ci/deploy.sh b/ci/github_pages.sh similarity index 57% rename from ci/deploy.sh rename to ci/github_pages.sh index 33021a60..3bb871ae 100644 --- a/ci/deploy.sh +++ b/ci/github_pages.sh @@ -1,7 +1,17 @@ #!/bin/bash +# Deploys the `book-example` to GitHub Pages -# Exit on error or variable unset -set -o errexit -o nounset +set -ex + +# Only run this on the master branch for stable +if [ "$TRAVIS_PULL_REQUEST" != "false" ] || + [ "$TRAVIS_BRANCH" != "master" ] || + [ "$TRAVIS_RUST_VERSION" != "stable" ]; then + exit 0 +fi + +# Make sure we have the css dependencies +npm install stylus nib NC='\033[39m' CYAN='\033[36m' @@ -10,23 +20,20 @@ GREEN='\033[32m' rev=$(git rev-parse --short HEAD) echo -e "${CYAN}Running cargo doc${NC}" -# Run cargo doc -cargo doc +cargo doc --features regenerate-css echo -e "${CYAN}Running mdbook build${NC}" -# Run mdbook to generate the book target/"$TARGET"/debug/mdbook build book-example/ echo -e "${CYAN}Copying book to target/doc${NC}" -# Copy files from rendered book to doc root cp -R book-example/book/* target/doc/ cd target/doc echo -e "${CYAN}Initializing Git${NC}" git init -git config user.name "Mathieu David" -git config user.email "mathieudavid@mathieudavid.org" +git config user.name "Michael Bryan" +git config user.email "michaelfbryan@gmail.com" git remote add upstream "https://$GH_TOKEN@github.com/rust-lang-nursery/mdBook.git" git fetch upstream @@ -39,4 +46,4 @@ git add -A . git commit -m "rebuild pages at ${rev}" git push -q upstream HEAD:gh-pages -echo -e "${GREEN}Deployement done${NC}" +echo -e "${GREEN}Deployed docs to GitHub Pages${NC}" diff --git a/ci/install.sh b/ci/install.sh new file mode 100644 index 00000000..a1059d62 --- /dev/null +++ b/ci/install.sh @@ -0,0 +1,47 @@ +set -ex + +main() { + local target= + if [ $TRAVIS_OS_NAME = linux ]; then + target=x86_64-unknown-linux-musl + sort=sort + else + target=x86_64-apple-darwin + sort=gsort # for `sort --sort-version`, from brew's coreutils. + fi + + # Builds for iOS are done on OSX, but require the specific target to be + # installed. + case $TARGET in + aarch64-apple-ios) + rustup target install aarch64-apple-ios + ;; + armv7-apple-ios) + rustup target install armv7-apple-ios + ;; + armv7s-apple-ios) + rustup target install armv7s-apple-ios + ;; + i386-apple-ios) + rustup target install i386-apple-ios + ;; + x86_64-apple-ios) + rustup target install x86_64-apple-ios + ;; + esac + + # This fetches latest stable release + local tag=$(git ls-remote --tags --refs --exit-code https://github.com/japaric/cross \ + | cut -d/ -f3 \ + | grep -E '^v[0.1.0-9.]+$' \ + | $sort --version-sort \ + | tail -n1) + curl -LSfs https://japaric.github.io/trust/install.sh | \ + sh -s -- \ + --force \ + --git japaric/cross \ + --tag $tag \ + --target $target +} + +main \ No newline at end of file diff --git a/ci/script.sh b/ci/script.sh new file mode 100644 index 00000000..c1e10bf4 --- /dev/null +++ b/ci/script.sh @@ -0,0 +1,21 @@ +# This script takes care of testing your crate + +set -ex + +# TODO This is the "test phase", tweak it as you see fit +main() { + cross build --target $TARGET + cross build --target $TARGET --release + + if [ ! -z $DISABLE_TESTS ]; then + return + fi + + cross test --target $TARGET + cross test --target $TARGET --release +} + +# we don't run the "test phase" when doing deploys +if [ -z $TRAVIS_TAG ]; then + main +fi \ No newline at end of file