Merge pull request #64 from shssoichiro/fix-ci-build
Upgrade CI scripts to be compatible with Travis update
This commit is contained in:
commit
3833ee6dfe
5 changed files with 0 additions and 244 deletions
12
.travis.yml
12
.travis.yml
|
|
@ -30,18 +30,6 @@ matrix:
|
||||||
- rust: beta
|
- rust: beta
|
||||||
- rust: nightly
|
- rust: nightly
|
||||||
|
|
||||||
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:
|
deploy:
|
||||||
provider: releases
|
provider: releases
|
||||||
api_key:
|
api_key:
|
||||||
|
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
# `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 <<EOF
|
|
||||||
Package: $PROJECT_NAME
|
|
||||||
Version: ${TRAVIS_TAG#v}
|
|
||||||
Architecture: $(architecture $TARGET)
|
|
||||||
Maintainer: $DEB_MAINTAINER
|
|
||||||
Description: $DEB_DESCRIPTION
|
|
||||||
EOF
|
|
||||||
|
|
||||||
fakeroot dpkg-deb --build $dtd/debian
|
|
||||||
mv $dtd/debian.deb $PROJECT_NAME-$TRAVIS_TAG-$TARGET.deb
|
|
||||||
rm -r $dtd
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
# `install` phase: install stuff needed for the `script` phase
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
. $(dirname $0)/utils.sh
|
|
||||||
|
|
||||||
install_c_toolchain() {
|
|
||||||
case $TARGET in
|
|
||||||
aarch64-unknown-linux-gnu)
|
|
||||||
sudo apt-get install -y --no-install-recommends \
|
|
||||||
gcc-aarch64-linux-gnu libc6-arm64-cross libc6-dev-arm64-cross
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# For other targets, this is handled by addons.apt.packages in .travis.yml
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
install_rustup() {
|
|
||||||
# uninstall the rust toolchain installed by travis, we are going to use rustup
|
|
||||||
sh ~/rust/lib/rustlib/uninstall.sh
|
|
||||||
|
|
||||||
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=$TRAVIS_RUST_VERSION
|
|
||||||
|
|
||||||
rustc -V
|
|
||||||
cargo -V
|
|
||||||
}
|
|
||||||
|
|
||||||
install_standard_crates() {
|
|
||||||
if [ $(host) != "$TARGET" ]; then
|
|
||||||
rustup target add $TARGET
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
configure_cargo() {
|
|
||||||
local prefix=$(gcc_prefix)
|
|
||||||
|
|
||||||
if [ ! -z $prefix ]; then
|
|
||||||
# information about the cross compiler
|
|
||||||
${prefix}gcc -v
|
|
||||||
|
|
||||||
# tell cargo which linker to use for cross compilation
|
|
||||||
mkdir -p .cargo
|
|
||||||
cat >>.cargo/config <<EOF
|
|
||||||
[target.$TARGET]
|
|
||||||
linker = "${prefix}gcc"
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
|
||||||
install_c_toolchain
|
|
||||||
install_rustup
|
|
||||||
install_standard_crates
|
|
||||||
configure_cargo
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
||||||
52
ci/script.sh
52
ci/script.sh
|
|
@ -1,52 +0,0 @@
|
||||||
# `script` phase: you usually build, test and generate docs in this phase
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
. $(dirname $0)/utils.sh
|
|
||||||
|
|
||||||
# NOTE Workaround for rust-lang/rust#31907 - disable doc tests when cross compiling
|
|
||||||
# This has been fixed in the nightly channel but it would take a while to reach the other channels
|
|
||||||
disable_cross_doctests() {
|
|
||||||
if [ $(host) != "$TARGET" ] && [ "$TRAVIS_RUST_VERSION" = "stable" ]; then
|
|
||||||
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|
||||||
brew install gnu-sed --default-names
|
|
||||||
fi
|
|
||||||
|
|
||||||
find src -name '*.rs' -type f | xargs sed -i -e 's:\(//.\s*```\):\1 ignore,:g'
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# PROTIP Always pass `--target $TARGET` to cargo commands, this makes cargo output build artifacts
|
|
||||||
# to target/$TARGET/{debug,release} which can reduce the number of needed conditionals in the
|
|
||||||
# `before_deploy`/packaging phase
|
|
||||||
run_test_suite() {
|
|
||||||
case $TARGET in
|
|
||||||
# configure emulation for transparent execution of foreign binaries
|
|
||||||
aarch64-unknown-linux-gnu)
|
|
||||||
export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu
|
|
||||||
;;
|
|
||||||
arm*-unknown-linux-gnueabihf)
|
|
||||||
export QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ ! -z "$QEMU_LD_PREFIX" ]; then
|
|
||||||
# Run tests on a single thread when using QEMU user emulation
|
|
||||||
export RUST_TEST_THREADS=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cargo build --target $TARGET --verbose --release
|
|
||||||
cargo test --target $TARGET --release
|
|
||||||
|
|
||||||
# sanity check the file type
|
|
||||||
file target/$TARGET/release/oxipng
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
|
||||||
disable_cross_doctests
|
|
||||||
run_test_suite
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
||||||
56
ci/utils.sh
56
ci/utils.sh
|
|
@ -1,56 +0,0 @@
|
||||||
mktempd() {
|
|
||||||
echo $(mktemp -d 2>/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
|
|
||||||
}
|
|
||||||
Loading…
Reference in a new issue