stages: - build # Build in various conf, keeps the artifacts - test # Use the build artifacts to run the tests - packaging # Publish some packages (rpm, deb…) - external # Interact with some external service (codecov, coverity…) before_script: - uname -a - whoami - mkdir -p build/ - cd build/ # When we extract the artifacts from a previous build, the timestamp of all target are identicall to # the timestamps of the generated source files (like biboumi.h, etc), so Makefile thinks the targets # are not up to date, and everything is rebuilt. We change the modification time of all these files # to be 15 minutes older, to avoid any unnecessary building. - find . \( -name \*.hpp -or -name \*.h -or -name \*.cpp \) -exec touch -r {} -d '-15 minute' {} \; variables: COMPILER: "g++" BUILD_TYPE: "Debug" BOTAN: "-DWITH_BOTAN=1" UDNS: "-DWITH_UDNS=1" SYSTEMD: "-DWITH_SYSTEMD=1" LIBIDN: "-DWITH_LIBIDN=1" LITESQL: "-DWITH_LITESQL=1" # ## Build jobs # .template:basic_build: &basic_build stage: build tags: - docker script: - "echo Running cmake with the following parameters: -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${LITESQL}" - cmake .. -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${LITESQL} - make everything -j$(nproc || echo 1) - make coverage_check -j$(nproc || echo 1) artifacts: expire_in: 8 hours paths: - build/ .template:fedora_build: &fedora_build <<: *basic_build image: docker.louiz.org/biboumi-test-fedora:latest .template:debian_build: &debian_build <<: *basic_build image: docker.louiz.org/biboumi-test-debian:latest .template:alpine_build: &alpine_build variables: SYSTEMD: "-DWITHOUT_SYSTEMD=1" <<: *basic_build image: docker.louiz.org/biboumi-test-alpine:latest build:fedora: <<: *fedora_build build:debian: <<: *debian_build build:alpine: <<: *alpine_build build:1: variables: BOTAN: "-DWITHOUT_BOTAN=1" <<: *fedora_build build:2: variables: UDNS: "-DWITHOUT_UDNS=1" <<: *fedora_build build:3: variables: LITESQL: "-DWITHOUT_LITESQL=1" <<: *fedora_build build:4: variables: LITESQL: "-DWITHOUT_LITESQL=1" BOTAN: "-DWITHOUT_BOTAN=1" LIBIDN: "-DWITHOUT_LIBIDN=1" <<: *fedora_build build:5: variables: LITESQL: "-DWITHOUT_LITESQL=1" UDNS: "-DWITHOUT_UDNS=1" <<: *fedora_build build:6: variables: BOTAN: "-DWITHOUT_BOTAN=1" UDNS: "-DWITHOUT_UDNS=1" <<: *fedora_build build:7: variables: UDNS: "-DWITHOUT_UDNS=1" <<: *fedora_build # ## Test jobs # .template:basic_test: &basic_test stage: test tags: - docker script: - make coverage_e2e -j$(nproc || echo 1) - make coverage artifacts: paths: - build/coverage_test_suite/ - build/coverage_e2e/ - build/coverage_total/ - build/coverage_e2e.info when: always name: $CI_PROJECT_NAME-test-$CI_JOB_ID test:debian: image: docker.louiz.org/biboumi-test-debian:latest <<: *basic_test dependencies: - build:debian test:fedora: image: docker.louiz.org/biboumi-test-fedora:latest <<: *basic_test dependencies: - build:fedora test:without_udns: image: docker.louiz.org/biboumi-test-fedora:latest <<: *basic_test dependencies: - build:7 test:alpine: image: docker.louiz.org/biboumi-test-alpine:latest stage: test tags: - docker script: - make e2e dependencies: - build:alpine test:freebsd: only: - master@louiz/biboumi tags: - freebsd variables: SYSTEMD: "-DWITHOUT_SYSTEMD=1" stage: test script: - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${BOTAN} ${UDNS} ${SYSTEMD} ${LIBIDN} ${LITESQL} - make check - make e2e # ## External jobs # .template:codecov: &codecov stage: external tags: - docker image: docker.louiz.org/biboumi-test-fedora:latest .template:codecov_unittests: &codecov_unittests <<: *codecov script: - bash <(curl -s https://codecov.io/bash) -X gcov -X coveragepy -f ./coverage_test_suite.info -F $(echo $CI_JOB_NAME | sed s/:/_/g) .template:codecov_e2e: &codecov_e2e <<: *codecov script: - bash <(curl -s https://codecov.io/bash) -X gcov -X coveragepy -f ./coverage_e2e.info -F $(echo $CI_JOB_NAME | sed s/:/_/g | sed s/codecov_//) codecov:fedora: <<: *codecov_e2e dependencies: - test:fedora codecov:without_udns: <<: *codecov_e2e dependencies: - test:without_udns codecov:debian: <<: *codecov_e2e dependencies: - test:debian codecov:build:1: <<: *codecov_unittests dependencies: - build:1 codecov:build:2: <<: *codecov_unittests dependencies: - build:2 codecov:build:3: <<: *codecov_unittests dependencies: - build:3 codecov:build:4: <<: *codecov_unittests dependencies: - build:4 codecov:build:5: <<: *codecov_unittests dependencies: - build:5 codecov:build:6: <<: *codecov_unittests dependencies: - build:6 codecov:build:7: <<: *codecov_unittests dependencies: - build:7 coverity: stage: external only: - master@louiz/biboumi tags: - docker image: docker.louiz.org/biboumi-test-fedora:latest allow_failure: true when: manual script: - export PATH=$PATH:~/coverity/bin - cmake .. -DWITHOUT_SYSTEMD=1 - cov-build --dir cov-int make everything -j$(nproc || echo 1) - tar czvf biboumi_coverity.tgz cov-int - curl --form token=$COVERITY_TOKEN --form email=louiz@louiz.org --form file=@biboumi_coverity.tgz --form version="$(git rev-parse --short HEAD)" --form description="Automatic submission by gitlab-ci" https://scan.coverity.com/builds?project=louiz%2Fbiboumi dependencies: [] packaging:rpm: stage: packaging only: - master@louiz/biboumi tags: - docker image: docker.louiz.org/biboumi-test-fedora:latest script: - make rpm -j$(nproc || echo 1) artifacts: paths: - build/rpmbuild/RPMS - build/rpmbuild/SRPMS when: always name: $CI_PROJECT_NAME-rpm-$CI_BUILD_ID dependencies: - build:fedora packaging:deb: stage: packaging only: - master@louiz/biboumi - debian@louiz/biboumi tags: - docker image: docker.louiz.org/packaging-debian:latest before_script: [] script: - git checkout debian - git merge --no-commit --no-ff master - mk-build-deps - apt update -y - apt install -y ./biboumi-build-deps*.deb - debuild -b -us -uc - mv ../*.deb . - mv ../*.build . - mv ../*.buildinfo . dependencies: [] artifacts: untracked: true name: $CI_PROJECT_NAME-deb-$CI_BUILD_ID packaging:archlinux: stage: packaging tags: - docker image: docker.louiz.org/biboumi-test-archlinux:latest before_script: [] script: - sudo pacman -Syuu --noconfirm - git clone https://aur.archlinux.org/litesql-git.git - cd litesql-git - makepkg --noconfirm -s && makepkg -f && sudo pacman --noconfirm -U *.pkg.* - cd .. - git clone https://aur.archlinux.org/biboumi-git.git - cd biboumi-git - makepkg --noconfirm -s && makepkg -f && sudo pacman --noconfirm -U *.pkg.* dependencies: []