@@ -1,10 +1,70 @@ | |||
dist: trusty | |||
language: rust | |||
cache: cargo | |||
services: docker | |||
sudo: required | |||
env: | |||
global: | |||
- CRATE_NAME=gutenberg | |||
matrix: | |||
# TODO These are all the build jobs. Adjust as necessary. Comment out what you | |||
# don't need | |||
include: | |||
# Linux | |||
- env: TARGET=x86_64-unknown-linux-gnu | |||
- env: TARGET=x86_64-unknown-linux-musl | |||
# OSX | |||
- env: TARGET=x86_64-apple-darwin | |||
os: osx | |||
# Testing other channels | |||
- env: TARGET=x86_64-unknown-linux-gnu | |||
rust: beta | |||
- env: TARGET=x86_64-unknown-linux-gnu | |||
rust: nightly | |||
before_install: set -e | |||
rust: | |||
- nightly | |||
- beta | |||
- stable | |||
install: | |||
- sh ci/install.sh | |||
- source ~/.cargo/env || true | |||
script: | |||
- bash ci/script.sh | |||
after_script: set +e | |||
before_deploy: | |||
- sh ci/before_deploy.sh | |||
deploy: | |||
# TODO update `api_key.secure` | |||
# - Create a `public_repo` GitHub token. Go to: https://github.com/settings/tokens/new | |||
# - Encrypt it: `travis encrypt YOUR_TOKEN` | |||
# - Paste the output down here | |||
api_key: | |||
secure: X0M1TT06/MHfwaENl+u/K3twBU0BVTQimXfBkHzODWsWC84SGeJPMiovIkuBxq4P7Wk7sIr1d/IINlq0sK40IvI3Xwy95YtpTKcK52ffZjTmHSNExCy+OhW2JefNPOwPI89JWKsmHM1I8FuDRiENTyawVS8akcl1XnQhS3V3a1zEuwpULO+6UwDTauJDRdVenDY7tHxbwYH644djZpKcL3LsPLkv0r0XlWnyH+Lw65/ggUmw63KaZTN+hOYfznXGNjlsv2YSD8lCo7eGGg+WA1rsr1SDOxzMM60OOE2Y4lDo0lX9tPWAxMfltvuouxfZ8Y2II4oNEYQui+AqaZ6CfhjFrfZG5P6QdFcGcjiYhDC+s+R9m+tCtzCcKh+lahxcfwOEo1O9pAsg77XVy5gf9guM++9uhYc54Z7tUeyNyJQVaQHt0drmqqeQWfk8w2YBmTPiJ7mwAbhEU5gISWQBpc9eRM1PiOaWDOJHgyV1rZfOT6RxgKBu5DW4pSZ6Iar7Qc+u4ei80QRI2jVsnlPY8/5rl/z0fqSnOen/wyGQHNI18SwXiy0TbN8aMpwr9tllOBYtjrWoX4xCj8NJksl1EAYaE2Cwy768mSfO9FTMqGQpuG5S6M9BRsG5pOtZdKpxjyP8vJ1ahp8KDI9Mz8QJSfG6kOHXqCaed+MmJNxJYI0= file_glob: true | |||
file: $CRATE_NAME-$TRAVIS_TAG-$TARGET.* | |||
on: | |||
# TODO Here you can pick which targets will generate binary releases | |||
# In this example, there are some targets that are tested using the stable | |||
# and nightly channels. This condition makes sure there is only one release | |||
# for such targets and that's generated using the stable channel | |||
condition: $TRAVIS_RUST_VERSION = stable | |||
tags: true | |||
provider: releases | |||
skip_cleanup: true | |||
cache: cargo | |||
before_cache: | |||
# Travis can't cache files that are not readable by "others" | |||
- chmod -R a+r $HOME/.cargo | |||
notifications: | |||
email: false | |||
branches: | |||
only: | |||
# release tags | |||
- /^v\d+\.\d+\.\d+.*$/ | |||
- master |
@@ -0,0 +1,23 @@ | |||
# This script takes care of packaging the build artifacts that will go in the | |||
# release zipfile | |||
$SRC_DIR = $PWD.Path | |||
$STAGE = [System.Guid]::NewGuid().ToString() | |||
Set-Location $ENV:Temp | |||
New-Item -Type Directory -Name $STAGE | |||
Set-Location $STAGE | |||
$ZIP = "$SRC_DIR\$($Env:CRATE_NAME)-$($Env:APPVEYOR_REPO_TAG_NAME)-$($Env:TARGET).zip" | |||
# TODO Update this to package the right artifacts | |||
Copy-Item "$SRC_DIR\target\$($Env:TARGET)\release\hello.exe" '.\' | |||
7z a "$ZIP" * | |||
Push-AppveyorArtifact "$ZIP" | |||
Remove-Item *.* -Force | |||
Set-Location .. | |||
Remove-Item $STAGE | |||
Set-Location $SRC_DIR |
@@ -0,0 +1,33 @@ | |||
# This script takes care of building your crate and packaging it for release | |||
set -ex | |||
main() { | |||
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 | |||
# TODO Update this to build the artifacts that matter to you | |||
cross rustc --bin hello --target $TARGET --release -- -C lto | |||
# TODO Update this to package the right artifacts | |||
cp target/$TARGET/release/hello $stage/ | |||
cd $stage | |||
tar czf $src/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz * | |||
cd $src | |||
rm -rf $stage | |||
} | |||
main |
@@ -0,0 +1,31 @@ | |||
set -ex | |||
main() { | |||
curl https://sh.rustup.rs -sSf | \ | |||
sh -s -- -y --default-toolchain $TRAVIS_RUST_VERSION | |||
local target= | |||
if [ $TRAVIS_OS_NAME = linux ]; then | |||
target=x86_64-unknown-linux-gnu | |||
sort=sort | |||
else | |||
target=x86_64-apple-darwin | |||
sort=gsort # for `sort --sort-version`, from brew's coreutils. | |||
fi | |||
# 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-9.]+$' \ | |||
| $sort --version-sort \ | |||
| tail -n1) | |||
echo cross version: $tag | |||
curl -LSfs https://japaric.github.io/trust/install.sh | \ | |||
sh -s -- \ | |||
--force \ | |||
--git japaric/cross \ | |||
--tag $tag \ | |||
--target $target | |||
} | |||
main |
@@ -0,0 +1,24 @@ | |||
# 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 | |||
cross run --target $TARGET | |||
cross run --target $TARGET --release | |||
} | |||
# we don't run the "test phase" when doing deploys | |||
if [ -z $TRAVIS_TAG ]; then | |||
main | |||
fi |