diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 843ff7a8..00000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,18 +0,0 @@ -engines: - csslint: - enabled: false - duplication: - enabled: true - config: - languages: - - rust - eslint: - enabled: false - fixme: - enabled: true -ratings: - paths: - - "**.rs" -exclude_paths: -- tests/ -- doc/ diff --git a/.travis.yml b/.travis.yml index f2725c8f..dab3badf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,58 @@ language: rust -rust: - - 1.8.0 - - stable - - beta - - nightly -cache: cargo + +env: + global: + - PROJECT_NAME=oxipng + +matrix: + include: + - os: osx + rust: stable + env: TARGET=x86_64-apple-darwin + cache: cargo + - os: linux + rust: 1.8.0 + env: TARGET=x86_64-unknown-linux-gnu + cache: cargo + - os: linux + rust: stable + env: TARGET=x86_64-unknown-linux-gnu + cache: cargo + - os: linux + rust: beta + env: TARGET=x86_64-unknown-linux-gnu + cache: cargo + - os: linux + rust: nightly + env: TARGET=x86_64-unknown-linux-gnu + cache: cargo + +before_install: + - export PATH="$PATH:$HOME/.cargo/bin" + +install: + - bash ci/install.sh + +script: + - bash ci/script.sh + +before_deploy: + - bash ci/before_deploy.sh + +deploy: + provider: releases + api_key: + secure: FarU1VnPW15WXkNP76rQH0VdB+dnp6Op7t2/bl5oCjn7OQ8R3vB32vxCP7DXtBvtE2U9z3CeRmE4pKIRN1rObb/GUyNKxPH0UJiTtDgGtxtTYZHdBjED2nEqdcA2+G1ElCub5O3NhtzsRLM1KPPukJcts6gCFgK/tgcDyKLMX/iGsXOuxOwqu6algZOTcHIaT4M8/TjH7g/hzOz8UKoaqZgSLuKLJ+J30LCJKK4umW57Nev66ATavBWQ3MIFCTyBc9YSsMSQcsjtlA7jcHNhelsCxQHzbxXWQK1jF439QXyNHog3tS41qmfMal+TUhW/NiSkqwJ1//PowD+oYI7si/biBawf6PU2oz5AfWknzPr4k6lAX2WYDcRLIkwEwKi5fHrvMYL0TuNWGb8gF+7DD+7DRaZrRLAbrA6SOFGydSPNzO7HvEYJjs39/2LfqXOQ0aie4ez5fGzsE655D+U1ulmVOx3Y6C1rxKi/oBVJZNuvdMPqtRpgbFYtAsk//wM+nt+YH8TndFR+x6AjZ9OTSDbbJwMLm1SckDLAE/sAC/vU+A6io82uMuDvKmPrtiOKsZp4kmwo5N1CWvIBtvd8evIMPAOFW51AncxnCvCiqYGtfB/BkKAr7mcxiwuWVwXMkOpSr7JzfQd8C5gOEMVczA9qnB6fRCY+dpxGjY0LSY0= + file_glob: true + file: ${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}.* + # don't delete the artifacts from previous phases + skip_cleanup: true + # deploy when a new tag is pushed + on: + # channel to use to produce the release artifacts + condition: $TRAVIS_RUST_VERSION = stable + tags: true + +notifications: + email: + on_success: never diff --git a/ci/before_deploy.sh b/ci/before_deploy.sh new file mode 100644 index 00000000..32f9df39 --- /dev/null +++ b/ci/before_deploy.sh @@ -0,0 +1,66 @@ +# `before_deploy` phase: here we package the build artifacts + +set -ex + +. $(dirname $0)/utils.sh + +# Generate artifacts for release +mk_artifacts() { + cargo build --target $TARGET --release +} + +mk_tarball() { + # create a "staging" directory + local td=$(mktempd) + local out_dir=$(pwd) + + # NOTE All Cargo build artifacts will be under the 'target/$TARGET/{debug,release}' + cp target/$TARGET/release/oxipng $td + + pushd $td + + # release tarball will look like 'rust-everywhere-v1.2.3-x86_64-unknown-linux-gnu.tar.gz' + tar czf $out_dir/${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}.tar.gz * + + popd + rm -r $td +} + +# Package your artifacts in a .deb file +# NOTE right now you can only package binaries using the `dobin` command. Simply call +# `dobin [file..]` to include one or more binaries in your .deb package. I'll add more commands to +# install other things like manpages (`doman`) as the needs arise. +# XXX This .deb packaging is minimal -- just to make your app installable via `dpkg` -- and doesn't +# fully conform to Debian packaging guideliens (`lintian` raises a few warnings/errors) +mk_deb() { + dobin target/$TARGET/release/oxipng +} + +main() { + mk_artifacts + mk_tarball + + if [ $TRAVIS_OS_NAME = linux ]; then + if [ ! -z $MAKE_DEB ]; then + dtd=$(mktempd) + mkdir -p $dtd/debian/usr/bin + + mk_deb + + mkdir -p $dtd/debian/DEBIAN + cat >$dtd/debian/DEBIAN/control <>.cargo/config </dev/null || mktemp -d -t tmp) +} + +host() { + case "$TRAVIS_OS_NAME" in + linux) + echo x86_64-unknown-linux-gnu + ;; + osx) + echo x86_64-apple-darwin + ;; + esac +} + +gcc_prefix() { + case "$TARGET" in + aarch64-unknown-linux-gnu) + echo aarch64-linux-gnu- + ;; + arm*-gnueabihf) + echo arm-linux-gnueabihf- + ;; + *) + return + ;; + esac +} + +dobin() { + [ -z $MAKE_DEB ] && die 'dobin: $MAKE_DEB not set' + [ $# -lt 1 ] && die "dobin: at least one argument needed" + + local f prefix=$(gcc_prefix) + for f in "$@"; do + install -m0755 $f $dtd/debian/usr/bin/ + ${prefix}strip -s $dtd/debian/usr/bin/$(basename $f) + done +} + +architecture() { + case $1 in + x86_64-unknown-linux-gnu|x86_64-unknown-linux-musl) + echo amd64 + ;; + i686-unknown-linux-gnu|i686-unknown-linux-musl) + echo i386 + ;; + arm*-unknown-linux-gnueabihf) + echo armhf + ;; + *) + die "architecture: unexpected target $TARGET" + ;; + esac +}