From 3a7ca9c2ff607b65e0db2ea4bb167c1304da86e8 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sun, 16 Jul 2017 10:02:02 -0700 Subject: [PATCH 1/2] Switch over Linux tests to CircleCI --- .travis.yml | 87 ++----------------------- circle.yml | 143 ++++++++++++++++++++++++++++++++++++++++++ openssl/test/build.sh | 60 ------------------ openssl/test/run.sh | 34 ---------- test/add_target.sh | 32 ++++++++++ test/build_openssl.sh | 55 ++++++++++++++++ 6 files changed, 234 insertions(+), 177 deletions(-) create mode 100644 circle.yml delete mode 100755 openssl/test/build.sh delete mode 100755 openssl/test/run.sh create mode 100755 test/add_target.sh create mode 100755 test/build_openssl.sh diff --git a/.travis.yml b/.travis.yml index d9caed69..2d29c1e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,87 +1,8 @@ language: rust -sudo: required rust: stable -dist: trusty - -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 - +os: osx cache: cargo: true - directories: - - $HOME/libressl - - $HOME/openssl +script: +- cargo run --manifest-path=systest/Cargo.toml +- cargo test --manifest-path=openssl/Cargo.toml diff --git a/circle.yml b/circle.yml new file mode 100644 index 00000000..4bf92cad --- /dev/null +++ b/circle.yml @@ -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 diff --git a/openssl/test/build.sh b/openssl/test/build.sh deleted file mode 100755 index cd740895..00000000 --- a/openssl/test/build.sh +++ /dev/null @@ -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} diff --git a/openssl/test/run.sh b/openssl/test/run.sh deleted file mode 100755 index 32817dcc..00000000 --- a/openssl/test/run.sh +++ /dev/null @@ -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 diff --git a/test/add_target.sh b/test/add_target.sh new file mode 100755 index 00000000..1f74b4cf --- /dev/null +++ b/test/add_target.sh @@ -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 diff --git a/test/build_openssl.sh b/test/build_openssl.sh new file mode 100755 index 00000000..124eabc9 --- /dev/null +++ b/test/build_openssl.sh @@ -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 From c8ba960bbce0d47e0697c2f9e5c360fe0835f639 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sun, 16 Jul 2017 14:20:16 -0700 Subject: [PATCH 2/2] Add badges to README --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 14eb79ad..2d186399 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # 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). @@ -22,7 +23,7 @@ below. On Linux, you can typically install OpenSSL via your package manager. The 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 -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. ```bash