Merge pull request #663 from sfackler/circle

Switch over Linux tests to CircleCI
This commit is contained in:
Steven Fackler 2017-07-16 14:28:35 -07:00 committed by GitHub
commit b1d5ec99dd
7 changed files with 237 additions and 179 deletions

View File

@ -1,87 +1,8 @@
language: rust language: rust
sudo: required
rust: stable rust: stable
dist: trusty os: osx
env:
global:
- TARGET=x86_64-unknown-linux-gnu
- BUILD_OPENSSL_VERSION=1.0.1u
matrix:
include:
# osx
- os: osx
env: TARGET=x86_64-apple-darwin
# ARM-bit version compat
- env: >
TARGET=arm-unknown-linux-gnueabihf
BUILD_OPENSSL_VERSION=1.0.2k
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc
QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf
RUST_TEST_THREADS=1
addons:
apt:
packages:
- gcc-arm-linux-gnueabihf
- qemu-user-static
- libc6-dev-armhf-cross
- binfmt-support
- env: >
TARGET=arm-unknown-linux-gnueabihf
BUILD_OPENSSL_VERSION=1.1.0f
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc
QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf
RUST_TEST_THREADS=1
addons:
apt:
packages:
- gcc-arm-linux-gnueabihf
- qemu-user-static
- libc6-dev-armhf-cross
- binfmt-support
# Minimum version supported
- rust: 1.10.0
# beta/nightly channels
- rust: beta
- rust: nightly
# 64-bit version compat
- env: BUILD_OPENSSL_VERSION=1.0.2k
- env: BUILD_OPENSSL_VERSION=1.1.0f
# 32-bit version compat
- env: TARGET=i686-unknown-linux-gnu BUILD_OPENSSL_VERSION=1.0.1u
addons:
apt:
packages:
- gcc-multilib
- env: TARGET=i686-unknown-linux-gnu BUILD_OPENSSL_VERSION=1.0.2k
addons:
apt:
packages:
- gcc-multilib
- env: TARGET=i686-unknown-linux-gnu BUILD_OPENSSL_VERSION=1.1.0f
addons:
apt:
packages:
- gcc-multilib
# LibreSSL
- env: BUILD_LIBRESSL_VERSION=2.5.0
- env: BUILD_LIBRESSL_VERSION=2.5.4
before_install:
- ./openssl/test/build.sh
- rustup target add $TARGET || true
script:
- ./openssl/test/run.sh
cache: cache:
cargo: true cargo: true
directories: script:
- $HOME/libressl - cargo run --manifest-path=systest/Cargo.toml
- $HOME/openssl - cargo test --manifest-path=openssl/Cargo.toml

View File

@ -1,6 +1,7 @@
# rust-openssl # rust-openssl
[![Build Status](https://travis-ci.org/sfackler/rust-openssl.svg?branch=master)](https://travis-ci.org/sfackler/rust-openssl) [![CircleCI](https://circleci.com/gh/sfackler/rust-openssl.svg?style=shield)](https://circleci.com/gh/sfackler/rust-openssl) [![Build Status](https://travis-ci.org/sfackler/rust-openssl.svg?branch=master)](https://travis-ci.org/sfackler/rust-openssl) [![Build status](https://ci.appveyor.com/api/projects/status/d1knobws948pyynk/branch/master?svg=true)](https://ci.appveyor.com/project/sfackler/rust-openssl/branch/master)
[Documentation](https://docs.rs/openssl). [Documentation](https://docs.rs/openssl).
@ -22,7 +23,7 @@ below.
On Linux, you can typically install OpenSSL via your package manager. The On Linux, you can typically install OpenSSL via your package manager. The
headers are sometimes provided in a separate package than the runtime libraries headers are sometimes provided in a separate package than the runtime libraries
- look for something like `openssl-devel` or `libssl-dev`. You will also need the - look for something like `openssl-devel` or `libssl-dev`. You will also need the
regular development utilities, like `pkg-config`, as the custom build script relies regular development utilities, like `pkg-config`, as the custom build script relies
on them. on them.
```bash ```bash

143
circle.yml Normal file
View File

@ -0,0 +1,143 @@
defaults: &DEFAULT
working_directory: ~/build
docker:
- image: jimmycuadra/rust:1.18.0
steps:
- checkout
- run: apt-get update
- run: apt-get install -y curl
- run: RUST_VERSION=1.18.0 ./test/add_target.sh
- restore_cache:
key: registry
- run: cargo generate-lockfile
- save_cache:
key: registry-{{ epoch }}
paths:
- ~/.cargo/registry/index
- run: echo "${LIBRARY}-${VERSION}-${TARGET}" > ~/lib_key
- restore_cache:
key: lib-{{ checksum "~/lib_key" }}-{{ checksum "test/build_openssl.sh"}}
- run: ./test/build_openssl.sh
- save_cache:
key: lib-{{ checksum "~/lib_key" }}-{{ checksum "test/build_openssl.sh"}}
paths:
- ~/openssl
- restore_cache:
key: deps-1.18.0-{{ checksum "Cargo.lock" }}-{{ checksum "~/lib_key" }}
- run: |
export OPENSSL_DIR=$HOME/openssl
case "${NO_RUN}" in
"1") CMD=build;;
"") CMD=run;;
esac
cargo $CMD --manifest-path=systest/Cargo.toml --target $TARGET
- run: |
export OPENSSL_DIR=$HOME/openssl
export PATH=$OPENSSL_DIR/bin:$PATH
if [ "${NO_RUN}" = "1" ]; then
TEST_ARGS=--no-run
fi
cargo test \
--manifest-path=openssl/Cargo.toml \
--target $TARGET \
--all-features \
$TEST_ARGS
- save_cache:
key: deps-1.18.0-{{ checksum "Cargo.lock" }}-{{ checksum "~/lib_key" }}
paths:
- target
- ~/.cargo/registry/cache
openssl_110: &OPENSSL_110
LIBRARY: openssl
VERSION: 1.1.0f
openssl_102: &OPENSSL_102
LIBRARY: openssl
VERSION: 1.0.2l
openssl_101: &OPENSSL_101
LIBRARY: openssl
VERSION: 1.0.1u
libressl_new: &LIBRESSL_OLD
LIBRARY: libressl
VERSION: 2.5.0
libressl_new: &LIBRESSL_NEW
LIBRARY: libressl
VERSION: 2.5.5
x86_64: &X86_64
TARGET: x86_64-unknown-linux-gnu
i686: &I686
TARGET: i686-unknown-linux-gnu
armhf: &ARMHF
TARGET: arm-unknown-linux-gnueabihf
NO_RUN: 1
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_AR: arm-linux-gnueabihf-ar
version: 2
jobs:
x86_64-openssl-1.1.0:
<<: *DEFAULT
environment:
<<: [*OPENSSL_110, *X86_64]
x86_64-openssl-1.0.2:
<<: *DEFAULT
environment:
<<: [*OPENSSL_102, *X86_64]
x86_64-openssl-1.0.1:
<<: *DEFAULT
environment:
<<: [*OPENSSL_101, *X86_64]
i686-openssl-1.1.0:
<<: *DEFAULT
environment:
<<: [*OPENSSL_110, *I686]
i686-openssl-1.0.2:
<<: *DEFAULT
environment:
<<: [*OPENSSL_102, *I686]
i686-openssl-1.0.1:
<<: *DEFAULT
environment:
<<: [*OPENSSL_101, *I686]
armhf-openssl-1.1.0:
<<: *DEFAULT
environment:
<<: [*OPENSSL_110, *ARMHF]
armhf-openssl-1.0.2:
<<: *DEFAULT
environment:
<<: [*OPENSSL_102, *ARMHF]
armhf-openssl-1.0.1:
<<: *DEFAULT
environment:
<<: [*OPENSSL_101, *ARMHF]
x86_64-libressl-old:
<<: *DEFAULT
environment:
<<: [*LIBRESSL_OLD, *X86_64]
x86_64-libressl-new:
<<: *DEFAULT
environment:
<<: [*LIBRESSL_NEW, *X86_64]
workflows:
version: 2
tests:
jobs:
- x86_64-openssl-1.1.0
- x86_64-openssl-1.0.2
- x86_64-openssl-1.0.1
- i686-openssl-1.1.0
- i686-openssl-1.0.2
- i686-openssl-1.0.1
- armhf-openssl-1.1.0
- armhf-openssl-1.0.2
- armhf-openssl-1.0.1
- x86_64-libressl-old
- x86_64-libressl-new

View File

@ -1,60 +0,0 @@
#!/bin/bash
set -ex
MAX_REDIRECTS=5
if [ -n "${BUILD_LIBRESSL_VERSION}" ]; then
NAME=libressl
URL1="http://ftp3.usa.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${BUILD_LIBRESSL_VERSION}.tar.gz"
URL2="http://ftp.eu.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${BUILD_LIBRESSL_VERSION}.tar.gz"
OUT="/tmp/libressl-${BUILD_OPENSSL_VERSION}.tar.gz"
elif [ -n "${BUILD_OPENSSL_VERSION}" ]; then
NAME=openssl
URL1="https://openssl.org/source/openssl-${BUILD_OPENSSL_VERSION}.tar.gz"
URL2="http://mirrors.ibiblio.org/openssl/source/openssl-${BUILD_OPENSSL_VERSION}.tar.gz"
OUT="/tmp/openssl-${BUILD_OPENSSL_VERSION}.tar.gz"
else
exit 0
fi
me=$0
myname=`basename ${me}`
cmp --silent ${me} ${HOME}/${NAME}/${myname} && exit 0 || echo "cache is busted"
rm -rf "${HOME}/${NAME}"
if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
exit 0
fi
if [ "$TARGET" == "i686-unknown-linux-gnu" ]; then
OS_COMPILER=linux-elf
OS_FLAGS=-m32
elif [ "$TARGET" == "arm-unknown-linux-gnueabihf" ]; then
OS_COMPILER=linux-armv4
export AR=arm-linux-gnueabihf-ar
export CC=arm-linux-gnueabihf-gcc
else
OS_COMPILER=linux-x86_64
fi
mkdir -p /tmp/build
cp ${me} /tmp/build/${myname}
cd /tmp/build
curl -o ${OUT} -L --max-redirs ${MAX_REDIRECTS} ${URL1} \
|| curl -o ${OUT} -L --max-redirs ${MAX_REDIRECTS} ${URL2}
tar --strip-components=1 -xzf ${OUT}
if [ -n "${BUILD_LIBRESSL_VERSION}" ]; then
./configure --prefix=${HOME}/libressl
else
./Configure --prefix=${HOME}/openssl ${OS_COMPILER} -fPIC ${OS_FLAGS}
fi
make -j$(nproc)
make install
cp ${myname} ${HOME}/${NAME}/${myname}

View File

@ -1,34 +0,0 @@
#!/bin/bash
set -e
case "$BUILD_OPENSSL_VERSION" in
1.0.2*)
FEATURES="v102"
;;
1.1.0*)
FEATURES="v110"
;;
esac
echo Using features: $FEATURES
if [ -n "${BUILD_LIBRESSL_VERSION}" -a -d "$HOME/libressl/lib" ]; then
echo "Testing build libressl-${BUILD_LIBRESSL_VERSION}"
export OPENSSL_DIR=${HOME}/libressl
export LD_LIBRARY_PATH="${HOME}/libressl/lib:${LD_LIBRARY_PATH}"
export PATH="${HOME}/libressl/bin:${PATH}"
elif [ -n "${BUILD_OPENSSL_VERSION}" -a -d "$HOME/openssl/lib" ]; then
echo "Testing build openssl-${BUILD_LIBRESSL_VERSION}"
export OPENSSL_DIR="${HOME}/openssl"
export LD_LIBRARY_PATH="${HOME}/openssl/lib:${LD_LIBRARY_PATH}"
export PATH="${HOME}/openssl/bin:${PATH}"
fi
if [ "$TARGET" == "arm-unknown-linux-gnueabihf" ]; then
FLAGS="--no-run"
fi
cargo run --manifest-path systest/Cargo.toml --target $TARGET -v
exec cargo test --manifest-path openssl/Cargo.toml --target $TARGET \
--features "$FEATURES" -v $FLAGS

32
test/add_target.sh Executable file
View File

@ -0,0 +1,32 @@
#!/bin/bash
set -e
case "${TARGET}" in
"x86_64-unknown-linux-gnu")
exit 0
;;
"i686-unknown-linux-gnu")
apt-get install -y --no-install-recommends gcc-multilib
;;
"arm-unknown-linux-gnueabihf")
echo "deb http://emdebian.org/tools/debian/ jessie main" \
> /etc/apt/sources.list.d/crosstools.list
curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add -
dpkg --add-architecture armhf
apt-get update
apt-get install -y --no-install-recommends \
gcc-arm-linux-gnueabihf \
libc6-dev:armhf
;;
esac
OUT=/tmp/std.tar.gz
curl -o ${OUT} https://static.rust-lang.org/dist/rust-std-${RUST_VERSION}-${TARGET}.tar.gz
WORKDIR=/tmp/std
mkdir -p ${WORKDIR}
cd ${WORKDIR}
tar --strip-components=1 -xzf ${OUT}
./install.sh

55
test/build_openssl.sh Executable file
View File

@ -0,0 +1,55 @@
#!/bin/bash
set -e
if [ -d ~/openssl ]; then
exit 0
fi
case "${LIBRARY}" in
"libressl")
URL1="http://ftp3.usa.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${VERSION}.tar.gz"
URL2="http://ftp.eu.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${VERSION}.tar.gz"
;;
"openssl")
URL1="https://openssl.org/source/openssl-${VERSION}.tar.gz"
URL2="http://mirrors.ibiblio.org/openssl/source/openssl-${VERSION}.tar.gz"
;;
esac
case "${TARGET}" in
"x86_64-unknown-linux-gnu")
OS_COMPILER=linux-x86_64
;;
"i686-unknown-linux-gnu")
OS_COMPILER=linux-elf
OS_FLAGS=-m32
;;
"arm-unknown-linux-gnueabihf")
OS_COMPILER=linux-armv4
export AR=arm-linux-gnueabihf-ar
export CC=arm-linux-gnueabihf-gcc
;;
esac
mkdir -p /tmp/build
cd /tmp/build
OUT=/tmp/openssl.tgz
MAX_REDIRECTS=5
curl -o ${OUT} -L --max-redirs ${MAX_REDIRECTS} ${URL1} \
|| curl -o ${OUT} -L --max-redirs ${MAX_REDIRECTS} ${URL2}
tar --strip-components=1 -xzf ${OUT}
PREFIX=${HOME}/openssl
case "${LIBRARY}" in
"openssl")
./Configure --prefix=${PREFIX} ${OS_COMPILER} -fPIC ${OS_FLAGS} no-shared
;;
"libressl")
./configure --prefix=${PREFIX} --disable-shared --with-pic
;;
esac
make -j$(nproc)
make install