gil/.circleci/config.yml
Mateusz Łoskot dfbbec1531
[circleci] Deal with b2 increased default of parallel jobs [skip appveyor]
Attempt to fix random failures suddenly happening on CircleCI,
likely due to memory issues:

    g++: internal compiler error: Killed (program cc1plus)

[skip travis]
[skip azp]
2019-07-03 21:00:03 +02:00

651 lines
19 KiB
YAML

##############################################################################
# CircleCI 2.0 for Boost.GIL
#
# Copyright (c) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# Use, modification and distribution is subject to the Boost Software License,
# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
##############################################################################
version: 2.0
##############################################################################
# Docker images
##############################################################################
docker_gcc48: &docker_gcc48
docker:
- image: gcc:4.8
docker_gcc49: &docker_gcc49
docker:
- image: gcc:4.9
docker_gcc51: &docker_gcc51
docker:
- image: gcc:5.1
docker_gcc52: &docker_gcc52
docker:
- image: gcc:5.2
docker_gcc53: &docker_gcc53
docker:
- image: gcc:5.3
docker_gcc54: &docker_gcc54
docker:
- image: gcc:5.4
docker_gcc55: &docker_gcc55
docker:
- image: gcc:5.5
docker_gcc61: &docker_gcc61
docker:
- image: gcc:6.1
docker_gcc62: &docker_gcc62
docker:
- image: gcc:6.2
docker_gcc63: &docker_gcc63
docker:
- image: gcc:6.3
docker_gcc64: &docker_gcc64
docker:
- image: gcc:6.4
docker_gcc71: &docker_gcc71
docker:
- image: gcc:7.3
docker_gcc72: &docker_gcc72
docker:
- image: gcc:7.2
docker_gcc73: &docker_gcc73
docker:
- image: gcc:7.3
docker_gcc82: &docker_gcc82
docker:
- image: gcc:8.2
docker_gcc83: &docker_gcc83
docker:
- image: gcc:8.3
docker_clang39: &docker_clang39
docker:
- image: rferraro/cxx-clang:3.9
docker_clang40: &docker_clang40
docker:
- image: rferraro/cxx-clang:4.0
docker_clang50: &docker_clang50
docker:
- image: rferraro/cxx-clang:5.0
##############################################################################
# Build variants
##############################################################################
env_gcc_cpp11_dbg: &env_gcc_cpp11_dbg
environment:
- TOOLSET: gcc
- VARIANT: "variant=debug"
- OPTIMIZ: ""
- CXXSTD: "11"
- LNKFLAG: ""
env_gcc_cpp11_opt_speed: &env_gcc_cpp11_opt_speed
environment:
- TOOLSET: gcc
- VARIANT: "variant=release"
- OPTIMIZ: "optimization=speed"
- CXXSTD: "11"
- LNKFLAG: ""
env_clang_cpp11_dbg: &env_clang_cpp11_dbg
environment:
- TOOLSET: clang
- VARIANT: "variant=debug"
- OPTIMIZ: ""
- CXXSTD: "11"
- LNKFLAG: ""
env_clang_cpp11_opt_speed: &env_clang_cpp11_opt_speed
environment:
- TOOLSET: clang
- VARIANT: "variant=release"
- OPTIMIZ: "optimization=speed"
- CXXSTD: "11"
- LNKFLAG: ""
##############################################################################
# Build configurations
##############################################################################
# GCC 4.8 is used to build `b2` driver
config_gcc48_cpp11_opt_speed: &config_gcc48_cpp11_opt_speed
<<: *docker_gcc48
<<: *env_gcc_cpp11_opt_speed
config_gcc49_cpp11_dbg: &config_gcc49_cpp11_dbg
<<: *docker_gcc49
<<: *env_gcc_cpp11_dbg
config_gcc49_cpp11_opt_speed: &config_gcc49_cpp11_opt_speed
<<: *docker_gcc49
<<: *env_gcc_cpp11_opt_speed
config_gcc51_cpp11_dbg: &config_gcc51_cpp11_dbg
<<: *docker_gcc51
<<: *env_gcc_cpp11_dbg
config_gcc51_cpp11_opt_speed: &config_gcc51_cpp11_opt_speed
<<: *docker_gcc51
<<: *env_gcc_cpp11_opt_speed
config_gcc52_cpp11_dbg: &config_gcc52_cpp11_dbg
<<: *docker_gcc52
<<: *env_gcc_cpp11_dbg
config_gcc52_cpp11_opt_speed: &config_gcc52_cpp11_opt_speed
<<: *docker_gcc52
<<: *env_gcc_cpp11_opt_speed
config_gcc53_cpp11_dbg: &config_gcc53_cpp11_dbg
<<: *docker_gcc53
<<: *env_gcc_cpp11_dbg
config_gcc53_cpp11_opt_speed: &config_gcc53_cpp11_opt_speed
<<: *docker_gcc53
<<: *env_gcc_cpp11_opt_speed
config_gcc54_cpp11_dbg: &config_gcc54_cpp11_dbg
<<: *docker_gcc54
<<: *env_gcc_cpp11_dbg
config_gcc54_cpp11_opt_speed: &config_gcc54_cpp11_opt_speed
<<: *docker_gcc54
<<: *env_gcc_cpp11_opt_speed
config_gcc55_cpp11_dbg: &config_gcc55_cpp11_dbg
<<: *docker_gcc55
<<: *env_gcc_cpp11_dbg
config_gcc55_cpp11_opt_speed: &config_gcc55_cpp11_opt_speed
<<: *docker_gcc55
<<: *env_gcc_cpp11_opt_speed
config_gcc61_cpp11_dbg: &config_gcc61_cpp11_dbg
<<: *docker_gcc61
<<: *env_gcc_cpp11_dbg
config_gcc61_cpp11_opt_speed: &config_gcc61_cpp11_opt_speed
<<: *docker_gcc61
<<: *env_gcc_cpp11_opt_speed
config_gcc62_cpp11_dbg: &config_gcc62_cpp11_dbg
<<: *docker_gcc62
<<: *env_gcc_cpp11_dbg
config_gcc62_cpp11_opt_speed: &config_gcc62_cpp11_opt_speed
<<: *docker_gcc62
<<: *env_gcc_cpp11_opt_speed
config_gcc63_cpp11_dbg: &config_gcc63_cpp11_dbg
<<: *docker_gcc63
<<: *env_gcc_cpp11_dbg
config_gcc63_cpp11_opt_speed: &config_gcc63_cpp11_opt_speed
<<: *docker_gcc63
<<: *env_gcc_cpp11_opt_speed
config_gcc64_cpp11_dbg: &config_gcc64_cpp11_dbg
<<: *docker_gcc64
<<: *env_gcc_cpp11_dbg
config_gcc64_cpp11_opt_speed: &config_gcc64_cpp11_opt_speed
<<: *docker_gcc64
<<: *env_gcc_cpp11_opt_speed
config_gcc71_cpp11_dbg: &config_gcc71_cpp11_dbg
<<: *docker_gcc71
<<: *env_gcc_cpp11_dbg
config_gcc71_cpp11_opt_speed: &config_gcc71_cpp11_opt_speed
<<: *docker_gcc71
<<: *env_gcc_cpp11_opt_speed
config_gcc72_cpp11_dbg: &config_gcc72_cpp11_dbg
<<: *docker_gcc72
<<: *env_gcc_cpp11_dbg
config_gcc72_cpp11_opt_speed: &config_gcc72_cpp11_opt_speed
<<: *docker_gcc72
<<: *env_gcc_cpp11_opt_speed
config_gcc73_cpp11_dbg: &config_gcc73_cpp11_dbg
<<: *docker_gcc73
<<: *env_gcc_cpp11_dbg
config_gcc73_cpp11_opt_speed: &config_gcc73_cpp11_opt_speed
<<: *docker_gcc73
<<: *env_gcc_cpp11_opt_speed
config_gcc82_cpp11_dbg: &config_gcc82_cpp11_dbg
<<: *docker_gcc82
<<: *env_gcc_cpp11_dbg
config_gcc82_cpp11_opt_speed: &config_gcc82_cpp11_opt_speed
<<: *docker_gcc82
<<: *env_gcc_cpp11_opt_speed
config_gcc83_cpp11_dbg: &config_gcc83_cpp11_dbg
<<: *docker_gcc83
<<: *env_gcc_cpp11_dbg
config_gcc83_cpp11_opt_speed: &config_gcc83_cpp11_opt_speed
<<: *docker_gcc83
<<: *env_gcc_cpp11_opt_speed
config_clang39_cpp11_dbg: &config_clang39_cpp11_dbg
<<: *docker_clang39
<<: *env_clang_cpp11_dbg
config_clang39_cpp11_opt_speed: &config_clang39_cpp11_opt_speed
<<: *docker_clang39
<<: *env_clang_cpp11_opt_speed
config_clang40_cpp11_dbg: &config_clang40_cpp11_dbg
<<: *docker_clang40
<<: *env_clang_cpp11_dbg
config_clang40_cpp11_opt_speed: &config_clang40_cpp11_opt_speed
<<: *docker_clang40
<<: *env_clang_cpp11_opt_speed
config_clang50_cpp11_dbg: &config_clang50_cpp11_dbg
<<: *docker_clang50
<<: *env_clang_cpp11_dbg
config_clang50_cpp11_opt_speed: &config_clang50_cpp11_opt_speed
<<: *docker_clang50
<<: *env_clang_cpp11_opt_speed
##############################################################################
# Workspace persistance
##############################################################################
attach_workspace: &attach_workspace
attach_workspace:
at: ~/project
##############################################################################
# Build steps (in alphabetical order by name of steps group)
##############################################################################
run_compiler_version: &run_compiler_version
run:
name: Checking compiler version
command: |
echo TOOLSET=$TOOLSET
echo VARIANT=$VARIANT
echo OPTIMIZ=$OPTIMIZ
echo CXXSTD=$CXXSTD
echo LNKFLAG=$LNKFLAG
$TOOLSET --version
steps_bootstrap: &steps_bootstrap
steps:
- *attach_workspace
- *run_compiler_version
- run: cd boost-root && ./bootstrap.sh -with-toolset=$TOOLSET || cat ./bootstrap.log
- run: cd boost-root && ./b2 -j2 headers > /dev/null
- persist_to_workspace:
root: ~/project
paths: boost-root
steps_test_core: &steps_test_core
steps:
- *attach_workspace
- *run_compiler_version
- run: cd boost-root && ./b2 -j2 toolset=$TOOLSET $VARIANT $OPTIMIZ cxxstd="$CXXSTD" libs/gil/test/core
steps_test_numeric: &steps_test_numeric
steps:
- *attach_workspace
- *run_compiler_version
- run: cd boost-root && ./b2 -j2 toolset=$TOOLSET $VARIANT $OPTIMIZ cxxstd="$CXXSTD" libs/gil/test/extension/numeric
steps_test_toolbox: &steps_test_toolbox
steps:
- *attach_workspace
- *run_compiler_version
- run: cd boost-root && ./b2 -j2 toolset=$TOOLSET $VARIANT $OPTIMIZ cxxstd="$CXXSTD" libs/gil/test/extension/toolbox
steps_test_io: &steps_test_io
steps:
- *attach_workspace
- *run_compiler_version
- run: cd boost-root && ./b2 -j2 toolset=$TOOLSET $VARIANT $OPTIMIZ cxxstd="$CXXSTD" libs/gil/test/extension/io//simple
##############################################################################
# Build jobs
##############################################################################
jobs:
bootstrap_checkout:
working_directory: ~/project/gil
# Build `b2` using the ancient compiler to hopefully avoid run-time failures:
# ./b2: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by ./b2)
<<: *config_gcc48_cpp11_opt_speed
steps:
- checkout
- run:
# CONTRIBUTING.md: Modular Boost Library Maintenance guide, for more realistic
# test environment, recommends to develop and test individual Boost library
# against other Boost libraries as defined by the Boost super-project master branch
name: Checkout Boost superproject
command: |
echo $PWD && ls -a $PWD
cd ..
echo $PWD && ls -a $PWD
~/project/gil/.ci/get-boost.sh $CIRCLE_BRANCH ~/project/gil
cd boost-root
- persist_to_workspace:
root: ~/project
paths: boost-root
bootstrap_gcc:
<<: *config_gcc48_cpp11_opt_speed
<<: *steps_bootstrap
bootstrap_clang:
<<: *config_clang39_cpp11_opt_speed
<<: *steps_bootstrap
### GCC 4.x ################################################################
gcc49_11_core:
<<: *config_gcc49_cpp11_dbg
<<: *steps_test_core
gcc49_11_core_speed:
<<: *config_gcc49_cpp11_opt_speed
<<: *steps_test_core
### GCC 5.x ################################################################
gcc51_11_core:
<<: *config_gcc51_cpp11_dbg
<<: *steps_test_core
gcc51_11_core_speed:
<<: *config_gcc51_cpp11_opt_speed
<<: *steps_test_core
gcc52_11_core:
<<: *config_gcc52_cpp11_dbg
<<: *steps_test_core
gcc52_11_core_speed:
<<: *config_gcc52_cpp11_opt_speed
<<: *steps_test_core
gcc53_11_core:
<<: *config_gcc53_cpp11_dbg
<<: *steps_test_core
gcc53_11_core_speed:
<<: *config_gcc53_cpp11_opt_speed
<<: *steps_test_core
gcc54_11_core:
<<: *config_gcc54_cpp11_dbg
<<: *steps_test_core
gcc54_11_core_speed:
<<: *config_gcc54_cpp11_opt_speed
<<: *steps_test_core
gcc55_11_core:
<<: *config_gcc55_cpp11_dbg
<<: *steps_test_core
gcc55_11_core_speed:
<<: *config_gcc55_cpp11_opt_speed
<<: *steps_test_core
### GCC 6.x ################################################################
gcc61_11_core:
<<: *config_gcc61_cpp11_dbg
<<: *steps_test_core
gcc61_11_core_speed:
<<: *config_gcc61_cpp11_opt_speed
<<: *steps_test_core
gcc62_11_core:
<<: *config_gcc62_cpp11_dbg
<<: *steps_test_core
gcc62_11_core_speed:
<<: *config_gcc62_cpp11_opt_speed
<<: *steps_test_core
gcc63_11_core:
<<: *config_gcc63_cpp11_dbg
<<: *steps_test_core
gcc63_11_core_speed:
<<: *config_gcc63_cpp11_opt_speed
<<: *steps_test_core
gcc64_11_core:
<<: *config_gcc64_cpp11_dbg
<<: *steps_test_core
gcc64_11_core_speed:
<<: *config_gcc64_cpp11_opt_speed
<<: *steps_test_core
### GCC 7.x ################################################################
gcc71_11_core:
<<: *config_gcc71_cpp11_dbg
<<: *steps_test_core
gcc71_11_core_speed:
<<: *config_gcc71_cpp11_opt_speed
<<: *steps_test_core
gcc72_11_core:
<<: *config_gcc72_cpp11_dbg
<<: *steps_test_core
gcc72_11_core_speed:
<<: *config_gcc72_cpp11_opt_speed
<<: *steps_test_core
gcc73_11_core:
<<: *config_gcc73_cpp11_dbg
<<: *steps_test_core
gcc73_11_core_speed:
<<: *config_gcc73_cpp11_opt_speed
<<: *steps_test_core
gcc82_11_core:
<<: *config_gcc82_cpp11_dbg
<<: *steps_test_core
gcc82_11_core_speed:
<<: *config_gcc82_cpp11_opt_speed
<<: *steps_test_core
gcc83_11_core:
<<: *config_gcc83_cpp11_dbg
<<: *steps_test_core
gcc83_11_core_speed:
<<: *config_gcc83_cpp11_opt_speed
<<: *steps_test_core
### clang 3.9 ################################################################
clang39_11_core:
<<: *config_clang39_cpp11_dbg
<<: *steps_test_core
clang39_11_core_speed:
<<: *config_clang39_cpp11_opt_speed
<<: *steps_test_core
### clang 4.0 ################################################################
clang40_11_core:
<<: *config_clang40_cpp11_dbg
<<: *steps_test_core
clang40_11_core_speed:
<<: *config_clang40_cpp11_opt_speed
<<: *steps_test_core
### clang 5.0 ################################################################
clang50_11_core:
<<: *config_clang50_cpp11_dbg
<<: *steps_test_core
clang50_11_core_speed:
<<: *config_clang50_cpp11_opt_speed
<<: *steps_test_core
##############################################################################
# Workflows
##############################################################################
workflows:
version: 2
build-and-test:
jobs:
- bootstrap_checkout:
filters: { branches: { only: [ develop, master ] } }
- bootstrap_gcc:
requires: [ bootstrap_checkout ]
filters: { branches: { only: [ develop, master ] } }
- bootstrap_clang:
requires: [ bootstrap_checkout ]
filters: { branches: { only: [ develop, master ] } }
### GCC 4.x ############################################################
- gcc49_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc49_11_core_speed:
requires: [ gcc49_11_core ]
filters: { branches: { only: [ develop, master ] } }
### GCC 5.x ############################################################
- gcc51_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc51_11_core_speed:
requires: [ gcc51_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc52_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc52_11_core_speed:
requires: [ gcc52_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc53_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc53_11_core_speed:
requires: [ gcc53_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc54_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc54_11_core_speed:
requires: [ gcc54_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc55_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc55_11_core_speed:
requires: [ gcc55_11_core ]
filters: { branches: { only: [ develop, master ] } }
### GCC 6.x ############################################################
- gcc61_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc61_11_core_speed:
requires: [ gcc61_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc62_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc62_11_core_speed:
requires: [ gcc62_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc63_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc63_11_core_speed:
requires: [ gcc63_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc64_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc64_11_core_speed:
requires: [ gcc64_11_core ]
filters: { branches: { only: [ develop, master ] } }
### GCC 7.x ############################################################
- gcc71_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc71_11_core_speed:
requires: [ gcc71_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc72_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc72_11_core_speed:
requires: [ gcc72_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc73_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc73_11_core_speed:
requires: [ gcc73_11_core ]
filters: { branches: { only: [ develop, master ] } }
### GCC 8.x ############################################################
- gcc82_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc82_11_core_speed:
requires: [ gcc82_11_core ]
filters: { branches: { only: [ develop, master ] } }
- gcc83_11_core:
requires: [ bootstrap_gcc ]
filters: { branches: { only: [ develop, master ] } }
- gcc83_11_core_speed:
requires: [ gcc83_11_core ]
filters: { branches: { only: [ develop, master ] } }
### clang 3.9 ##########################################################
- clang39_11_core:
requires: [ bootstrap_clang ]
filters: { branches: { only: [ develop, master ] } }
- clang39_11_core_speed:
requires: [ clang39_11_core ]
filters: { branches: { only: [ develop, master ] } }
### clang 4.0 ##########################################################
- clang40_11_core:
requires: [ bootstrap_clang ]
filters: { branches: { only: [ develop, master ] } }
- clang40_11_core_speed:
requires: [ clang40_11_core ]
filters: { branches: { only: [ develop, master ] } }
### clang 5.0 ##########################################################
- clang50_11_core:
requires: [ bootstrap_clang ]
filters: { branches: { only: [ develop, master ] } }
- clang50_11_core_speed:
requires: [ clang50_11_core ]
filters: { branches: { only: [ develop, master ] } }
##############################################################################
# Notifications
##############################################################################
# Circle CI 1.0 notifications seem to work for Circle CI 2.0 (not 2.1!)
# https://github.com/circleci/circleci-docs/issues/2411
# https://discuss.circleci.com/t/circleci-2-0-notifications-webhooks/19075/9
#
# TODO: Disabled until CircleCI supports single notification per whole workflow.
# Currently, it floods the webhook with a notification per job.
#notify:
# webhooks:
# - url: https://webhooks.gitter.im/e/9538066016dc0f9b6511