Unverified Commit ec8aadb5 authored by Steven Fackler's avatar Steven Fackler Committed by GitHub
Browse files

Merge pull request #1043 from sfackler/circle-21

Migrate circle config to 2.1 goodness
parents 6f9401f1 1ff853ad
Loading
Loading
Loading
Loading
+258 −219
Original line number Diff line number Diff line
restore_registry: &RESTORE_REGISTRY
  restore_cache:
    key: registry-4
save_registry: &SAVE_REGISTRY
  save_cache:
    key: registry-4-{{ .BuildNum }}
    paths:
    - /usr/local/cargo/registry/index
openssl_key: &OPENSSL_KEY
  key: lib-{{ checksum "~/lib_key" }}-{{ checksum "test/build_openssl.sh" }}
restore_openssl: &RESTORE_OPENSSL
  restore_cache:
    <<: *OPENSSL_KEY
save_openssl: &SAVE_OPENSSL
  save_cache:
    <<: *OPENSSL_KEY
    paths:
    - /openssl
deps_key: &DEPS_KEY
  key: deps-1.24.1-{{ checksum "Cargo.lock" }}-{{ checksum "~/lib_key" }}-2
restore_deps: &RESTORE_DEPS
  restore_cache:
    <<: *DEPS_KEY
save_deps: &SAVE_DEPS
  save_cache:
    <<: *DEPS_KEY
    paths:
    - target
    - /usr/local/cargo/registry/cache
version: 2.1

job: &JOB
  working_directory: ~/build
jobs:
  linux:
    parameters:
      target:
        type: string
      library:
        type: string
        default: ""
      version:
        type: string
        default: ""
      vendored:
        type: boolean
        default: false
      no_run:
        type: boolean
        default: false
    docker:
      - image: rust:1.24.1
    environment:
      RUST_BACKTRACE: 1
      OPENSSL_DIR: /opt/openssl
      CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
      CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_AR: arm-linux-gnueabihf-ar
      CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER: qemu-arm-static
    steps:
      - checkout
      - run: apt-get update
      - run: apt-get remove -y libssl-dev
  - run: ./test/add_target.sh
  - *RESTORE_REGISTRY
  - run: cargo generate-lockfile --verbose
  - *SAVE_REGISTRY
  - run: echo "${LIBRARY}-${VERSION}-${TARGET}" > ~/lib_key
  - *RESTORE_OPENSSL
  - run: ./test/build_openssl.sh
  - *SAVE_OPENSSL
  - *RESTORE_DEPS
  - run: cargo run --manifest-path=systest/Cargo.toml --target $TARGET --features "$FEATURES"
      - run: |
          case "<< parameters.target >>" in
          "i686-unknown-linux-gnu")
            apt-get install -y --no-install-recommends gcc-multilib
            ;;
          "x86_64-unknown-linux-musl")
            apt-get install -y --no-install-recommends musl-tools
            ;;
          "arm-unknown-linux-gnueabihf")
            dpkg --add-architecture armhf
            apt-get update
            apt-get install -y --no-install-recommends \
              gcc-arm-linux-gnueabihf \
              libc6-dev:armhf \
              qemu-user-static
            ;;
          "x86_64-unknown-linux-gnu")
            exit 0
          esac

          rustup target add << parameters.target >>
      - restore_cache:
          key: openssl-<< parameters.target >>-<< parameters.library >>-<< parameters.version >>
      - run: |
          if [ -d "$OPENSSL_DIR" ]; then
            exit 0
          fi

          case "<< parameters.library >>" in
          "libressl")
            URL="https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-<< parameters.version >>.tar.gz"
            ;;
          "openssl")
            URL="https://openssl.org/source/openssl-<< parameters.version >>.tar.gz"
            ;;
          "")
            exit 0
            ;;
          esac

          case "<< parameters.target >>" in
          "x86_64-unknown-linux-gnu")
            OS_COMPILER=linux-x86_64
            OS_FLAGS=""
            ;;
          "i686-unknown-linux-gnu")
            OS_COMPILER=linux-elf
            OS_FLAGS=-m32
            ;;
          "arm-unknown-linux-gnueabihf")
            OS_COMPILER=linux-armv4
            OS_FLAGS=""
            export AR=arm-linux-gnueabihf-ar
            export CC=arm-linux-gnueabihf-gcc
            ;;
          esac

          mkdir /tmp/build
          cd /tmp/build

          curl -L $URL | tar --strip-components=1 -xzf -

          case "<< parameters.library >>" in
          "openssl")
            ./Configure --prefix=$OPENSSL_DIR $OS_COMPILER -fPIC -g $OS_FLAGS no-shared
            ;;
          "libressl")
            ./configure --prefix=$OPENSSL_DIR --disable-shared --with-pic
            ;;
          esac

          make
          make install_sw
      - save_cache:
          key: openssl-<< parameters.target >>-<< parameters.library >>-<< parameters.version >>
          paths:
            - /opt/openssl
      - restore_cache:
          key: registry
      - run: cargo generate-lockfile
      - save_cache:
          key: registry-{{ .BuildNum }}
          paths:
            - /usr/local/cargo/registry/index
      - restore_cache:
          key: deps-1.24.1-<< parameters.target >>-<< parameters.library >>-<< parameters.version >>-{{ checksum "Cargo.lock" }}
      - run: |
          cargo run \
            --manifest-path=systest/Cargo.toml \
            <<# parameters.vendored >>--features vendored<</ parameters.vendored >> \
            --target << parameters.target >>
      - run: |
          ulimit -c unlimited
          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 \
        --features "$FEATURES" \
        $TEST_ARGS
            <<# parameters.vendored >>--features vendored<</ parameters.vendored >> \
            --target << parameters.target >> \
            <<# parameters.no_run >>--no-run<</ parameters.no_run >>
      - save_cache:
          key: deps-1.24.1-<< parameters.target >>-<< parameters.library >>-<< parameters.version >>-{{ checksum "Cargo.lock" }}
          paths:
            - /usr/local/cargo/registry/cache
            - target
      - run:
          command: |
            mkdir -p /tmp/core_dumps
            find . -name "core.*" -exec cp \{\} /tmp/core_dumps \;
        cp target/$TARGET/debug/openssl-* /tmp/core_dumps
            cp target/<< parameters.target >>/debug/openssl-* /tmp/core_dumps
          when: on_fail
      - store_artifacts:
          path: /tmp/core_dumps
  - *SAVE_DEPS

macos_job: &MACOS_JOB
  macos:
    parameters:
      vendored:
        type: boolean
        default: false
    macos:
      xcode: "9.0"
    environment:
      RUST_BACKTRACE: 1
    steps:
      - checkout
      - run: sudo mkdir /opt
  - run: sudo chown -R $USER /usr/local /opt
      - run: sudo chown -R $USER /usr/local/ /opt
      - run: curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain 1.24.1
  - run: sudo ln -s $CARGO_HOME/bin/* /usr/local/bin
  - run: cargo generate-lockfile --verbose
  - run: echo "homebrew-x86_64-apple-darwin" > ~/lib_key
  - *RESTORE_DEPS
  - run: cargo run --manifest-path=systest/Cargo.toml --features "$FEATURES"
      - run: sudo ln -s ~/.cargo/bin/* /usr/local/bin
      - run: cargo generate-lockfile
      - restore_cache:
          key: deps-1.24.1-macos-<< parameters.vendored >>-{{ checksum "Cargo.lock" }}
      - run: |
          cargo run \
            --manifest-path=systest/Cargo.toml \
            <<# parameters.vendored >> --features vendored <</ parameters.vendored >>
      - run: |
          PATH=/usr/local/opt/openssl/bin:$PATH
      cargo test --manifest-path=openssl/Cargo.toml --features "$FEATURES"
  - *SAVE_DEPS
macos_env: &MACOS_ENV
  RUSTUP_HOME: /usr/local/rustup
  CARGO_HOME: /usr/local/cargo

vendored: &VENDORED
  FEATURES: vendored
  LIBRARY: ""
openssl_111: &OPENSSL_111
  LIBRARY: openssl
  VERSION: 1.1.1
openssl_110: &OPENSSL_110
  LIBRARY: openssl
  VERSION: 1.1.0i
openssl_102: &OPENSSL_102
  LIBRARY: openssl
  VERSION: 1.0.2p
openssl_101: &OPENSSL_101
  LIBRARY: openssl
  VERSION: 1.0.1u
libressl_250: &LIBRESSL_250
  LIBRARY: libressl
  VERSION: 2.5.0
libressl_290: &LIBRESSL_290
  LIBRARY: libressl
  VERSION: 2.9.0

x86_64: &X86_64
  TARGET: x86_64-unknown-linux-gnu
musl: &MUSL
  TARGET: x86_64-unknown-linux-musl
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
  CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER: qemu-arm-static
darwin: &DARWIN
  TARGET: x86_64-apple-darwin
          cargo test \
            --manifest-path=openssl/Cargo.toml \
            <<# parameters.vendored >> --features vendored <</ parameters.vendored >>
      - save_cache:
          key: deps-1.24.1-macos-<< parameters.vendored >>-{{ checksum "Cargo.lock" }}
          paths:
            - ~/.cargo/registry/cache
            - target

base: &BASE
  RUST_BACKTRACE: 1
  OPENSSL_DIR: /openssl
openssl_111: &openssl_111
  library: openssl
  version: 1.1.1a
openssl_110: &openssl_110
  library: openssl
  version: 1.1.0j
openssl_102: &openssl_102
  library: openssl
  version: 1.0.2q
openssl_101: &openssl_101
  library: openssl
  version: 1.0.1u

version: 2
jobs:
  musl-vendored:
    <<: *JOB
    docker:
    - image: rust:1.24.1
    environment:
      <<: [*VENDORED, *MUSL, *BASE]
  x86_64-vendored:
    <<: *JOB
    environment:
      <<: [*VENDORED, *X86_64, *BASE]
  x86_64-openssl-1.1.1:
    <<: *JOB
    environment:
      <<: [*OPENSSL_111, *X86_64, *BASE]
  x86_64-openssl-1.1.0:
    <<: *JOB
    environment:
      <<: [*OPENSSL_110, *X86_64, *BASE]
  x86_64-openssl-1.0.2:
    <<: *JOB
    environment:
      <<: [*OPENSSL_102, *X86_64, *BASE]
  x86_64-openssl-1.0.1:
    <<: *JOB
    environment:
      <<: [*OPENSSL_101, *X86_64, *BASE]
  i686-vendored:
    <<: *JOB
    environment:
      <<: [*VENDORED, *I686, *BASE]
  i686-openssl-1.1.1:
    <<: *JOB
    environment:
      <<: [*OPENSSL_111, *I686, *BASE]
  i686-openssl-1.1.0:
    <<: *JOB
    environment:
      <<: [*OPENSSL_110, *I686, *BASE]
  i686-openssl-1.0.2:
    <<: *JOB
    environment:
      <<: [*OPENSSL_102, *I686, *BASE]
  armhf-vendored:
    <<: *JOB
    environment:
      <<: [*VENDORED, *ARMHF, *BASE]
  armhf-openssl-1.1.1:
    <<: *JOB
    environment:
      <<: [*OPENSSL_111, *ARMHF, *BASE]
  armhf-openssl-1.1.0:
    <<: *JOB
    environment:
      <<: [*OPENSSL_110, *ARMHF, *BASE]
  armhf-openssl-1.0.2:
    <<: *JOB
    environment:
      <<: [*OPENSSL_102, *ARMHF, *BASE]
  x86_64-libressl-2.5.0:
    <<: *JOB
    environment:
      <<: [*LIBRESSL_250, *X86_64, *BASE]
  x86_64-libressl-2.9.0:
    <<: *JOB
    environment:
      <<: [*LIBRESSL_290, *X86_64, *BASE]
  macos:
    <<: *MACOS_JOB
    environment:
      <<: [*MACOS_ENV]
  macos-vendored:
    <<: *MACOS_JOB
    environment:
      <<: [*VENDORED, *MACOS_ENV]
workflows:
  version: 2
  tests:
  test:
    jobs:
    - musl-vendored
    - x86_64-vendored
    - x86_64-openssl-1.1.1
    - x86_64-openssl-1.1.0
    - x86_64-openssl-1.0.2
    - x86_64-openssl-1.0.1
    - i686-vendored
    - i686-openssl-1.1.1
    - i686-openssl-1.1.0
    - i686-openssl-1.0.2
    - armhf-vendored
    - armhf-openssl-1.1.1
    - armhf-openssl-1.1.0
    - armhf-openssl-1.0.2
    - x86_64-libressl-2.5.0
    - x86_64-libressl-2.9.0
    - macos
    - macos-vendored
      - linux:
          name: musl-vendored
          target: x86_64-unknown-linux-musl
          vendored: true
      - linux:
          name: x86_64-vendored
          target: x86_64-unknown-linux-gnu
          vendored: true
      - linux:
          <<: *openssl_111
          name: x86_64-openssl-1.1.1
          target: x86_64-unknown-linux-gnu
      - linux:
          <<: *openssl_110
          name: x86_64-openssl-1.1.0
          target: x86_64-unknown-linux-gnu
      - linux:
          <<: *openssl_102
          name: x86_64-openssl-1.0.2
          target: x86_64-unknown-linux-gnu
      - linux:
          <<: *openssl_101
          name: x86_64-openssl-1.0.1
          target: x86_64-unknown-linux-gnu
      - linux:
          name: i686-vendored
          target: i686-unknown-linux-gnu
          vendored: true
      - linux:
          <<: *openssl_111
          name: i686-openssl-1.1.1
          target: i686-unknown-linux-gnu
      - linux:
          <<: *openssl_110
          name: i686-openssl-1.1.0
          target: i686-unknown-linux-gnu
      - linux:
          <<: *openssl_102
          name: i686-openssl-1.0.2
          target: i686-unknown-linux-gnu
      - linux:
          name: armhf-vendored
          target: arm-unknown-linux-gnueabihf
          vendored: true
          no_run: true
      - linux:
          <<: *openssl_111
          name: armhf-openssl-1.1.1
          target: arm-unknown-linux-gnueabihf
          no_run: true
      - linux:
          <<: *openssl_110
          name: armhf-openssl-1.1.0
          target: arm-unknown-linux-gnueabihf
          no_run: true
      - linux:
          <<: *openssl_102
          name: armhf-openssl-1.0.2
          target: arm-unknown-linux-gnueabihf
          no_run: true
      - linux:
          name: x86_64-libressl-2.5
          target: x86_64-unknown-linux-gnu
          library: libressl
          version: 2.5.5
      - linux:
          name: x86_64-libressl-2.9
          target: x86_64-unknown-linux-gnu
          library: libressl
          version: 2.9.0
      - macos:
          name: macos
      - macos:
          name: macos-vendored
          vendored: true

test/add_target.sh

deleted100755 → 0
+0 −24
Original line number Diff line number Diff line
#!/bin/bash
set -eux

case "${TARGET}" in
"x86_64-unknown-linux-gnu")
    exit 0
    ;;
"i686-unknown-linux-gnu")
    apt-get install -y --no-install-recommends gcc-multilib
    ;;
"x86_64-unknown-linux-musl")
    apt-get install -y --no-install-recommends musl-tools
    ;;
"arm-unknown-linux-gnueabihf")
    dpkg --add-architecture armhf
    apt-get update
    apt-get install -y --no-install-recommends \
        gcc-arm-linux-gnueabihf \
        libc6-dev:armhf \
        qemu-user-static
    ;;
esac

rustup target add ${TARGET}

test/build_openssl.sh

deleted100755 → 0
+0 −62
Original line number Diff line number Diff line
#!/bin/bash
set -eux

if [ -d "${OPENSSL_DIR}" ]; 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"
    ;;
"")
    # using the vendored builds
    exit 0;
    ;;
esac

apt-get install -y --no-install-recommends curl

case "${TARGET}" in
"x86_64-unknown-linux-gnu")
    OS_COMPILER=linux-x86_64
    OS_FLAGS=""
    ;;
"i686-unknown-linux-gnu")
    OS_COMPILER=linux-elf
    OS_FLAGS=-m32
    ;;
"arm-unknown-linux-gnueabihf")
    OS_COMPILER=linux-armv4
    OS_FLAGS=""
    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}

case "${LIBRARY}" in
"openssl")
    ./Configure --prefix=${OPENSSL_DIR} ${OS_COMPILER} -fPIC -g ${OS_FLAGS} no-shared
    ;;
"libressl")
    ./configure --prefix=${OPENSSL_DIR} --disable-shared --with-pic
    ;;
esac

make -j$(nproc)
make install_sw