diff options
author | sharkdp <davidpeter@web.de> | 2018-11-01 18:40:57 +0100 |
---|---|---|
committer | sharkdp <davidpeter@web.de> | 2018-11-01 18:40:57 +0100 |
commit | 05a1fec7c2af878efbd0170fa62bc8f732f16e91 (patch) | |
tree | de719d00e7f573e6883f224e6a626f0b701c82b9 | |
parent | 69477b1171e14fec4f5cd0c7df0fdd2de73794c3 (diff) |
Add CI config
-rw-r--r-- | .travis.yml | 70 | ||||
-rwxr-xr-x | ci/before_deploy.bash | 103 |
2 files changed, 173 insertions, 0 deletions
diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..92222d0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,70 @@ +language: rust +cache: cargo +matrix: + include: + # Stable channel. + - os: linux + rust: stable + env: TARGET=x86_64-unknown-linux-gnu + - os: linux + rust: stable + env: TARGET=x86_64-unknown-linux-musl + - os: osx + rust: stable + env: TARGET=x86_64-apple-darwin + +addons: + apt: + packages: + # needed to build deb packages + - fakeroot + +env: + global: + # Default target on travis-ci. + # Used as conditional check in the install stage + - HOST=x86_64-unknown-linux-gnu + # Used on the deployment script + - PROJECT_NAME=dup + +install: + # prevent target re-add error from rustup + - if [[ $TRAVIS_OS_NAME = linux && $HOST != $TARGET ]]; then rustup target add $TARGET; fi + +script: + # Incorporate TARGET env var to the build and test process + - cargo build --target $TARGET --verbose + #- cargo test --target $TARGET --verbose + +before_deploy: + - bash ci/before_deploy.bash + +deploy: + provider: releases + # NOTE updating the `api_key.secure` + # - go to: https://github.com/settings/tokens/new + # - generate new token using `public_repo` scope + # - encrypt it using: `travis encrypt API_KEY_HERE` + # - paste the output below + api_key: + secure: "qhF3Lhab+3s1+/jBhiwsQxaHSnaaUMMgi0v270A1f2Z/hAcbmK87slZkN7nSWz4+zL+C37QwPoM+wuqNOjeDaxpmGyoYJjXhf9t0JIT7Bqi9HcVLxClDLquNIt90xNxvw8Biw8lnXxfqyM3tTktJ9TzcC8JLYQdxgScsAUEnQokTiyYoZAiHnbuDITtQVFh/5CS0kPbKSf1wbpzGzo4ZCKg6A7aVK+/8nYLXwCseSdtJ5iUZwgzt7+BuUv8kJSwojQZ5/WtfW6Pg6e6zHIfEbCSx+sTvjawWZnylL8sNd26kwY/HQR3hS6IQLFmxUhTpwnILuevVVmPcqTDBxrtFL1+KhtZkpA7aPW08qXEhlLA9/n3uk4V0hbl1NywgdEq3TQw3mpEadvIO0WuqMGFb6byXa+12ZhcMIye8jc37p/C5uAq3GdINxL4nsxOjhxP2GKxC6X99olyllw+/Hp2x0LZq1UynHQwiNntOza5zZifAPKHgAZCcnx8Cv+kBIcyo5f4EG2oyuiagcEkhweh+zseEeLh/X87cc43LH9gzh2aFAmVp/VirhT++78EnwlfsWf8yrzE7J1a580sU9Z3rtRjSuAjo7gd0XhPE1i9WMwZMUhmXyD+BAaFXRL+Xf98v3VojUfLAqnzJxQ4OPmBwXuUgxsWmsdq6Ao6wyjVrtoM=" + # for uploading multiple files + file_glob: true + # NOTE explanation on each env variable + # - PROJECT_NAME: name of the project, set on the `env.global` above + # - TRAVIS_TAG: tag name that the build is being deployed for, usually the version number + # - TARGET: target triple of the build + file: + - $PROJECT_NAME-$TRAVIS_TAG-$TARGET.* + - $PROJECT_NAME*.deb + # don't delete artifacts from previous stage + skip_cleanup: true + on: + # deploy only if we push a tag + tags: true + # deploy only on stable channel that has TARGET env variable sets + condition: $TRAVIS_RUST_VERSION = stable && $TARGET != "" + +notifications: + email: + on_success: never diff --git a/ci/before_deploy.bash b/ci/before_deploy.bash new file mode 100755 index 0000000..e9530c0 --- /dev/null +++ b/ci/before_deploy.bash @@ -0,0 +1,103 @@ +#!/usr/bin/env bash +# Building and packaging for release + +set -ex + +build() { + cargo build --target "$TARGET" --release --verbose +} + +pack() { + local tempdir + local out_dir + local package_name + + tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp) + out_dir=$(pwd) + package_name="$PROJECT_NAME-$TRAVIS_TAG-$TARGET" + + # create a "staging" directory + mkdir "$tempdir/$package_name" + + # copying the main binary + cp "target/$TARGET/release/$PROJECT_NAME" "$tempdir/$package_name/" + strip "$tempdir/$package_name/$PROJECT_NAME" + + # readme and license + cp README.md "$tempdir/$package_name" + cp LICENSE-MIT "$tempdir/$package_name" + cp LICENSE-APACHE "$tempdir/$package_name" + + # archiving + pushd "$tempdir" + tar czf "$out_dir/$package_name.tar.gz" "$package_name"/* + popd + rm -r "$tempdir" +} + +make_deb() { + local tempdir + local architecture + local version + local dpkgname + local conflictname + + case $TARGET in + x86_64*) + architecture=amd64 + ;; + i686*) + architecture=i386 + ;; + *) + echo "ERROR: unknown target" >&2 + return 1 + ;; + esac + version=${TRAVIS_TAG#v} + if [[ $TARGET = *musl* ]]; then + dpkgname=$PROJECT_NAME-musl + conflictname=$PROJECT_NAME + else + dpkgname=$PROJECT_NAME + conflictname=$PROJECT_NAME-musl + fi + + tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp) + + # copy the main binary + install -Dm755 "target/$TARGET/release/$PROJECT_NAME" "$tempdir/usr/bin/$PROJECT_NAME" + strip "$tempdir/usr/bin/$PROJECT_NAME" + + # readme and license + install -Dm644 README.md "$tempdir/usr/share/doc/$PROJECT_NAME/README.md" + install -Dm644 LICENSE-MIT "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-MIT" + install -Dm644 LICENSE-APACHE "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-APACHE" + + # Control file + mkdir "$tempdir/DEBIAN" + cat > "$tempdir/DEBIAN/control" <<EOF +Package: $dpkgname +Version: $version +Section: utils +Priority: optional +Maintainer: David Peter <mail@david-peter.de> +Architecture: $architecture +Provides: $PROJECT_NAME +Conflicts: $conflictname +Description: A minimal, fast alternative to 'du -sh'. +EOF + + fakeroot dpkg-deb --build "$tempdir" "${dpkgname}_${version}_${architecture}.deb" +} + + +main() { + build + pack + if [[ $TARGET = *linux* ]]; then + make_deb + fi +} + +main |