pages:
  stage: build
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine-pages
  except:
    - schedules
  script:
    - python3 ./waf configure --prefix=/tmp/docbot-local --htmldir=`pwd`/public/latest/ --enable-doc --disable-manpage build install
    - cp www/favicon.ico public
    - cp docs/top.html.in public/index.html
    - cp docs/top-asciidoc.css public/asciidoc.css
    - mv public/latest/404.html public/404.html
    - sed -i -E -e 's!\./(asciidoc\.(js|css))!\./latest/\1!g' public/404.html
    - find public -type f -iregex '.*\.\(htm\|html\|txt\|text\|js\|css\)$' -execdir gzip -f --keep {} \;
  allow_failure: true
  artifacts:
    paths:
       - public
  tags:
    - gitlab-org

include:
  - template: Code-Quality.gitlab-ci.yml
  - template: SAST.gitlab-ci.yml
  - template: License-Scanning.gitlab-ci.yml
  - local: '.gitlab-opttest-ci.yml'
  - local: '.gitlab-ci-docker-images.yml'

.job_template: &job_definition
  stage: build
  except:
    - schedules
  tags:
    - gitlab-org

.job_template_allow_failure: &job_definition_allow_failure
  <<: *job_definition
  allow_failure: true

alpine-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

alpine-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

alpine-edge-basic:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine-edge
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

alpine-edge-refclocks:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine-edge
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

AsciiDoc-3-Fedora:
  <<: *job_definition
  image: fedora
  script:
    - yum -y install bison gcc openssl-devel libcap-devel pps-tools-devel python3-devel wget unzip libxslt docbook-style-xsl
    - wget https://asciidoc3.org/asciidoc3-3.1.0.zip
    - unzip asciidoc3-3.1.0.zip -d asciidoc3
    - ln -sv a2x3.py asciidoc3/a2x3
    - ln -sv asciidoc3.py asciidoc3/asciidoc3
    - asciidoc3/asciidoc3 --version || echo -n
    - PATH="$PWD/asciidoc3:$PATH" python3 ./waf configure --enable-doc --enable-manpage build

AsciiDoc-classic2-Alpine:
  <<: *job_definition
  image: alpine
  script:
    - apk update && apk add gcc bison musl-dev openssl-dev libcap-dev python2-dev asciidoc
    - python ./waf configure --enable-doc --enable-manpage build

AsciiDoc-classic3-Alpine:
  <<: *job_definition
  image: alpine
  script:
    - apk update && apk add gcc bison musl-dev openssl-dev libcap-dev python3-dev asciidoc
    - python3 ./waf configure --enable-doc --enable-manpage build

AsciiDoc-no:
  <<: *job_definition
  image: alpine
  script:
    - apk update && apk add gcc bison musl-dev openssl-dev libcap-dev python2-dev
    - python ./waf configure --disable-doc --disable-manpage build

AsciiDoc-py3-Ubuntu:
  <<: *job_definition
  image: ubuntu:devel
  script:
    - apt-get update
    - DEBIAN_FRONTEND="noninteractive" apt-get install -y netbase bison gcc libssl-dev libcap-dev pps-tools python3-dev asciidoc-base
    - python3 ./waf configure --enable-doc --enable-manpage build

debian-oldstable-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-oldstable
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --disable-nts build

debian-oldstable-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-oldstable
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --disable-nts --refclock=all build

debian-stable-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-stable
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

debian-stable-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-stable
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

debian-testing-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-testing
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

debian-testing-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-testing
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

debian-unstable-basic:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-unstable
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

debian-unstable-refclocks:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-unstable
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

ubuntu-latest-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-latest
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

ubuntu-latest-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-latest
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

ubuntu-rolling-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-rolling
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

ubuntu-rolling-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-rolling
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

ubuntu-devel-basic:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-devel
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

ubuntu-devel-refclocks:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-devel
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

freebsd-11-basic:
  <<: *job_definition
  script:
    - python ./waf configure --disable-doc --disable-manpage --disable-nts build
  tags:
    - freebsd-11
  only:
    - branches@NTPsec/ntpsec

freebsd-11-refclocks:
  <<: *job_definition
  script:
    - python ./waf configure --disable-doc --disable-manpage --disable-nts --refclock=all build
  tags:
    - freebsd-11
  only:
    - branches@NTPsec/ntpsec

freebsd-12-basic:
  <<: *job_definition
  script:
    - python ./waf configure --disable-doc --disable-manpage build
  tags:
    - freebsd-12
  only:
    - branches@NTPsec/ntpsec

freebsd-12-refclocks:
  <<: *job_definition
  script:
    - python ./waf configure --disable-doc --disable-manpage --refclock=all build
  tags:
    - freebsd-12
  only:
    - branches@NTPsec/ntpsec

centos-latest-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/centos-latest
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

centos-latest-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/centos-latest
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

fedora-latest-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/fedora-latest
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

fedora-latest-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/fedora-latest
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

fedora-rawhide-basic:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/fedora-rawhide
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

fedora-rawhide-refclocks:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/fedora-rawhide
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

fedora-rawhide-refclocks-gpsd:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/fedora-rawhide-gpsd
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

python3-rc:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/python3-rc
  script:
    - python ./waf configure --disable-doc --disable-manpage --refclock=all build

python-coverage:
  <<: *job_definition
  script:
    - apt-get update -qq && apt-get install -y -qq netbase bison python-dev python-coverage
    - python ./waf configure --disable-doc --disable-manpage build
    - for i in build/main/tests/pylib/test_*; do python-coverage run -a --source build/main/pylib "$i"; done
    - python-coverage report

clang-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/clang
  script:
    - python ./waf configure --disable-doc --disable-manpage --check-c-compiler=clang build

clang-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/clang
  script:
    - python ./waf configure --disable-doc --disable-manpage --check-c-compiler=clang --refclock=all build

openSUSE-leap-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/opensuse-leap
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --disable-nts build 

openSUSE-leap-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/opensuse-leap
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --disable-nts --refclock=all build

openSUSE-tumbleweed-basic:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/opensuse-tumbleweed
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build

openSUSE-tumbleweed-refclocks:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/opensuse-tumbleweed
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all build

debian-stable-basic-32bit:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-stable-i386
  script:
    - python ./waf configure --disable-doc --disable-manpage build

debian-stable-refclocks-32bit:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-stable-i386
  script:
    - python ./waf configure --disable-doc --disable-manpage --refclock=all build

debian-stable-mDNS-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-stable-mdns
  script:
    - python ./waf configure --disable-doc --disable-manpage build

debian-stable-mDNS-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-stable-mdns
  script:
    - python ./waf configure --disable-doc --disable-manpage --refclock=all build

cross-build:
  <<: *job_definition_allow_failure
  script:
    - PYTHON_VERSION=2.7 PYTAG=cpython27 pyext_PATTERN="%s.so" PYTHON_LDFLAGS='-lpthread -ldl' ./waf configure --disable-doc --disable-manpage --disable-nts --cross-compiler=arm-linux-gnueabihf-gcc-5 --cross-cflags '-I/srv/arm-local/include -I/srv/arm-local/include/python2.7' --cross-ldflags '-L/srv/arm-local/lib' --pythondir=/srv/arm-local/lib/python2.7/dist-packages --pythonarchdir=/srv/arm-local/lib/python2.7/dist-packages build
  tags:
    - ubuntu-1604-lts
  only:
    - branches@NTPsec/ntpsec

gentoo-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/gentoo
  script:
    - python ./waf configure --disable-doc --disable-manpage build

gentoo-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/gentoo
  script:
    - python ./waf configure --disable-doc --disable-manpage --refclock=all build

gentoo-hardened-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/gentoo-hardened
  script:
    - python ./waf configure --disable-doc --disable-manpage build

gentoo-hardened-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/gentoo-hardened
  script:
    - python ./waf configure --disable-doc --disable-manpage --refclock=all build

coverity-scan:
  script:
    - ./waf configure --disable-doc --disable-manpage --refclock=all
    - /opt/cov-analysis/bin/cov-build --dir cov-int ./waf build
    - tar czf ntpsec_coverity.tgz cov-int
    - curl --form token="$COVERITY_TOKEN" --form email=security@ntpsec.org --form file=@ntpsec_coverity.tgz --form version="$(git rev-parse --short HEAD)" --form description="Automatic submission by gitlab-ci" https://scan.coverity.com/builds?project=ntpsec
  tags:
    - ubuntu-1604-lts
  only:
    - schedules AND branches@NTPsec/ntpsec

macos-basic:
  <<: *job_definition
  script:
    - PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig python ./waf configure --disable-doc --disable-manpage build
  tags:
    - macos
  only:
    - branches@NTPsec/ntpsec

macos-refclocks:
  <<: *job_definition
  script:
    - PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig python ./waf configure --disable-doc --disable-manpage --refclock=all build
  tags:
    - macos
  only:
    - branches@NTPsec/ntpsec

feature-classic-mode:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-classic-mode build

feature-seccomp:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine-seccomp
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-seccomp build

feature-debug:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-debug build

feature-debug-gdb:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-debug-gdb build

feature-debug-timing:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-debug-timing build

feature-disable-droproot:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --disable-droproot build

feature-early-droproot:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-early-droproot build

feature-leap-smear:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-leap-smear build

feature-mssntp:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --enable-mssntp build
