pages:
  stage: build
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine-pages
  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
  - local: '.gitlab-opttest-ci.yml'
  - local: '.gitlab-docker-ci.yml'

.job_template: &job_definition
  stage: build
  rules:
    - if: '$CI_PIPELINE_SOURCE != "schedule"'
  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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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_allow_failure
  image: fedora
  script:
    - yum -y install bison gcc openssl-devel libcap-devel pps-tools-devel python3-devel wget libxslt docbook-style-xsl
    - mkdir asciidoc3
    - wget https://asciidoc3.org/asciidoc3-3.2.3.tar.gz
    - tar -xpvf asciidoc3-3.2.3.tar.gz -C 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-py3-Alpine:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - apk update && apk add 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 python3-dev pythonispython3
    - python ./waf configure --disable-doc --disable-manpage build

AsciiDoc-classic3-Debian-Old:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-oldstable
  script:
    - apt-get update
    - DEBIAN_FRONTEND="noninteractive" apt-get install -y python3-dev asciidoc-base
    - python3 ./waf configure --enable-doc --enable-manpage build --disable-nts

AsciiDoc-classic2-Debian-Old:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-oldstable
  script:
    - apt-get update
    - DEBIAN_FRONTEND="noninteractive" apt-get install -y python2-dev asciidoc-base
    - python2 ./waf configure --enable-doc --enable-manpage build --disable-nts

debian-oldstable-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-oldstable
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --disable-nts build --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

ubuntu-latest-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-latest
  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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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

ubuntu-rolling-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/ubuntu-rolling
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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

freebsd-basic:
  <<: *job_definition
  script:
    - python ./waf configure --disable-doc --disable-manpage build
    - DESTDIR=build/prison python ./waf install
    - DESTDIR=./prison python ./waf install
    - DESTDIR=../prison python ./waf install
    - rm -rvf build/prison ./prison ../prison
  tags:
    - freebsd
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_PROJECT_PATH == "NTPsec/ntpsec"'

freebsd-refclocks:
  <<: *job_definition
  script:
    - python ./waf configure --disable-doc --disable-manpage --refclock=all build
  tags:
    - freebsd
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_PROJECT_PATH == "NTPsec/ntpsec"'

centos-latest-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/centos-latest
  script:
    - python3 ./waf configure --disable-doc --disable-manpage build --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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 --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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

python3:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/python3
  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-is-python3 python3-coverage
    - python ./waf configure --disable-doc --disable-manpage build
    - for i in build/main/tests/pylib/test_*; do python3-coverage run -a --source build/main/pylib "$i"; done
    - python3-coverage report

clang-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/clang
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --check-c-compiler=clang build --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

clang-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/clang
  script:
    - python3 ./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  --pyshebang "/usr/bin/env python3"
    - python3 ./waf install
    - python3 ./waf uninstall

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

# 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:
    - python3 ./waf configure --disable-doc --disable-manpage build

debian-stable-mDNS-refclocks:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/debian-stable-mdns
  script:
    - python3 ./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
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_PROJECT_PATH == "NTPsec/ntpsec"'

cross-armhf-build:
  <<: *job_definition_allow_failure
  image: $CI_REGISTRY/ntpsec/ntpsec/cross-armhf
  script:
    - pyver=$(python3 -c 'import sys;print(f"{sys.version_info.major}.{sys.version_info.minor}")')
    - PYTHON_VERSION=${pyver} PYTAG=cpython3 pyext_PATTERN="%s.so" PYTHON_LDFLAGS='-lpthread -ldl' ./waf configure --disable-doc --disable-manpage --disable-nts --cross-compiler=arm-linux-gnueabihf-gcc --cross-cflags "-I/usr/include/ -I/usr/include/python${pyver}" --cross-ldflags '-L/usr/libhf' --pythondir=/usr/libhf/python${pyver}/dist-packages --pythonarchdir=/usr/libhf/python${pyver}/dist-packages build --enable-pylib=ffi
    - PYTHON_VERSION=${pyver} PYTAG=cpython3 pyext_PATTERN="%s.so" PYTHON_LDFLAGS='-lpthread -ldl' ./waf configure --disable-doc --disable-manpage --disable-nts --cross-compiler=arm-linux-gnueabihf-gcc --cross-cflags "-I/usr/include/ -I/usr/include/python${pyver}" --cross-ldflags '-L/usr/libhf' --pythondir=/usr/libhf/python${pyver}/dist-packages --pythonarchdir=/usr/libhf/python${pyver}/dist-packages build --enable-pylib=ext
  tags:

gentoo-basic:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/gentoo
  script:
    - python ./waf configure --disable-doc --disable-manpage build
    - DESTDIR=build/prison python ./waf install
    - DESTDIR=./prison python ./waf install
    - DESTDIR=../prison python ./waf install
    - python ./waf install
    - python ./waf uninstall
    - rm -rvf build/prison ./prison ../prison

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

coverity-scan:
  image: $CI_REGISTRY/ntpsec/ntpsec/coverity
  script:
    - curl -o /tmp/cov-analysis-linux64.tgz --form project=ntpsec --form token="${COVERITY_TOKEN}" https://scan.coverity.com/download/linux64
    - tar zxf /tmp/cov-analysis-linux64.tgz
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all
    - cov-analysis-linux64-*/bin/cov-build --dir cov-int python3 ./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:
    - gitlab-org
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_PROJECT_PATH == "NTPsec/ntpsec"'

macos-basic:
  <<: *job_definition
  image: macos-12-xcode-14
  script:
    - PKG_CONFIG_PATH=${HOMEBREW_PREFIX}/opt/openssl/lib/pkgconfig python ./waf configure --disable-doc --disable-manpage build --pyshebang "/usr/bin/env python3"
    - DESTDIR=build/prison python ./waf install
    - DESTDIR=./prison python ./waf install
    - DESTDIR=../prison python ./waf install
    - sudo python ./waf install
    - sudo python ./waf uninstall
    - rm -rvf build/prison ./prison ../prison
  tags:
    - saas-macos-medium-m1
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_PROJECT_PATH == "NTPsec/ntpsec"'

macos-refclocks:
  <<: *job_definition
  image: macos-12-xcode-14
  script:
    - PKG_CONFIG_PATH=${HOMEBREW_PREFIX}/opt/openssl/lib/pkgconfig python ./waf configure --disable-doc --disable-manpage --refclock=all build || cat build/config.log
  tags:
    - saas-macos-medium-m1
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_PROJECT_PATH == "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-disable-debug-gdb:
  <<: *job_definition
  image: $CI_REGISTRY/ntpsec/ntpsec/alpine
  script:
    - python3 ./waf configure --disable-doc --disable-manpage --refclock=all --disable-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
