From 6ae722de957b33a3520e46a94bb1f970991a9a42 Mon Sep 17 00:00:00 2001 From: Liam Staskawicz Date: Sat, 10 Mar 2018 14:34:37 -0800 Subject: circle ci: add workflows for linux clang and gcc builds --- .circleci/build-and-test.sh | 15 +++++++ .circleci/config.yml | 93 +++++++++++++++++++++++++-------------- .circleci/images/clang/Dockerfile | 17 +++++++ .circleci/images/docker-deploy.sh | 17 +++++++ .circleci/images/gcc/Dockerfile | 16 +++++++ 5 files changed, 126 insertions(+), 32 deletions(-) create mode 100755 .circleci/build-and-test.sh create mode 100644 .circleci/images/clang/Dockerfile create mode 100644 .circleci/images/docker-deploy.sh create mode 100644 .circleci/images/gcc/Dockerfile diff --git a/.circleci/build-and-test.sh b/.circleci/build-and-test.sh new file mode 100755 index 00000000..068f0f91 --- /dev/null +++ b/.circleci/build-and-test.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# +# common build & test steps for CircleCI jobs +# + +uname -a +cmake --version +ninja --version + +mkdir build +cd build +cmake -G Ninja -DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} -DNNG_ENABLE_COVERAGE=${COVERAGE:-OFF} .. +ninja +env CTEST_OUTPUT_ON_FAILURE=1 ninja test diff --git a/.circleci/config.yml b/.circleci/config.yml index 5c9d5b55..a5adab5f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,38 +1,67 @@ -# Debian packages we want (makes life better); -# -# - asciidoctor -# - cmake -# - libmbedtls-dev -# - ninja-build -# - clang -# - clang-format -# - gcc (-7?) -# - g++ (-7?) -# -version: 2 + +# TODO: create custom docker images for each of these environments +# to avoid re-downloading & installing dependencies each time + +version: 2.0 jobs: - build: + "clang - build, test": docker: - - image: debian:stretch + - image: ubuntu:16.04 + environment: + CC: clang-4.0 + CXX: clang++-4.0 + CLANG_FORMAT: clang-format-4.0 + CTEST_OUTPUT_ON_FAILURE: 1 steps: - checkout - - run: - name: Install Dependencies - command: apt-get update -qq && apt-get install -y build-essential asciidoctor cmake libmbedtls-dev ninja-build clang clang-format - - run: - name: Configure - command: mkdir build && cd build && cmake -DNNG_TRANSPORT_TLS=ON -G Ninja .. - - - run: - name: Build - command: cd build && ninja + - run: apt-get update -qq + - run: apt-get install -y software-properties-common + # llvm apt details: https://apt.llvm.org + - run: apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main" + - run: apt-get update -qq + - run: > + apt-get install -y + build-essential + curl + asciidoctor + cmake + libmbedtls-dev + ninja-build + clang-4.0 + clang-format-4.0 + - run: ./etc/format-check.sh + - run: ./.circleci/build-and-test.sh - - run: - name: Run Tests - command: cd build && ninja test - environment: - CTEST_OUTPUT_ON_FAILURE: 1 + "gcc - build, test, coverage": + docker: + - image: ubuntu:16.04 + environment: + CC: gcc-7 + CXX: g++-7 + COVERAGE: "ON" + GCOV: gcov-7 + steps: + - checkout + - run: apt-get update -qq + - run: apt-get install -y software-properties-common + - run: add-apt-repository ppa:ubuntu-toolchain-r/test + - run: apt-get update -qq + - run: > + apt-get install -y + build-essential + curl + asciidoctor + cmake + libmbedtls-dev + ninja-build + gcc-7 + g++-7 + - run: ./.circleci/build-and-test.sh + - run: ./etc/codecov.sh -# - run: -# name: Check Format -# command: ./etc/format-check.sh +workflows: + version: 2 + build_and_test: + jobs: + - "clang - build, test" + - "gcc - build, test, coverage" diff --git a/.circleci/images/clang/Dockerfile b/.circleci/images/clang/Dockerfile new file mode 100644 index 00000000..02444a11 --- /dev/null +++ b/.circleci/images/clang/Dockerfile @@ -0,0 +1,17 @@ +FROM ubuntu:16.04 + +RUN apt-get update -qq && apt-get install -y software-properties-common +RUN apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main" +RUN apt-get update -qq && apt-get install -y \ + asciidoctor \ + build-essential \ + clang-4.0 \ + clang++-4.0 \ + clang-format-4.0 \ + cmake \ + curl \ + git \ + gzip \ + libmbedtls-dev \ + ninja-build \ + openssh-client diff --git a/.circleci/images/docker-deploy.sh b/.circleci/images/docker-deploy.sh new file mode 100644 index 00000000..5ebb1d84 --- /dev/null +++ b/.circleci/images/docker-deploy.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# increment tag each time either dockerfile changes +TAG=0.0.1 + +docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD + +pushd clang +docker build -t nng/ci/clang:$TAG . +popd + +pushd gcc +docker build -t nng/ci/gcc:$TAG . +popd + +docker push nng/ci/clang:$TAG +docker push nng/ci/gcc:$TAG diff --git a/.circleci/images/gcc/Dockerfile b/.circleci/images/gcc/Dockerfile new file mode 100644 index 00000000..783717ed --- /dev/null +++ b/.circleci/images/gcc/Dockerfile @@ -0,0 +1,16 @@ +FROM ubuntu:16.04 + +RUN apt-get update -qq && apt-get install -y software-properties-common +RUN add-apt-repository ppa:ubuntu-toolchain-r/test +RUN apt-get update -qq && apt-get install -y \ + asciidoctor \ + build-essential \ + cmake \ + curl \ + g++-7 \ + gcc-7 \ + git \ + gzip \ + libmbedtls-dev \ + ninja-build \ + openssh-client -- cgit v1.2.3-70-g09d2