# we utilize the images generated by the build-images project, to
# speed up CI runs. We also use ccache and store config.cache
# to speed up compilation. We include a version number in cache
# name to allow expiration of old caches.

cache:
  key: "$CI_JOB_NAME-ver1"
  paths:
    - cache/

before_script:
  # CCache Config
  - mkdir -p cache
  - export CCACHE_BASEDIR="${PWD}"
  - export CCACHE_DIR="${PWD}/cache"
  - export CC="ccache gcc"

after_script:
  # somehow after_script looses environment
  - export CCACHE_BASEDIR="${PWD}"
  - export CCACHE_DIR="${PWD}/cache"
  - ccache -s

variables:
  BUILD_IMAGES_PROJECT: libmicrohttpd/build-images
  DEBIAN_BUILD: buildenv-debian-stretch
  MINGW_BUILD: buildenv-debian-mingw
  GET_SOURCES_ATTEMPTS: "3"
  CONFIGURE_BASE_FLAGS: --cache-file cache/config.cache
  CFLAGS_DEFAULT: ""

# In this build we combine
#  * gcc
#  * check
gcc/Stretch:
  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
  script:
    - export CFLAGS="$CFLAGS_DEFAULT"
    - ./bootstrap
    - ./configure $CONFIGURE_BASE_FLAGS --enable-build-type=debug --disable-sanitizers
    - make -j$(nproc) && make check
  artifacts:
    expire_in: 2 weeks
    when: on_failure
    paths:
      - ./*.log
      - src/*/*.log
      - src/*/*/*.log

# In this build we combine
#  * clang
#  * ASan, UBSan
#  * check
Sanitizers/Stretch:
  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
  script:
    - export CFLAGS="$CFLAGS_DEFAULT"
    - ./bootstrap
    - export CC="ccache clang"
    - export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-3.8/bin/llvm-symbolizer
    - ./configure $CONFIGURE_BASE_FLAGS --disable-doc --enable-build-type=debug --enable-sanitizers
    - make -j$(nproc) && make check
  artifacts:
    expire_in: 2 weeks
    when: on_failure
    paths:
      - ./*.log
      - src/*/*.log
      - src/*/*/*.log

Scan-Build/Debian:
  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
  script:
    - export CFLAGS="$CFLAGS_DEFAULT"
    - ln -s "$(which ccache)" "$(pwd)/clang-3.8"
    - export CC="$(pwd)/clang-3.8"
    - ./bootstrap
    - ./configure $CONFIGURE_BASE_FLAGS --enable-build-type=debug --disable-sanitizers
    - (cd src/include/ && make) # options-generator is badly broken
    - scan-build --use-cc="$CC" -v -enable-checker security,nullability --status-bugs -o scan-build make -j$(nproc)
    - scan-build --use-cc="$CC" -v -enable-checker security,nullability --status-bugs -o scan-build make -k check
  except:
    - tags
  artifacts:
    expire_in: 2 weeks
    when: on_failure
    paths:
      - scan-build/*

# ! Cross-compiling is broken currently due to options-generator
#MinGW/Debian:
#  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD
#  script:
#    - export CFLAGS="$CFLAGS_DEFAULT"
#    - export CC="ccache $PREFIX-gcc"
#    - ./bootstrap
#    - ./configure $CONFIGURE_BASE_FLAGS --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-build-type=release
#    - make -j$(nproc)

dist/Stretch:
  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
  script:
    - export CFLAGS="$CFLAGS_DEFAULT"
    - ./bootstrap
    - ./configure $CONFIGURE_BASE_FLAGS --enable-build-type=release
    - make -j$(nproc) dist
  artifacts:
    name: "$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA"
    expire_in: 2 weeks
    when: on_success
    paths:
      - ./libmicrohttpd-*.*.*.tar.??
