+## 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
+
variables:
DEBIAN_FRONTEND: noninteractive
LC_ALL: C.UTF-8
- test
- release
+## Docker Image Rules
+#
+# 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.
+
.docker: &docker_build
stage: image
script:
IMG_NAME: "docbuilder"
<<: *docker_build
-docker-debian-9-amd64:
+docker-centos-7-amd64:
variables:
- IMG_NAME: "debian-9-amd64"
+ IMG_NAME: "centos-7-amd64"
<<: *docker_build
-docker-debian-9-i386:
+docker-centos-8-amd64:
variables:
- IMG_NAME: "debian-9-i386"
+ IMG_NAME: "centos-8-amd64"
<<: *docker_build
docker-debian-10-amd64:
IMG_NAME: "fedora-41-amd64"
<<: *docker_build
-docker-centos-7-amd64:
- variables:
- IMG_NAME: "centos-7-amd64"
- <<: *docker_build
+#planned release 4/2025
+# docker-fedora-42-amd64:
+# variables:
+# IMG_NAME: "fedora-42-amd64"
+# <<: *docker_build
-docker-centos-8-amd64:
+docker-opensuse-15.0-amd64:
variables:
- IMG_NAME: "centos-8-amd64"
+ IMG_NAME: "opensuse-15.0-amd64"
<<: *docker_build
-docker-ubuntu-16_04-amd64:
+docker-opensuse-15.1-amd64:
variables:
- IMG_NAME: "ubuntu-16.04-amd64"
+ IMG_NAME: "opensuse-15.1-amd64"
<<: *docker_build
-docker-ubuntu-18_04-amd64:
+docker-opensuse-15.2-amd64:
variables:
- IMG_NAME: "ubuntu-18.04-amd64"
+ IMG_NAME: "opensuse-15.2-amd64"
<<: *docker_build
-docker-ubuntu-20_04-amd64:
+docker-opensuse-15.3-amd64:
variables:
- IMG_NAME: "ubuntu-20.04-amd64"
+ IMG_NAME: "opensuse-15.3-amd64"
<<: *docker_build
-docker-ubuntu-22_04-amd64:
+docker-opensuse-15.4-amd64:
variables:
- IMG_NAME: "ubuntu-22.04-amd64"
+ IMG_NAME: "opensuse-15.4-amd64"
<<: *docker_build
-docker-ubuntu-24_04-amd64:
+docker-opensuse-15.5-amd64:
variables:
- IMG_NAME: "ubuntu-24.04-amd64"
+ IMG_NAME: "opensuse-15.5-amd64"
<<: *docker_build
-docker-ubuntu-24_10-amd64:
+docker-ubuntu-18_04-amd64:
variables:
- IMG_NAME: "ubuntu-24.10-amd64"
+ IMG_NAME: "ubuntu-18.04-amd64"
<<: *docker_build
-docker-opensuse-15.0-amd64:
+docker-ubuntu-20_04-amd64:
variables:
- IMG_NAME: "opensuse-15.0-amd64"
+ IMG_NAME: "ubuntu-20.04-amd64"
<<: *docker_build
-docker-opensuse-15.1-amd64:
+docker-ubuntu-22_04-amd64:
variables:
- IMG_NAME: "opensuse-15.1-amd64"
+ IMG_NAME: "ubuntu-22.04-amd64"
<<: *docker_build
-docker-opensuse-15.2-amd64:
+docker-ubuntu-24_04-amd64:
variables:
- IMG_NAME: "opensuse-15.2-amd64"
+ IMG_NAME: "ubuntu-24.04-amd64"
<<: *docker_build
-docker-opensuse-15.3-amd64:
+docker-ubuntu-24_10-amd64:
variables:
- IMG_NAME: "opensuse-15.3-amd64"
+ IMG_NAME: "ubuntu-24.10-amd64"
<<: *docker_build
+## Build stage
+#
+# Now we compile and run unit tests ... in every single distribution.
+# Every task needs its docker, see above.
.build: &build-base
stage: build
# Build docs when tools are available
- if which linuxdoc pdflatex sgmlsasp >/dev/null ; then $MAKE docs ; fi
+# A special task for preparing the release archives
build-release:
image: registry.nic.cz/labs/bird:docbuilder
stage: build
- make obj/doc/bird-singlepage.html
- BRANCH=$CI_COMMIT_BRANCH tools/make-archive
artifacts:
- paths:
+ paths:
- obj/doc/bird-singlepage.html
- bird-*.tar.gz
expire_in: 1 day
- linux
- amd64
-build-debian-9-amd64:
+build-centos-7-amd64:
<<: *build-linux
- image: registry.nic.cz/labs/bird:debian-9-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-debian-9-i386:
+build-centos-8-amd64:
<<: *build-linux
- image: registry.nic.cz/labs/bird:debian-9-i386
+ image: registry.nic.cz/labs/bird:centos-8-amd64
build-debian-10-amd64:
<<: *build-linux
<<: *build-linux
image: registry.nic.cz/labs/bird:fedora-41-amd64
-build-centos-7-amd64:
+#planned release 4/2025
+# build-fedora-42-amd64:
+# <<: *build-linux
+# image: registry.nic.cz/labs/bird:fedora-42-amd64
+
+build-opensuse-15.0-amd64:
<<: *build-linux
- 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
+ image: registry.nic.cz/labs/bird:opensuse-15.0-amd64
-build-centos-8-amd64:
+build-opensuse-15.1-amd64:
<<: *build-linux
- image: registry.nic.cz/labs/bird:centos-8-amd64
+ 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-ubuntu-16_04-amd64:
+build-opensuse-15.5-amd64:
<<: *build-linux
- image: registry.nic.cz/labs/bird:ubuntu-16.04-amd64
+ image: registry.nic.cz/labs/bird:opensuse-15.5-amd64
build-ubuntu-18_04-amd64:
<<: *build-linux
<<: *build-linux
image: registry.nic.cz/labs/bird:ubuntu-24.10-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-freebsd-11-amd64:
-# <<: *build-base
-# tags:
-# - freebsd
-# - amd64
-
-#build-freebsd-11-i386:
-# <<: *build-base
-# tags:
-# - freebsd
-# - i386
-
+# Testing builds for just a single protocol each time
.build-only: &build-only
<<: *build-linux
- image: registry.nic.cz/labs/bird:debian-11-amd64
+ image: registry.nic.cz/labs/bird:debian-12-amd64
build-only-aggregator:
<<: *build-only
variables:
CONFIGURE_OPTIONS: --with-protocols=static
+# 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
stage: pkg
# 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
- - pip3 install beautifulsoup4==4.11.2
+ # 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
paths:
- pkg/pkgs/*
+pkg-centos-7-amd64:
+ <<: *pkg-rpm-wa
+ 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]
+ image: registry.nic.cz/labs/bird:centos-8-amd64
+
pkg-debian-10-amd64:
<<: *pkg-deb
needs: [build-debian-10-amd64]
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-fedora-32-amd64:
<<: *pkg-rpm-wa
needs: [build-fedora-32-amd64]
needs: [build-fedora-41-amd64]
image: registry.nic.cz/labs/bird:fedora-41-amd64
-pkg-centos-7-amd64:
+#planned release 4/2025
+# pkg-fedora-42-amd64:
+# <<: *pkg-rpm
+# 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-opensuse-15.1-amd64:
+ <<: *pkg-rpm-wa
+ needs: [build-opensuse-15.1-amd64]
+ image: registry.nic.cz/labs/bird:opensuse-15.1-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-opensuse-15.3-amd64:
<<: *pkg-rpm-wa
- 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
+ needs: [build-opensuse-15.3-amd64]
+ image: registry.nic.cz/labs/bird:opensuse-15.3-amd64
-pkg-centos-8-amd64:
+pkg-opensuse-15.4-amd64:
<<: *pkg-rpm-wa
- needs: [build-centos-8-amd64]
- image: registry.nic.cz/labs/bird:centos-8-amd64
+ needs: [build-opensuse-15.4-amd64]
+ image: registry.nic.cz/labs/bird:opensuse-15.4-amd64
+
+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-ubuntu-18.04-amd64:
<<: *pkg-deb-legacy
needs: [build-ubuntu-24_10-amd64]
image: registry.nic.cz/labs/bird:ubuntu-24.10-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-opensuse-15.2-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.2-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.2-amd64
-
-pkg-opensuse-15.3-amd64:
- <<: *pkg-rpm-wa
- needs: [build-opensuse-15.3-amd64]
- image: registry.nic.cz/labs/bird:opensuse-15.3-amd64
-
-
build-netlab:
stage: build
- variables:
- BDIR: build-netlab
tags:
- netlab
- amd64
script:
+ - DIR=$(pwd)
- autoreconf
- - mkdir $BDIR
- - cd $BDIR
- - ../configure
+ - ./configure
- BRANCH=$CI_COMMIT_BRANCH make
- artifacts:
- paths:
- - $BDIR/bird
- - $BDIR/birdc
- expire_in: 2 hours
+ - cd $TOOLS_DIR
+ - sudo git clean -fx
+ - git pull --ff-only
+ - mv $DIR/bird $DIR/birdc netlab/common
+ - ln -s $STAYRTR_BINARY netlab/common/stayrtr
.test: &test-base
stage: test
- 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
+ - cd $TOOLS_DIR/netlab
- sudo ./stop
- sudo ./runtest -s v2 -m check $TEST_NAME
- gmake
- gmake check
-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
-
+# There is no docker for BSD's, these are proper virtuals in QEMU.
build-birdlab-freebsd-13:
<<: *build-birdlab-base
tags:
- birdlab-openbsd-71
- amd64
-confirm-release:
+# 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"