-## TODO: find out how to generate this file by another yaml file.
-## Gitlab can do it but it is a stupid idea to mess with this
-## when releasing 4 versions at once. See ya later!
-## -- Maria, April 2025
+###########################################################
+##### #####
+##### DO NOT EDIT THIS FILE BY HAND #####
+##### #####
+###########################################################
+##### #####
+##### This file is autogenerated from misc/gitlab/. #####
+##### Edit those files and run `make gitlab` instead. #####
+##### #####
+###########################################################
variables:
DEBIAN_FRONTEND: noninteractive
- build
- pkg
- test
- - release
## Common rules
# Ignore WIP commits
-.never_wip: &never_wip
+.never-wip: &never-wip
if: $CI_COMMIT_MESSAGE =~ /^(fixup! )*WIP/
when: never
# Run for stable branches
-.if_stable: &if_stable
+.if-stable: &if-stable
if: $CI_COMMIT_BRANCH =~ /^(stable-.*|thread-next|master)$/
when: always
script:
- tools/git-check-commits
rules:
- - *if_stable
+ - *if-stable
- when: never
-## Docker Image Rules
-#
+## Default test job rules
+.test-job: &test-job
+ rules:
+ - *never-wip
+ - when: always
+
+############################
+## Docker builder rebuild ##
+############################
# We are running all the build / packaging tests in Dockers (unless otherwise)
# and these are rules to build these docker images. These are expensive to run
# and should run only if needed.
+#
+# Modify the appropriate dockerfile to rebuild these images
-.docker: &docker_build
+.docker: &docker-build
stage: image
script:
- $DOCKER_CMD login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.nic.cz
# That's Docker in Docker
- dind
rules:
- - *never_wip
+ # Never rebuild for WIP commits
+ - *never-wip
# Never rebuild for tags
- if: '$CI_COMMIT_TAG'
when: never
# Do any change in Dockerfile (e.g. change a comment) to rebuild the image
+ # FIXME: This probably belongs to bird-tools instead, we may end up with
+ # screwed up docker repository in case of colliding image updates
- changes:
- misc/docker/$IMG_NAME/Dockerfile
when: always
- when: never
+
docker-docbuilder:
variables:
IMG_NAME: "docbuilder"
- <<: *docker_build
+ <<: *docker-build
docker-centos-7-amd64:
variables:
IMG_NAME: "centos-7-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-centos-8-amd64:
variables:
IMG_NAME: "centos-8-amd64"
- <<: *docker_build
-
-docker-debian-10-amd64:
- variables:
- IMG_NAME: "debian-10-amd64"
- <<: *docker_build
-
-docker-debian-10-i386:
- variables:
- IMG_NAME: "debian-10-i386"
- <<: *docker_build
+ <<: *docker-build
-docker-debian-11-amd64:
+docker-fedora-32-amd64:
variables:
- IMG_NAME: "debian-11-amd64"
- <<: *docker_build
+ IMG_NAME: "fedora-32-amd64"
+ <<: *docker-build
-docker-debian-11-i386:
+docker-fedora-33-amd64:
variables:
- IMG_NAME: "debian-11-i386"
- <<: *docker_build
+ IMG_NAME: "fedora-33-amd64"
+ <<: *docker-build
-docker-debian-12-amd64:
+docker-opensuse-15.0-amd64:
variables:
- IMG_NAME: "debian-12-amd64"
- <<: *docker_build
+ IMG_NAME: "opensuse-15.0-amd64"
+ <<: *docker-build
-docker-debian-12-i386:
+docker-opensuse-15.1-amd64:
variables:
- IMG_NAME: "debian-12-i386"
- <<: *docker_build
+ IMG_NAME: "opensuse-15.1-amd64"
+ <<: *docker-build
-docker-debian-testing-amd64:
+docker-opensuse-15.2-amd64:
variables:
- IMG_NAME: "debian-testing-amd64"
- <<: *docker_build
+ IMG_NAME: "opensuse-15.2-amd64"
+ <<: *docker-build
-docker-debian-testing-i386:
+docker-opensuse-15.3-amd64:
variables:
- IMG_NAME: "debian-testing-i386"
- <<: *docker_build
+ IMG_NAME: "opensuse-15.3-amd64"
+ <<: *docker-build
-docker-fedora-32-amd64:
+docker-opensuse-15.4-amd64:
variables:
- IMG_NAME: "fedora-32-amd64"
- <<: *docker_build
+ IMG_NAME: "opensuse-15.4-amd64"
+ <<: *docker-build
-docker-fedora-33-amd64:
+docker-opensuse-15.5-amd64:
variables:
- IMG_NAME: "fedora-33-amd64"
- <<: *docker_build
+ IMG_NAME: "opensuse-15.5-amd64"
+ <<: *docker-build
docker-fedora-34-amd64:
variables:
IMG_NAME: "fedora-34-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-35-amd64:
variables:
IMG_NAME: "fedora-35-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-36-amd64:
variables:
IMG_NAME: "fedora-36-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-37-amd64:
variables:
IMG_NAME: "fedora-37-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-38-amd64:
variables:
IMG_NAME: "fedora-38-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-39-amd64:
variables:
IMG_NAME: "fedora-39-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-40-amd64:
variables:
IMG_NAME: "fedora-40-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-41-amd64:
variables:
IMG_NAME: "fedora-41-amd64"
- <<: *docker_build
+ <<: *docker-build
docker-fedora-42-amd64:
variables:
IMG_NAME: "fedora-42-amd64"
- <<: *docker_build
+ <<: *docker-build
-docker-opensuse-15.0-amd64:
+docker-ubuntu-18.04-amd64:
variables:
- IMG_NAME: "opensuse-15.0-amd64"
- <<: *docker_build
+ IMG_NAME: "ubuntu-18.04-amd64"
+ <<: *docker-build
-docker-opensuse-15.1-amd64:
+docker-debian-10-amd64:
variables:
- IMG_NAME: "opensuse-15.1-amd64"
- <<: *docker_build
+ IMG_NAME: "debian-10-amd64"
+ <<: *docker-build
-docker-opensuse-15.2-amd64:
+docker-debian-10-i386:
variables:
- IMG_NAME: "opensuse-15.2-amd64"
- <<: *docker_build
+ IMG_NAME: "debian-10-i386"
+ <<: *docker-build
-docker-opensuse-15.3-amd64:
+docker-debian-11-amd64:
variables:
- IMG_NAME: "opensuse-15.3-amd64"
- <<: *docker_build
+ IMG_NAME: "debian-11-amd64"
+ <<: *docker-build
-docker-opensuse-15.4-amd64:
+docker-debian-11-i386:
variables:
- IMG_NAME: "opensuse-15.4-amd64"
- <<: *docker_build
+ IMG_NAME: "debian-11-i386"
+ <<: *docker-build
-docker-opensuse-15.5-amd64:
+docker-debian-12-amd64:
variables:
- IMG_NAME: "opensuse-15.5-amd64"
- <<: *docker_build
+ IMG_NAME: "debian-12-amd64"
+ <<: *docker-build
-docker-ubuntu-18_04-amd64:
+docker-debian-12-i386:
variables:
- IMG_NAME: "ubuntu-18.04-amd64"
- <<: *docker_build
+ IMG_NAME: "debian-12-i386"
+ <<: *docker-build
+
+docker-debian-testing-amd64:
+ variables:
+ IMG_NAME: "debian-testing-amd64"
+ <<: *docker-build
+
+docker-debian-testing-i386:
+ variables:
+ IMG_NAME: "debian-testing-i386"
+ <<: *docker-build
-docker-ubuntu-20_04-amd64:
+docker-ubuntu-20.04-amd64:
variables:
IMG_NAME: "ubuntu-20.04-amd64"
- <<: *docker_build
+ <<: *docker-build
-docker-ubuntu-22_04-amd64:
+docker-ubuntu-22.04-amd64:
variables:
IMG_NAME: "ubuntu-22.04-amd64"
- <<: *docker_build
+ <<: *docker-build
-docker-ubuntu-24_04-amd64:
+docker-ubuntu-24.04-amd64:
variables:
IMG_NAME: "ubuntu-24.04-amd64"
- <<: *docker_build
+ <<: *docker-build
-docker-ubuntu-24_10-amd64:
+docker-ubuntu-24.10-amd64:
variables:
IMG_NAME: "ubuntu-24.10-amd64"
- <<: *docker_build
+ <<: *docker-build
+
+
+#####################################################
+## Linux distro build tests inside Docker builders ##
+#####################################################
## Build stage
#
# Every task needs its docker, see above.
.build: &build-base
+ <<: *test-job
stage: build
script:
- - autoreconf
- - ./configure CPPFLAGS="$CPPFLAGS" LDFLAGS="$LDFLAGS" $CONFIGURE_OPTIONS
- # Detect which make is available
- - MAKE=make
- - which gmake 2>/dev/null >/dev/null && MAKE=gmake
- - BRANCH=$CI_COMMIT_BRANCH $MAKE
- - $MAKE check
- # Build docs when tools are available
- - if which linuxdoc pdflatex sgmlsasp >/dev/null ; then $MAKE docs ; fi
- rules:
- - *never_wip
- - when: always
-
-# A special task for preparing the release archives
-build-release:
- image: registry.nic.cz/labs/bird:docbuilder
- stage: build
- tags:
- - docker
- - linux
- script:
+ - export BRANCH=$CI_COMMIT_BRANCH
- autoreconf
- - ./configure --with-protocols= --disable-client
- - make obj/doc/bird-singlepage.html
- - BRANCH=$CI_COMMIT_BRANCH tools/make-archive
- artifacts:
- paths:
- - obj/doc/bird-singlepage.html
- - bird-*.tar.gz
- expire_in: 1 day
- rules:
- - *never_wip
- - when: always
-
-.build-linux: &build-linux
+ - ./configure CPPFLAGS="$CPPFLAGS" LDFLAGS="$LDFLAGS" $CONFIGURE_OPTIONS
+ # Detect which make is available
+ - MAKE=make
+ - which gmake 2>/dev/null >/dev/null && MAKE=gmake
+ - $MAKE
+ - $MAKE check
+ # Build docs when tools are available
+ - if which linuxdoc pdflatex sgmlsasp >/dev/null ; then $MAKE docs ; fi
+
+.build-docker-linux-amd64: &build-docker-linux-amd64
<<: *build-base
tags:
- docker
- linux
- amd64
+
build-centos-7-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-centos-7-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:centos-7-amd64
variables:
- # export path to devtoolset-8-gcc
CC: /opt/rh/devtoolset-8/root/usr/bin/gcc
LC_ALL: en_US.UTF-8
- image: registry.nic.cz/labs/bird:centos-7-amd64
build-centos-8-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-centos-8-amd64
+ optional: true
image: registry.nic.cz/labs/bird:centos-8-amd64
-build-debian-10-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-10-amd64
-
-build-debian-10-i386:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-10-i386
-
-build-debian-11-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-11-amd64
+build-fedora-32-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-32-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:fedora-32-amd64
-build-debian-11-i386:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-11-i386
+build-fedora-33-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-33-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:fedora-33-amd64
-build-debian-12-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-12-amd64
+build-opensuse-15.0-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-opensuse-15.0-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:opensuse-15.0-amd64
-build-debian-12-i386:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-12-i386
+build-opensuse-15.1-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-opensuse-15.1-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:opensuse-15.1-amd64
-build-debian-testing-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-testing-amd64
+build-opensuse-15.2-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-opensuse-15.2-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:opensuse-15.2-amd64
-build-debian-testing-i386:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:debian-testing-i386
+build-opensuse-15.3-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-opensuse-15.3-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:opensuse-15.3-amd64
-build-fedora-32-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:fedora-32-amd64
+build-opensuse-15.4-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-opensuse-15.4-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:opensuse-15.4-amd64
-build-fedora-33-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:fedora-33-amd64
+build-opensuse-15.5-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-opensuse-15.5-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:opensuse-15.5-amd64
build-fedora-34-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-34-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-34-amd64
build-fedora-35-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-35-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-35-amd64
build-fedora-36-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-36-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-36-amd64
build-fedora-37-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-37-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-37-amd64
build-fedora-38-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-38-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-38-amd64
build-fedora-39-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-39-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-39-amd64
build-fedora-40-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-40-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-40-amd64
build-fedora-41-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-41-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-41-amd64
build-fedora-42-amd64:
- <<: *build-linux
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-fedora-42-amd64
+ optional: true
image: registry.nic.cz/labs/bird:fedora-42-amd64
-build-opensuse-15.0-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:opensuse-15.0-amd64
-
-build-opensuse-15.1-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:opensuse-15.1-amd64
-
-build-opensuse-15.2-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:opensuse-15.2-amd64
-
-build-opensuse-15.3-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:opensuse-15.3-amd64
-
-build-opensuse-15.4-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:opensuse-15.4-amd64
-
-build-opensuse-15.5-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:opensuse-15.5-amd64
-
-build-ubuntu-18_04-amd64:
- <<: *build-linux
+build-ubuntu-18.04-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-ubuntu-18.04-amd64
+ optional: true
image: registry.nic.cz/labs/bird:ubuntu-18.04-amd64
-build-ubuntu-20_04-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:ubuntu-20.04-amd64
-
-build-ubuntu-22_04-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:ubuntu-22.04-amd64
+build-debian-10-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-10-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:debian-10-amd64
-build-ubuntu-24_04-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:ubuntu-24.04-amd64
+build-debian-10-i386:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-10-i386
+ optional: true
+ image: registry.nic.cz/labs/bird:debian-10-i386
-build-ubuntu-24_10-amd64:
- <<: *build-linux
- image: registry.nic.cz/labs/bird:ubuntu-24.10-amd64
+build-debian-11-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-11-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:debian-11-amd64
-# Testing builds for just a single protocol each time
+build-debian-11-i386:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-11-i386
+ optional: true
+ image: registry.nic.cz/labs/bird:debian-11-i386
-.build-only: &build-only
- <<: *build-linux
+build-debian-12-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-12-amd64
+ optional: true
image: registry.nic.cz/labs/bird:debian-12-amd64
-build-only-aggregator:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=aggregator
-
-build-only-babel:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=babel
-
-build-only-bfd:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=bfd
-
-build-only-bgp:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=bgp
-
-build-only-bgp-bmp:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=bgp,bmp
+build-debian-12-i386:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-12-i386
+ optional: true
+ image: registry.nic.cz/labs/bird:debian-12-i386
-build-only-l3vpn:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=l3vpn
+build-debian-testing-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-testing-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:debian-testing-amd64
-build-only-mrt:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=mrt
+build-debian-testing-i386:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-debian-testing-i386
+ optional: true
+ image: registry.nic.cz/labs/bird:debian-testing-i386
-build-only-ospf:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=ospf
+build-ubuntu-20.04-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-ubuntu-20.04-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:ubuntu-20.04-amd64
-build-only-pipe:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=pipe
+build-ubuntu-22.04-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-ubuntu-22.04-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:ubuntu-22.04-amd64
-build-only-radv:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=radv
+build-ubuntu-24.04-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-ubuntu-24.04-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:ubuntu-24.04-amd64
-build-only-rip:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=rip
+build-ubuntu-24.10-amd64:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-ubuntu-24.10-amd64
+ optional: true
+ image: registry.nic.cz/labs/bird:ubuntu-24.10-amd64
-build-only-rpki:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=rpki
-build-only-static:
- <<: *build-only
- variables:
- CONFIGURE_OPTIONS: --with-protocols=static
+#######################################################
+## A special task for preparing the release archives ##
+#######################################################
+build-release:
+ <<: *test-job
+ image: registry.nic.cz/labs/bird:docbuilder
+ needs:
+ - job: docker-docbuilder
+ optional: true
+ stage: build
+ tags:
+ - docker
+ - linux
+ script:
+ - export BRANCH=$CI_COMMIT_BRANCH
+ - autoreconf
+ - ./configure --with-protocols= --disable-client
+ - make obj/doc/bird-singlepage.html
+ - tools/make-archive
+ artifacts:
+ paths:
+ - obj/doc/bird-singlepage.html
+ - bird-*.tar.gz
+ expire_in: 1 day
# Packaging rules
# As we support some ancient versions of different distributions,
# We do NOT build separate documentation packages in these rules.
.pkg-deb: &pkg-deb
+ <<: *test-job
stage: pkg
script:
# create venv only if it's installed
artifacts:
paths:
- pkg/pkgs/*
- rules:
- - *never_wip
- - when: always
.pkg-deb-legacy: &pkg-deb-legacy
+ <<: *test-job
stage: pkg
script:
# create venv only if it's installed
artifacts:
paths:
- pkg/pkgs/*
- rules:
- - *never_wip
- - when: always
.pkg-rpm: &pkg-rpm
+ <<: *test-job
stage: pkg
script:
- pip3 install apkg
artifacts:
paths:
- pkg/pkgs/*
- rules:
- - *never_wip
- - when: always
.pkg-rpm-wa: &pkg-rpm-wa
+ <<: *test-job
stage: pkg
script:
- sed -i "s/runstatedir/with-runtimedir/" distro/pkg/rpm/bird.spec
artifacts:
paths:
- pkg/pkgs/*
- rules:
- - *never_wip
- - when: always
+
+
pkg-centos-7-amd64:
<<: *pkg-rpm-wa
+ needs: [ build-centos-7-amd64 ]
+ image: registry.nic.cz/labs/bird:centos-7-amd64
variables:
- # export path to devtoolset-8-gcc
CC: /opt/rh/devtoolset-8/root/usr/bin/gcc
LC_ALL: en_US.UTF-8
- needs: [build-centos-7-amd64]
- image: registry.nic.cz/labs/bird:centos-7-amd64
pkg-centos-8-amd64:
<<: *pkg-rpm-wa
- needs: [build-centos-8-amd64]
+ needs: [ build-centos-8-amd64 ]
image: registry.nic.cz/labs/bird:centos-8-amd64
-pkg-debian-10-amd64:
- <<: *pkg-deb
- needs: [build-debian-10-amd64]
- image: registry.nic.cz/labs/bird:debian-10-amd64
-
-pkg-debian-10-i386:
- <<: *pkg-deb
- needs: [build-debian-10-i386]
- image: registry.nic.cz/labs/bird:debian-10-i386
-
-pkg-debian-11-amd64:
- <<: *pkg-deb
- needs: [build-debian-11-amd64]
- image: registry.nic.cz/labs/bird:debian-11-amd64
+pkg-fedora-32-amd64:
+ <<: *pkg-rpm-wa
+ needs: [ build-fedora-32-amd64 ]
+ image: registry.nic.cz/labs/bird:fedora-32-amd64
-pkg-debian-11-i386:
- <<: *pkg-deb
- needs: [build-debian-11-i386]
- image: registry.nic.cz/labs/bird:debian-11-i386
+pkg-fedora-33-amd64:
+ <<: *pkg-rpm-wa
+ needs: [ build-fedora-33-amd64 ]
+ image: registry.nic.cz/labs/bird:fedora-33-amd64
-pkg-debian-12-amd64:
- <<: *pkg-deb
- needs: [build-debian-12-amd64]
- image: registry.nic.cz/labs/bird:debian-12-amd64
+pkg-opensuse-15.0-amd64:
+ <<: *pkg-rpm-wa
+ needs: [ build-opensuse-15.0-amd64 ]
+ image: registry.nic.cz/labs/bird:opensuse-15.0-amd64
-pkg-debian-12-i386:
- <<: *pkg-deb
- needs: [build-debian-12-i386]
- image: registry.nic.cz/labs/bird:debian-12-i386
+pkg-opensuse-15.1-amd64:
+ <<: *pkg-rpm-wa
+ needs: [ build-opensuse-15.1-amd64 ]
+ image: registry.nic.cz/labs/bird:opensuse-15.1-amd64
-pkg-debian-testing-amd64:
- <<: *pkg-deb
- needs: [build-debian-testing-amd64]
- image: registry.nic.cz/labs/bird:debian-testing-amd64
+pkg-opensuse-15.2-amd64:
+ <<: *pkg-rpm-wa
+ needs: [ build-opensuse-15.2-amd64 ]
+ image: registry.nic.cz/labs/bird:opensuse-15.2-amd64
-pkg-debian-testing-i386:
- <<: *pkg-deb
- needs: [build-debian-testing-i386]
- image: registry.nic.cz/labs/bird:debian-testing-i386
+pkg-opensuse-15.3-amd64:
+ <<: *pkg-rpm-wa
+ needs: [ build-opensuse-15.3-amd64 ]
+ image: registry.nic.cz/labs/bird:opensuse-15.3-amd64
-pkg-fedora-32-amd64:
+pkg-opensuse-15.4-amd64:
<<: *pkg-rpm-wa
- needs: [build-fedora-32-amd64]
- image: registry.nic.cz/labs/bird:fedora-32-amd64
+ needs: [ build-opensuse-15.4-amd64 ]
+ image: registry.nic.cz/labs/bird:opensuse-15.4-amd64
-pkg-fedora-33-amd64:
+pkg-opensuse-15.5-amd64:
<<: *pkg-rpm-wa
- needs: [build-fedora-33-amd64]
- image: registry.nic.cz/labs/bird:fedora-33-amd64
+ needs: [ build-opensuse-15.5-amd64 ]
+ image: registry.nic.cz/labs/bird:opensuse-15.5-amd64
pkg-fedora-34-amd64:
<<: *pkg-rpm
- needs: [build-fedora-34-amd64]
+ needs: [ build-fedora-34-amd64 ]
image: registry.nic.cz/labs/bird:fedora-34-amd64
pkg-fedora-35-amd64:
<<: *pkg-rpm
- needs: [build-fedora-35-amd64]
+ needs: [ build-fedora-35-amd64 ]
image: registry.nic.cz/labs/bird:fedora-35-amd64
pkg-fedora-36-amd64:
<<: *pkg-rpm
- needs: [build-fedora-36-amd64]
+ needs: [ build-fedora-36-amd64 ]
image: registry.nic.cz/labs/bird:fedora-36-amd64
pkg-fedora-37-amd64:
<<: *pkg-rpm
- needs: [build-fedora-37-amd64]
+ needs: [ build-fedora-37-amd64 ]
image: registry.nic.cz/labs/bird:fedora-37-amd64
pkg-fedora-38-amd64:
<<: *pkg-rpm
- needs: [build-fedora-38-amd64]
+ needs: [ build-fedora-38-amd64 ]
image: registry.nic.cz/labs/bird:fedora-38-amd64
pkg-fedora-39-amd64:
<<: *pkg-rpm
- needs: [build-fedora-39-amd64]
+ needs: [ build-fedora-39-amd64 ]
image: registry.nic.cz/labs/bird:fedora-39-amd64
pkg-fedora-40-amd64:
<<: *pkg-rpm
- needs: [build-fedora-40-amd64]
+ needs: [ build-fedora-40-amd64 ]
image: registry.nic.cz/labs/bird:fedora-40-amd64
pkg-fedora-41-amd64:
<<: *pkg-rpm
- needs: [build-fedora-41-amd64]
+ needs: [ build-fedora-41-amd64 ]
image: registry.nic.cz/labs/bird:fedora-41-amd64
pkg-fedora-42-amd64:
<<: *pkg-rpm
- needs: [build-fedora-42-amd64]
+ needs: [ build-fedora-42-amd64 ]
image: registry.nic.cz/labs/bird:fedora-42-amd64
-pkg-opensuse-15.0-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.0-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.0-amd64
+pkg-ubuntu-18.04-amd64:
+ <<: *pkg-deb-legacy
+ needs: [ build-ubuntu-18.04-amd64 ]
+ image: registry.nic.cz/labs/bird:ubuntu-18.04-amd64
-pkg-opensuse-15.1-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.1-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.1-amd64
+pkg-debian-10-amd64:
+ <<: *pkg-deb
+ needs: [ build-debian-10-amd64 ]
+ image: registry.nic.cz/labs/bird:debian-10-amd64
-pkg-opensuse-15.2-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.2-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.2-amd64
+pkg-debian-10-i386:
+ <<: *pkg-deb
+ needs: [ build-debian-10-i386 ]
+ image: registry.nic.cz/labs/bird:debian-10-i386
-pkg-opensuse-15.3-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.3-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.3-amd64
+pkg-debian-11-amd64:
+ <<: *pkg-deb
+ needs: [ build-debian-11-amd64 ]
+ image: registry.nic.cz/labs/bird:debian-11-amd64
-pkg-opensuse-15.4-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.4-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.4-amd64
+pkg-debian-11-i386:
+ <<: *pkg-deb
+ needs: [ build-debian-11-i386 ]
+ image: registry.nic.cz/labs/bird:debian-11-i386
-pkg-opensuse-15.5-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.5-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.5-amd64
+pkg-debian-12-amd64:
+ <<: *pkg-deb
+ needs: [ build-debian-12-amd64 ]
+ image: registry.nic.cz/labs/bird:debian-12-amd64
-pkg-ubuntu-18.04-amd64:
- <<: *pkg-deb-legacy
- needs: [build-ubuntu-18_04-amd64]
- image: registry.nic.cz/labs/bird:ubuntu-18.04-amd64
+pkg-debian-12-i386:
+ <<: *pkg-deb
+ needs: [ build-debian-12-i386 ]
+ image: registry.nic.cz/labs/bird:debian-12-i386
+
+pkg-debian-testing-amd64:
+ <<: *pkg-deb
+ needs: [ build-debian-testing-amd64 ]
+ image: registry.nic.cz/labs/bird:debian-testing-amd64
+
+pkg-debian-testing-i386:
+ <<: *pkg-deb
+ needs: [ build-debian-testing-i386 ]
+ image: registry.nic.cz/labs/bird:debian-testing-i386
pkg-ubuntu-20.04-amd64:
<<: *pkg-deb
- needs: [build-ubuntu-20_04-amd64]
+ needs: [ build-ubuntu-20.04-amd64 ]
image: registry.nic.cz/labs/bird:ubuntu-20.04-amd64
pkg-ubuntu-22.04-amd64:
<<: *pkg-deb
- needs: [build-ubuntu-22_04-amd64]
+ needs: [ build-ubuntu-22.04-amd64 ]
image: registry.nic.cz/labs/bird:ubuntu-22.04-amd64
pkg-ubuntu-24.04-amd64:
<<: *pkg-deb
- needs: [build-ubuntu-24_04-amd64]
+ needs: [ build-ubuntu-24.04-amd64 ]
image: registry.nic.cz/labs/bird:ubuntu-24.04-amd64
pkg-ubuntu-24.10-amd64:
<<: *pkg-deb
- needs: [build-ubuntu-24_10-amd64]
+ needs: [ build-ubuntu-24.10-amd64 ]
image: registry.nic.cz/labs/bird:ubuntu-24.10-amd64
+
+###################################
+## Non-linux build tests in QEMU ##
+###################################
+.build-birdlab-base: &build-birdlab-base
+ <<: *test-job
+ stage: build
+ script:
+ - export BRANCH=$CI_COMMIT_BRANCH
+ - autoreconf
+ - ./configure $CONFIGURE_OPTIONS
+ - gmake
+ - gmake check
+
+
+build-birdlab-openbsd-75:
+ <<: *build-birdlab-base
+ variables:
+ AUTOCONF_VERSION: '2.71'
+ tags:
+ - birdlab-openbsd-75
+ - amd64
+
+build-birdlab-openbsd-76:
+ <<: *build-birdlab-base
+ variables:
+ AUTOCONF_VERSION: '2.72'
+ tags:
+ - birdlab-openbsd-76
+ - amd64
+
+build-birdlab-netbsd-09:
+ <<: *build-birdlab-base
+ tags:
+ - birdlab-netbsd-09
+ - amd64
+
+build-birdlab-netbsd-10:
+ <<: *build-birdlab-base
+ tags:
+ - birdlab-netbsd-10
+ - amd64
+
+build-birdlab-freebsd-13:
+ <<: *build-birdlab-base
+ tags:
+ - birdlab-freebsd-13
+ - amd64
+
+build-birdlab-freebsd-13-netlink:
+ <<: *build-birdlab-base
+ variables:
+ CONFIGURE_OPTIONS: --with-sysconfig=bsd-netlink --disable-client
+ tags:
+ - birdlab-freebsd-13
+ - amd64
+
+build-birdlab-freebsd-14:
+ <<: *build-birdlab-base
+ tags:
+ - birdlab-freebsd-14
+ - amd64
+
+build-birdlab-freebsd-14-netlink:
+ <<: *build-birdlab-base
+ variables:
+ CONFIGURE_OPTIONS: --with-sysconfig=bsd-netlink --disable-client
+ tags:
+ - birdlab-freebsd-14
+ - amd64
+
+
+#########################
+## Partial build tests ##
+#########################
+
+.build-only: &build-only
+ <<: *build-docker-linux-amd64
+ image: registry.nic.cz/labs/bird:debian-12-amd64
+ needs:
+ - job: docker-debian-12-amd64
+ optional: true
+
+
+partial-build-linux-aggregator:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=aggregator
+
+partial-build-linux-babel:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=babel
+
+partial-build-linux-bfd:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=bfd
+
+partial-build-linux-bgp:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=bgp
+
+partial-build-linux-bgp,bmp:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=bgp,bmp
+
+partial-build-linux-l3vpn:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=l3vpn
+
+partial-build-linux-mrt:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=mrt
+
+partial-build-linux-ospf:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=ospf
+
+partial-build-linux-pipe:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=pipe
+
+partial-build-linux-radv:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=radv
+
+partial-build-linux-rip:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=rip
+
+partial-build-linux-rpki:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=rpki
+
+partial-build-linux-static:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols=static
+
+
+################################
+## Netlab functionality tests ##
+################################
+
build-netlab:
+ <<: *test-job
stage: build
variables:
BDIR: build-netlab
- $BDIR/bird
- $BDIR/birdc
expire_in: 2 hours
- rules:
- - *never_wip
- - when: always
-.test: &test-base
+.netlab-test: &test-base
+ <<: *test-job
stage: test
needs: [build-netlab]
tags:
- cd $TOOLS_DIR
- sudo git clean -fx
- git pull --ff-only
- - mv $DIR/build-netlab/* netlab/common/
+ - "mv $DIR/build-netlab/* netlab/common/"
- ln -s $STAYRTR_BINARY netlab/common/stayrtr
- cd netlab
- sudo ./stop
- sudo ./runtest -s v2 -m check $TEST_NAME
- rules:
- - *never_wip
- - when: always
+
test-babel-base:
<<: *test-base
variables:
TEST_NAME: cf-bgp-rs-singletab
+test-ebgp-graceful:
+ <<: *test-base
+ variables:
+ TEST_NAME: cf-ebgp-graceful
+
test-ebgp-loop:
<<: *test-base
variables:
variables:
TEST_NAME: cf-ebgp-role
-test-ebgp-graceful:
- <<: *test-base
- variables:
- TEST_NAME: cf-ebgp-graceful
-
test-ebgp-import-limit:
<<: *test-base
variables:
variables:
TEST_NAME: cf-mpls-bgp-l3vpn
-
-.build-birdlab-base: &build-birdlab-base
- stage: build
- script:
- - autoreconf
- - ./configure $CONFIGURE_OPTIONS
- - gmake
- - gmake check
- rules:
- - *never_wip
- - when: always
-
-# There is no docker for BSD's, these are proper virtuals in QEMU.
-build-birdlab-freebsd-13:
- <<: *build-birdlab-base
- tags:
- - birdlab-freebsd-13
- - amd64
-
-build-birdlab-freebsd-13-netlink:
- <<: *build-birdlab-base
- variables:
- CONFIGURE_OPTIONS: --with-sysconfig=bsd-netlink --disable-client
- tags:
- - birdlab-freebsd-13
- - amd64
-
-build-birdlab-freebsd-14:
- <<: *build-birdlab-base
- tags:
- - birdlab-freebsd-14
- - amd64
-
-build-birdlab-freebsd-14-netlink:
- <<: *build-birdlab-base
- variables:
- CONFIGURE_OPTIONS: --with-sysconfig=bsd-netlink --disable-client
- tags:
- - birdlab-freebsd-14
- - amd64
-
-build-birdlab-openbsd-75:
- <<: *build-birdlab-base
- variables:
- AUTOCONF_VERSION: "2.71"
- tags:
- - birdlab-openbsd-75
- - amd64
-
-build-birdlab-openbsd-76:
- <<: *build-birdlab-base
- variables:
- AUTOCONF_VERSION: "2.72"
- tags:
- - birdlab-openbsd-76
- - amd64
-
-build-birdlab-netbsd-09:
- <<: *build-birdlab-base
- tags:
- - birdlab-netbsd-09
- - amd64
-
-build-birdlab-netbsd-10:
- <<: *build-birdlab-base
- tags:
- - birdlab-netbsd-10
- - amd64
-
-# We have also some virtuals for these but there are working dockers as well
-# so no need to bother again
-#build-birdlab-debian-11:
-# <<: *build-birdlab-base
-# tags:
-# - birdlab-debian-11
-# - amd64
-#
-#build-birdlab-centos-08:
-# <<: *build-birdlab-base
-# tags:
-# - birdlab-centos-08
-# - amd64
-#
-#build-birdlab-fedora-37:
-# <<: *build-birdlab-base
-# tags:
-# - birdlab-fedora-37
-# - amd64
-
-# Release confirmation job for tag pushing. As soon as we finish our web
-# deployment automatic machinery, clicking the button is expected to
-# publish the release info on our website.
-#
-# We are not there yet tho, too many other fish to fry.
-
-publish-release:
- stage: release
- script:
- - "true"
- rules:
- - if: '$CI_COMMIT_TAG'
- when: manual
- - when: never
--- /dev/null
+###########################################################
+##### #####
+##### DO NOT EDIT THIS FILE BY HAND #####
+##### #####
+###########################################################
+##### #####
+##### This file is autogenerated from misc/gitlab/. #####
+##### Edit those files and run `make gitlab` instead. #####
+##### #####
+###########################################################
+
+variables:
+ DEBIAN_FRONTEND: noninteractive
+ LC_ALL: C.UTF-8
+ GIT_STRATEGY: fetch
+ DOCKER_CMD: docker --config="$HOME/.docker/$CI_JOB_ID/"
+ IMG_BASE: registry.nic.cz/labs/bird
+ TOOLS_DIR: /home/gitlab-runner/bird-tools
+ STAYRTR_BINARY: /usr/bin/stayrtr
+
+stages:
+ - consistency
+ - image
+ - build
+ - pkg
+ - test
+
+## Common rules
+# Ignore WIP commits
+.never-wip: &never-wip
+ if: $CI_COMMIT_MESSAGE =~ /^(fixup! )*WIP/
+ when: never
+# Run for stable branches
+.if-stable: &if-stable
+ if: $CI_COMMIT_BRANCH =~ /^(stable-.*|thread-next|master)$/
+ when: always
+
+## Consistency checks for stable branches
+commit-messages:
+ stage: consistency
+ script:
+ - tools/git-check-commits
+ rules:
+ - *if-stable
+ - when: never
+
+## Default test job rules
+.test-job: &test-job
+ rules:
+ - *never-wip
+ - when: always
+
+############################
+## Docker builder rebuild ##
+############################
+# We are running all the build / packaging tests in Dockers (unless otherwise)
+# and these are rules to build these docker images. These are expensive to run
+# and should run only if needed.
+#
+# Modify the appropriate dockerfile to rebuild these images
+
+.docker: &docker-build
+ stage: image
+ script:
+ - $DOCKER_CMD login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.nic.cz
+ # Make sure we refresh the base image if it updates (eg. security updates, etc)
+ # If we do just the build, cache is always reused and the freshness of the
+ # base image is never checked. However, pull always asks and updates the
+ # image only if it changed ‒ therefore, the cache is used unless there's a
+ # change.
+ - $DOCKER_CMD pull `sed -ne 's/^FROM //p' "misc/docker/$IMG_NAME/Dockerfile"`
+ - $DOCKER_CMD build -t "bird:$IMG_NAME" "misc/docker/$IMG_NAME"
+ - $DOCKER_CMD tag "bird:$IMG_NAME" "$IMG_BASE:$IMG_NAME"
+ - $DOCKER_CMD push "$IMG_BASE:$IMG_NAME"
+ after_script:
+ - rm -f "$HOME/.docker/$CI_JOB_ID/" # cleanup the credentials
+ tags:
+ # That's Docker in Docker
+ - dind
+ rules:
+ # Never rebuild for WIP commits
+ - *never-wip
+
+ # Never rebuild for tags
+ - if: '$CI_COMMIT_TAG'
+ when: never
+
+ # Never rebuild for new branches
+ - if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
+ when: never
+
+ # Do any change in Dockerfile (e.g. change a comment) to rebuild the image
+ # FIXME: This probably belongs to bird-tools instead, we may end up with
+ # screwed up docker repository in case of colliding image updates
+ - changes:
+ - misc/docker/$IMG_NAME/Dockerfile
+ when: always
+
+ - when: never
+
+{% for docker in [ { "name": "docbuilder" } ] + distros %}
+docker-{{ docker["name"] }}:
+ variables:
+ IMG_NAME: "{{ docker["name"] }}"
+ <<: *docker-build
+{% endfor %}
+
+#####################################################
+## Linux distro build tests inside Docker builders ##
+#####################################################
+
+## Build stage
+#
+# Now we compile and run unit tests ... in every single distribution.
+# Every task needs its docker, see above.
+
+.build: &build-base
+ <<: *test-job
+ stage: build
+ script:
+ - export BRANCH=$CI_COMMIT_BRANCH
+ - autoreconf
+ - ./configure CPPFLAGS="$CPPFLAGS" LDFLAGS="$LDFLAGS" $CONFIGURE_OPTIONS
+ # Detect which make is available
+ - MAKE=make
+ - which gmake 2>/dev/null >/dev/null && MAKE=gmake
+ - $MAKE
+ - $MAKE check
+ # Build docs when tools are available
+ - if which linuxdoc pdflatex sgmlsasp >/dev/null ; then $MAKE docs ; fi
+
+.build-docker-linux-amd64: &build-docker-linux-amd64
+ <<: *build-base
+ tags:
+ - docker
+ - linux
+ - amd64
+
+{% for dist in distros %}
+build-{{dist["name"]}}:
+ <<: *build-docker-linux-amd64
+ needs:
+ - job: docker-{{ dist["name"] }}
+ optional: true
+ image: registry.nic.cz/labs/bird:{{ dist["name"] }}
+{%- if 'variables' in dist %}
+ variables:
+{{ dist["variables"] | to_yaml | indent(4, true) }}
+{%- endif %}
+{% endfor %}
+
+#######################################################
+## A special task for preparing the release archives ##
+#######################################################
+build-release:
+ <<: *test-job
+ image: registry.nic.cz/labs/bird:docbuilder
+ needs:
+ - job: docker-docbuilder
+ optional: true
+ stage: build
+ tags:
+ - docker
+ - linux
+ script:
+ - export BRANCH=$CI_COMMIT_BRANCH
+ - autoreconf
+ - ./configure --with-protocols= --disable-client
+ - make obj/doc/bird-singlepage.html
+ - tools/make-archive
+ artifacts:
+ paths:
+ - obj/doc/bird-singlepage.html
+ - bird-*.tar.gz
+ expire_in: 1 day
+
+# Packaging rules
+# As we support some ancient versions of different distributions,
+# we need to keep several different machineries. It's not so bad
+# but it's bad nevertheless.
+#
+# We do NOT build separate documentation packages in these rules.
+
+.pkg-deb: &pkg-deb
+ <<: *test-job
+ stage: pkg
+ script:
+ # create venv only if it's installed
+ - if python3 -m venv venv; then . venv/bin/activate; fi
+ - pip3 install apkg
+ - BRANCH=$CI_COMMIT_BRANCH ARCHIVE_DOCS=false apkg build
+ #- apkg install -y pkg/pkgs/*/*/*.deb
+ artifacts:
+ paths:
+ - pkg/pkgs/*
+
+.pkg-deb-legacy: &pkg-deb-legacy
+ <<: *test-job
+ stage: pkg
+ script:
+ # create venv only if it's installed
+ - if python3 -m venv venv; then . venv/bin/activate; fi
+ # install older version of bs4 that does not use python version >= 3.6
+ # apkg depends on bs4, and unless we want to backport python 3.6
+ # to ancient distros, we need to do this workaround
+ - pip3 install beautifulsoup4==4.11.2
+ - pip3 install apkg
+ - BRANCH=$CI_COMMIT_BRANCH ARCHIVE_DOCS=false apkg build
+ #- apkg install -y pkg/pkgs/*/*/*.deb
+ artifacts:
+ paths:
+ - pkg/pkgs/*
+
+.pkg-rpm: &pkg-rpm
+ <<: *test-job
+ stage: pkg
+ script:
+ - pip3 install apkg
+ - BRANCH=$CI_COMMIT_BRANCH ARCHIVE_DOCS=false apkg build
+ #- apkg install -y pkg/pkgs/*/*/*.rpm
+ artifacts:
+ paths:
+ - pkg/pkgs/*
+
+.pkg-rpm-wa: &pkg-rpm-wa
+ <<: *test-job
+ stage: pkg
+ script:
+ - sed -i "s/runstatedir/with-runtimedir/" distro/pkg/rpm/bird.spec
+ # install older version of bs4 that does not use python version >= 3.6
+ - pip3 install beautifulsoup4==4.11.2
+ - pip3 install apkg
+ - BRANCH=$CI_COMMIT_BRANCH ARCHIVE_DOCS=false apkg build
+ #- apkg install -y pkg/pkgs/*/*/*.rpm
+ artifacts:
+ paths:
+ - pkg/pkgs/*
+
+
+{% for dist in distros %}
+pkg-{{ dist["name"] }}:
+ <<: *{{ dist["type"] }}
+ needs: [ build-{{ dist["name"] }} ]
+ image: registry.nic.cz/labs/bird:{{ dist["name"] }}
+{%- if 'variables' in dist %}
+ variables:
+{{ dist["variables"] | to_yaml | indent(4, true) }}
+{%- endif %}
+{% endfor %}
+
+###################################
+## Non-linux build tests in QEMU ##
+###################################
+.build-birdlab-base: &build-birdlab-base
+ <<: *test-job
+ stage: build
+ script:
+ - export BRANCH=$CI_COMMIT_BRANCH
+ - autoreconf
+ - ./configure $CONFIGURE_OPTIONS
+ - gmake
+ - gmake check
+
+{% for test in birdlab %}
+build-birdlab-{{ test['name'] }}:
+ <<: *build-birdlab-base
+{%- if 'variables' in test %}
+ variables:
+{{ test['variables'] | to_yaml | indent(4, true) }}{%- endif %}
+ tags:
+ - birdlab-{{ test['dist'] if 'dist' in test else test['name'] }}
+ - amd64
+{% endfor %}
+
+#########################
+## Partial build tests ##
+#########################
+
+.build-only: &build-only
+ <<: *build-docker-linux-amd64
+ image: registry.nic.cz/labs/bird:{{ partial_build_image["name"] }}
+ needs:
+ - job: docker-{{ partial_build_image["name"] }}
+ optional: true
+
+{% for test in partial_build %}
+partial-build-linux-{{ test["protocols"] }}:
+ <<: *build-only
+ variables:
+ CONFIGURE_OPTIONS: --with-protocols={{ test["protocols"] }}
+{% endfor %}
+
+################################
+## Netlab functionality tests ##
+################################
+
+build-netlab:
+ <<: *test-job
+ stage: build
+ variables:
+ BDIR: build-netlab
+ tags:
+ - netlab
+ - amd64
+ script:
+ - autoreconf
+ - mkdir $BDIR
+ - cd $BDIR
+ - ../configure
+ - BRANCH=$CI_COMMIT_BRANCH make
+ artifacts:
+ paths:
+ - $BDIR/bird
+ - $BDIR/birdc
+ expire_in: 2 hours
+
+.netlab-test: &test-base
+ <<: *test-job
+ stage: test
+ needs: [build-netlab]
+ tags:
+ - netlab
+ - amd64
+ script:
+ - DIR=$(pwd)
+ - cd $TOOLS_DIR
+ - sudo git clean -fx
+ - git pull --ff-only
+ - "mv $DIR/build-netlab/* netlab/common/"
+ - ln -s $STAYRTR_BINARY netlab/common/stayrtr
+ - cd netlab
+ - sudo ./stop
+ - sudo ./runtest -s v2 -m check $TEST_NAME
+
+{% for test in netlab %}
+test-{{ test["name"] }}:
+ <<: *test-base
+ variables:
+ TEST_NAME: cf-{{ test["name"] }}
+{% endfor %}