eid-mw/.gitlab-ci.yml
2023-02-09 13:33:28 +01:00

841 lines
18 KiB
YAML

---
stages:
- docker
- test
- source-package
- binary-package
- validate
- build-repository
- publish
include:
- local: .ci/build-configs.yml
- local: .ci/builds-linux.yml
- local: .ci/builds-windows.yml
- local: .ci/builds-macos.yml
- local: .ci/builds-docker.yml
- template: Security/SAST.gitlab-ci.yml
variables:
LINUX_BASEDIR: .
DOCKER_BASEDIR: .
WINDOWS_BASEDIR: .
MACOS_BASEDIR: .
#######################################
# Stage "docker": build docker images #
#######################################
suse-build-arm:
extends: .docker-base-arm
variables:
IMAGE_NAME: suse-build
only:
changes:
- .ci/dockerfiles/suse-build/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
suse-build-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: suse-build
only:
changes:
- .ci/dockerfiles/suse-build/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
fed-build-arm:
extends: .docker-base-arm
variables:
IMAGE_NAME: fed-build
only:
changes:
- .ci/dockerfiles/fed-build/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
fed-build-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: fed-build
only:
changes:
- .ci/dockerfiles/fed-build/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
deb-build-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: deb-build
only:
changes:
- .ci/dockerfiles/deb-build/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
deb-repro-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: deb-repro
only:
changes:
- .ci/dockerfiles/deb-repro/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
deb-scan-build-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: deb-scan-build
only:
changes:
- .ci/dockerfiles/deb-scan-build/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
deb-sbuild-arm:
extends: .docker-base-arm
variables:
IMAGE_NAME: deb-sbuild
only:
changes:
- .ci/dockerfiles/deb-sbuild/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
deb-sbuild-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: deb-sbuild
only:
changes:
- .ci/dockerfiles/deb-sbuild/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
gtk4-build-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: gtk4-build
only:
changes:
- .ci/dockerfiles/gtk4-build/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
allow_failure: true
deb-testing-x86:
extends: .docker-base-x86
variables:
IMAGE_NAME: deb-testing
only:
changes:
- .ci/dockerfiles/deb-testing/**/*
- .ci/builds-docker.yml
- .ci/build-configs.yml
##########################################################################################################
# Stage "test": run a test battery before doing all the hard work (i.e., try to find any problems ASAP) #
##########################################################################################################
test:distcheck:
stage: test
extends: .distcheck
test:robot:linux:
stage: test
extends: .robot:linux
test:repro:debian:
stage: test
extends: .repro:debian
test:scan-build:
stage: test
extends: .scan-build
test:gcc-analyze:
stage: test
extends: .gcc-analyzer
test:gtk4:
stage: test
extends: .gtk4
test:nogtk:
stage: test
extends: .nogtk
test:nodialogs:
stage: test
extends: .nodialogs
test:coverity:linux:
stage: test
extends: .coverity:linux
#################################################
# Stage "source-package": build source packages #
#################################################
src:srpm:
stage: source-package
extends: .srpm
needs:
- test:distcheck
- test:robot:linux
##############################################################
# Stage "binary-package": build binaries and binary packages #
##############################################################
## Debian-based distributions
.build-deb-arm: &build-deb-arm
extends: .build-deb-base-arm
dependencies:
- test:distcheck
stage: binary-package
needs:
- test:distcheck
- test:robot:linux
.build-deb-x86: &build-deb-x86
extends: .build-deb-base-x86
dependencies:
- test:distcheck
stage: binary-package
needs:
- test:distcheck
- test:robot:linux
build:deb_oldstable_32:
<<: *build-deb-x86
variables:
DIST: debian
CODE: $DEBIAN_OLDSTABLE_CODE
SHORT: deb$DEBIAN_OLDSTABLE_VERSION
ARCH: i386
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_OLDSTABLE_CODE
build:deb_oldstable_arm32:
<<: *build-deb-arm
variables:
DIST: debian
CODE: $DEBIAN_OLDSTABLE_CODE
SHORT: deb$DEBIAN_OLDSTABLE_VERSION
ARCH: armhf
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_OLDSTABLE_CODE
build:deb_oldstable_64:
<<: *build-deb-x86
variables:
DIST: debian
CODE: $DEBIAN_OLDSTABLE_CODE
SHORT: deb$DEBIAN_OLDSTABLE_VERSION
ARCH: amd64
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_OLDSTABLE_CODE
build:deb_oldstable_arm64:
<<: *build-deb-arm
variables:
DIST: debian
CODE: $DEBIAN_OLDSTABLE_CODE
SHORT: deb$DEBIAN_OLDSTABLE_VERSION
ARCH: arm64
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_OLDSTABLE_CODE
build:deb_stable_32:
<<: *build-deb-x86
variables:
DIST: debian
CODE: $DEBIAN_STABLE_CODE
SHORT: deb$DEBIAN_STABLE_VERSION
ARCH: i386
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_STABLE_CODE
build:deb_stable_arm32:
<<: *build-deb-arm
variables:
DIST: debian
CODE: $DEBIAN_STABLE_CODE
SHORT: deb$DEBIAN_STABLE_VERSION
ARCH: armhf
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_STABLE_CODE
build:deb_stable_64:
<<: *build-deb-x86
variables:
DIST: debian
CODE: $DEBIAN_STABLE_CODE
SHORT: deb$DEBIAN_STABLE_VERSION
ARCH: amd64
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_STABLE_CODE
build:deb_stable_arm64:
<<: *build-deb-arm
variables:
DIST: debian
CODE: $DEBIAN_STABLE_CODE
SHORT: deb$DEBIAN_STABLE_VERSION
ARCH: arm64
GIT_STRATEGY: none
only:
variables:
- $DEBIAN_STABLE_CODE
build:sid-32:
<<: *build-deb-x86
variables:
DIST: debian
CODE: sid
SHORT: sid
ARCH: i386
GIT_STRATEGY: none
allow_failure: true
build:sid-arm32:
<<: *build-deb-arm
variables:
DIST: debian
CODE: sid
SHORT: sid
ARCH: armhf
GIT_STRATEGY: none
allow_failure: true
build:sid-64:
<<: *build-deb-x86
variables:
DIST: debian
CODE: sid
SHORT: sid
ARCH: amd64
GIT_STRATEGY: none
allow_failure: true
build:sid-arm64:
<<: *build-deb-arm
variables:
DIST: debian
CODE: sid
SHORT: sid
ARCH: arm64
GIT_STRATEGY: none
allow_failure: true
build:ubuntu_oldlts_32:
<<: *build-deb-x86
variables:
DIST: ubuntu
CODE: $UBUNTU_OLDLTS_CODE
SHORT: u$UBUNTU_OLDLTS_VERSION
ARCH: i386
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_OLDLTS_CODE
build:ubuntu_oldlts_arm32:
<<: *build-deb-arm
variables:
DIST: ubuntu
CODE: $UBUNTU_OLDLTS_CODE
SHORT: u$UBUNTU_OLDLTS_VERSION
ARCH: armhf
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_OLDLTS_CODE
build:ubuntu_oldlts_64:
<<: *build-deb-x86
variables:
DIST: ubuntu
CODE: $UBUNTU_OLDLTS_CODE
SHORT: u$UBUNTU_OLDLTS_VERSION
ARCH: amd64
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_OLDLTS_CODE
build:ubuntu_oldlts_arm64:
<<: *build-deb-arm
variables:
DIST: ubuntu
CODE: $UBUNTU_OLDLTS_CODE
SHORT: u$UBUNTU_OLDLTS_VERSION
ARCH: arm64
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_OLDLTS_CODE
build:ubuntu_lts_32:
<<: *build-deb-x86
variables:
DIST: ubuntu
CODE: $UBUNTU_LTS_CODE
SHORT: u$UBUNTU_LTS_VERSION
ARCH: i386
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_LTS_CODE
build:ubuntu_lts_arm32:
<<: *build-deb-arm
variables:
DIST: ubuntu
CODE: $UBUNTU_LTS_CODE
SHORT: u$UBUNTU_LTS_VERSION
ARCH: armhf
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_LTS_CODE
build:ubuntu_lts_64:
<<: *build-deb-x86
variables:
DIST: ubuntu
CODE: $UBUNTU_LTS_CODE
SHORT: u$UBUNTU_LTS_VERSION
ARCH: amd64
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_LTS_CODE
build:ubuntu_lts_arm64:
<<: *build-deb-arm
variables:
DIST: ubuntu
CODE: $UBUNTU_LTS_CODE
SHORT: u$UBUNTU_LTS_VERSION
ARCH: arm64
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_LTS_CODE
build:ubuntu_stable_32:
<<: *build-deb-x86
variables:
DIST: ubuntu
CODE: $UBUNTU_STABLE_CODE
SHORT: u$UBUNTU_STABLE_VERSION
ARCH: i386
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_STABLE_CODE
build:ubuntu_stable_arm32:
<<: *build-deb-arm
variables:
DIST: ubuntu
CODE: $UBUNTU_STABLE_CODE
SHORT: u$UBUNTU_STABLE_VERSION
ARCH: armhf
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_STABLE_CODE
build:ubuntu_stable_64:
<<: *build-deb-x86
variables:
DIST: ubuntu
CODE: $UBUNTU_STABLE_CODE
SHORT: u$UBUNTU_STABLE_VERSION
ARCH: amd64
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_STABLE_CODE
build:ubuntu_stable_arm64:
<<: *build-deb-arm
variables:
DIST: ubuntu
CODE: $UBUNTU_STABLE_CODE
SHORT: u$UBUNTU_STABLE_VERSION
ARCH: arm64
GIT_STRATEGY: none
only:
variables:
- $UBUNTU_STABLE_CODE
# Fedora-based distributions
.build-fed-arm: &build-fed-arm
extends: .build-fed-base-arm
dependencies:
- src:srpm
stage: binary-package
needs:
- src:srpm
.build-fed-x86: &build-fed-x86
extends: .build-fed-base-x86
dependencies:
- src:srpm
stage: binary-package
needs:
- src:srpm
build:fedora_oldstable_32:
<<: *build-fed-x86
variables:
DIST: fedora
DVER: $FEDORA_OLDSTABLE_VERSION
ARCH: i386
only:
variables:
- $FEDORA_OLDSTABLE_VERSION
build:fedora_oldstable_64:
<<: *build-fed-x86
variables:
DIST: fedora
DVER: $FEDORA_OLDSTABLE_VERSION
ARCH: x86_64
only:
variables:
- $FEDORA_OLDSTABLE_VERSION
build:fedora_oldstable_arm64:
<<: *build-fed-arm
variables:
DIST: fedora
DVER: $FEDORA_OLDSTABLE_VERSION
ARCH: aarch64
only:
variables:
- $FEDORA_OLDSTABLE_VERSION
build:fedora_stable_32:
<<: *build-fed-x86
variables:
DIST: fedora
DVER: $FEDORA_STABLE_VERSION
ARCH: i386
only:
variables:
- $FEDORA_STABLE_VERSION
build:fedora_stable_64:
<<: *build-fed-x86
variables:
DIST: fedora
DVER: $FEDORA_STABLE_VERSION
ARCH: x86_64
only:
variables:
- $FEDORA_STABLE_VERSION
build:fedora_stable_arm64:
<<: *build-fed-arm
variables:
DIST: fedora
DVER: $FEDORA_STABLE_VERSION
ARCH: aarch64
only:
variables:
- $FEDORA_STABLE_VERSION
build:el_oldstable_64:
<<: *build-fed-x86
variables:
DIST: $EL_OLDSTABLE_DIST
DVER: $EL_OLDSTABLE_VERSION
ARCH: x86_64
only:
variables:
- $EL_OLDSTABLE_VERSION
build:el_oldstable_arm64:
<<: *build-fed-arm
variables:
DIST: $EL_OLDSTABLE_DIST
DVER: $EL_OLDSTABLE_VERSION
ARCH: aarch64
only:
variables:
- $EL_OLDSTABLE_VERSION
build:el_stable_64:
<<: *build-fed-x86
variables:
DIST: $EL_STABLE_DIST
DVER: $EL_STABLE_VERSION
ARCH: x86_64
only:
variables:
- $EL_STABLE_VERSION
build:el_stable_arm64:
<<: *build-fed-arm
variables:
DIST: $EL_STABLE_DIST
DVER: $EL_STABLE_VERSION
ARCH: aarch64
only:
variables:
- $EL_STABLE_VERSION
# openSUSE-based distributions
.build-suse-arm: &build-suse-arm
extends: .build-suse-base-arm
dependencies:
- src:srpm
stage: binary-package
needs:
- src:srpm
.build-suse-x86: &build-suse-x86
extends: .build-suse-base-x86
dependencies:
- src:srpm
stage: binary-package
needs:
- src:srpm
build:suse_oldstable:
<<: *build-suse-x86
variables:
DIST: opensuse
DVER: $OPENSUSE_OLDSTABLE_VERSION
ARCH: x86_64
only:
variables:
- $OPENSUSE_OLDSTABLE_VERSION
build:suse_oldstable_arm:
<<: *build-suse-arm
variables:
DIST: opensuse
DVER: $OPENSUSE_OLDSTABLE_VERSION
ARCH: aarch64
only:
variables:
- $OPENSUSE_OLDSTABLE_VERSION
build:suse_stable:
<<: *build-suse-x86
variables:
DIST: opensuse
DVER: $OPENSUSE_STABLE_VERSION
ARCH: x86_64
only:
variables:
- $OPENSUSE_STABLE_VERSION
build:suse_stable_arm:
<<: *build-suse-arm
variables:
DIST: opensuse
DVER: $OPENSUSE_STABLE_VERSION
ARCH: aarch64
only:
variables:
- $OPENSUSE_STABLE_VERSION
# Windows
build:windows:
stage: binary-package
extends: .build-windows
needs:
- test:distcheck
- test:robot:linux
# macOS
build:macos:
stage: binary-package
extends: .build-macos
variables:
EIDMW_SIGN_BUILD: 0
needs:
- test:distcheck
- test:robot:linux
build:freebsd:
stage: binary-package
extends: .build-freebsd-base
allow_failure: true
needs:
- test:distcheck
- test:robot:linux
validate:robot:windows:
stage: validate
extends: .robot:windows
dependencies:
- build:windows
validate:robot:macos:
stage: validate
extends: .robot:macos
dependencies:
- build:macos
#validate:validation:windows:dllinstall:
# stage: validate
# extends: .validation:windows:dllinstall
# dependencies:
# - build:windows
# allow_failure: true
#validate:validation:windows:google:
# stage: validate
# extends: .validation:windows:google
# dependencies:
# - build:windows
# allow_failure: true
#validate:validation:windows:firefox:
# stage: validate
# extends: .validation:windows:firefox
# dependencies:
# - build:windows
# allow_failure: true
#validate:validation:windows:edge:
# stage: validate
# extends: .validation:windows:edge
# dependencies:
# - build:windows
# allow_failure: true
#validate:validation:windows:ie:
# stage: validate
# extends: .validation:windows:ie
# dependencies:
# - build:windows
# allow_failure: true
validate:validation:linux:google:
stage: validate
extends: .validation:linux:google
dependencies:
- build:ubuntu_oldlts_32
- build:ubuntu_oldlts_64
- build:ubuntu_stable_32
- build:ubuntu_stable_64
- build:ubuntu_lts_64
- build:ubuntu_lts_32
validate:validation:linux:firefox:
stage: validate
extends: .validation:linux:firefox
dependencies:
- build:ubuntu_oldlts_32
- build:ubuntu_oldlts_64
- build:ubuntu_stable_32
- build:ubuntu_stable_64
- build:ubuntu_lts_64
- build:ubuntu_lts_32
#Validate:validation:macos:safari:
# stage: validate
# extends: .validation:macos:safari
# dependencies:
# - build:macos
# allow_failure: true
validate:validation:macos:google:
stage: validate
extends: .validation:macos:google
dependencies:
- build:macos
allow_failure: true
validate:reports:translation-status:
stage: validate
extends: .check-translations
####################################################################
# Stage "build-repository": copy binaries into a repository layout #
####################################################################
repo:inject-debs:
dependencies:
- build:deb_oldstable_32
- build:deb_oldstable_arm32
- build:deb_stable_32
- build:deb_stable_arm32
- build:sid-32
- build:sid-arm32
- build:ubuntu_oldlts_32
- build:ubuntu_oldlts_arm32
- build:ubuntu_lts_32
- build:ubuntu_lts_arm32
- build:ubuntu_stable_32
- build:ubuntu_stable_arm32
- build:deb_oldstable_64
- build:deb_oldstable_arm64
- build:deb_stable_64
- build:deb_stable_arm64
- build:sid-64
- build:sid-arm64
- build:ubuntu_oldlts_64
- build:ubuntu_oldlts_arm64
- build:ubuntu_lts_64
- build:ubuntu_lts_arm64
- build:ubuntu_stable_64
- build:ubuntu_stable_arm64
stage: build-repository
extends: .inject-debs
only:
variables:
- $CI_COMMIT_REF_NAME == "master"
- $CI_COMMIT_REF_NAME == $CANDIDATEBRANCH
- $CI_COMMIT_TAG
repo:inject-fed:
only:
variables:
- $CI_COMMIT_REF_NAME == "master"
- $CI_COMMIT_REF_NAME == $CANDIDATEBRANCH
- $CI_COMMIT_TAG
dependencies:
- build:fedora_oldstable_32
- build:fedora_oldstable_64
- build:fedora_oldstable_arm64
- build:fedora_stable_32
- build:fedora_stable_64
- build:fedora_stable_arm64
- build:el_oldstable_64
- build:el_oldstable_arm64
- build:el_stable_64
- build:el_stable_arm64
stage: build-repository
extends: .inject-fed
repo:inject-suse:
only:
variables:
- $CI_COMMIT_REF_NAME == "master"
- $CI_COMMIT_REF_NAME == $CANDIDATEBRANCH
- $CI_COMMIT_TAG
dependencies:
- build:suse_oldstable
- build:suse_oldstable_arm
- build:suse_stable
- build:suse_stable_arm
stage: build-repository
extends: .inject-suse
repo:inject-source:
dependencies:
- test:distcheck
stage: build-repository
extends: .inject-source
# repository rsyncs are staggered:
# - first, rsync without metadata, so that all the new files appear
# - next, rsync without exclusions, so that the metadata files appear
# (but the old files still exist)
# - Finally, rsync with --delete-before, so that the old files are
# removed.
# This should keep the repository consistent while files are being
# updated.
# (theoretically it should be possible to combine the last two steps
# into a single rsync with --delete-after, but it's nice to have
# separate steps for that)
publish:rsync:
stage: publish
tags:
- repobuilder
script:
- scripts/build-aux/cleanup.sh
- rsync -avr --delete-before $DIST_LOC/continuous/ $RSYNC_TARGET_DIST/continuous
- rsync -avr --delete-before $DIST_LOC/releases/ $RSYNC_TARGET_DIST/releases
- rsync -avrLHP --exclude="dists/" --exclude="repomd.xml*" $REPO_LOC $RSYNC_TARGET_FILES
- rsync -avrLHP $REPO_LOC $RSYNC_TARGET_FILES
- rsync -avrLHP --delete-before $REPO_LOC $RSYNC_TARGET_FILES