mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1016 lines
		
	
	
	
		
			44 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			1016 lines
		
	
	
	
		
			44 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| ---
 | ||
| # Include Salsa-CI as a base
 | ||
| include:
 | ||
|   - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
 | ||
|   - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
 | ||
| 
 | ||
| # Override Salsa-CI with MariaDB specific variations
 | ||
| variables:
 | ||
|   BUILT_PACKAGES: "libmariadb-dev libmariadb-dev-compat libmariadb3
 | ||
|     libmariadbd19t64 libmariadbd-dev mariadb-common mariadb-client-core
 | ||
|     mariadb-client mariadb-server-core mariadb-server mariadb-backup
 | ||
|     mariadb-plugin-connect mariadb-plugin-s3 mariadb-plugin-rocksdb
 | ||
|     mariadb-plugin-oqgraph mariadb-plugin-mroonga mariadb-plugin-spider
 | ||
|     mariadb-plugin-gssapi-server mariadb-plugin-gssapi-client
 | ||
|     mariadb-plugin-cracklib-password-check mariadb-plugin-hashicorp-key-management
 | ||
|     mariadb-plugin-provider-bzip2 mariadb-plugin-provider-lz4
 | ||
|     mariadb-plugin-provider-lzma mariadb-plugin-provider-lzo
 | ||
|     mariadb-plugin-provider-snappy mariadb-test mariadb-test-data"
 | ||
|   DEB_BUILD_OPTIONS: "nocheck noautodbgsym"
 | ||
|   RELEASE: sid
 | ||
|   # Reprotest works, but takes very long time and often fails due to timeouts.
 | ||
|   # Thus is best kept disabled and only occasionally manually enabled to
 | ||
|   # test that reproducibility works, along with atomic reprotest to directly
 | ||
|   # pinpoint what aspect of the build is broken if not reproducible.
 | ||
|   SALSA_CI_DISABLE_REPROTEST: 1
 | ||
|   SALSA_CI_ENABLE_ATOMIC_REPROTEST: 0
 | ||
|   SALSA_CI_DISABLE_MISSING_BREAKS: 0
 | ||
|   SALSA_CI_DISABLE_RC_BUGS: 1
 | ||
|   SALSA_CI_DISABLE_BUILD_PACKAGE_ALL: 1
 | ||
|   SALSA_CI_DISABLE_BUILD_PACKAGE_ANY: 1
 | ||
|   GIT_SUBMODULE_STRATEGY: recursive
 | ||
|   SALSA_CI_GBP_BUILDPACKAGE_ARGS: "--git-submodules" # did not apply to extract-sources
 | ||
| 
 | ||
| # Extend Salsa-CI build jobs to have longer timeout as the default GitLab
 | ||
| # timeout (1h) is often not enough
 | ||
| .build-package:
 | ||
|   timeout: 3h
 | ||
| 
 | ||
| stages:
 | ||
|   - provisioning
 | ||
|   - build
 | ||
|   - test
 | ||
|   - upgrade MariaDB
 | ||
|   - upgrade MariaDB and distro
 | ||
|   - upgrade MariaDB variant
 | ||
|   - test extras
 | ||
|   - publish # Stage referenced by Salsa-CI template aptly stanza, so must exist even though not used
 | ||
| 
 | ||
| 
 | ||
| build autobake:
 | ||
|   extends: .build-package
 | ||
|   stage: build
 | ||
|   script: &autobake-deb-steps
 | ||
|     # Run Salsa-CI .build-before-script equivalent
 | ||
|     - mkdir -p ${WORKING_DIR} ${CCACHE_WORK_DIR}
 | ||
|     - mv ${CCACHE_WORK_DIR} ${CCACHE_TMP_DIR}
 | ||
|     # Run Salsa-CI .build-script equivalent, with extra devscripts so autobake-deb.sh can run 'dch'
 | ||
|     - export CCACHE_DIR=${CCACHE_TMP_DIR}
 | ||
|     - apt-get update && eatmydata apt-get install --no-install-recommends -y ccache fakeroot build-essential devscripts lsb-release
 | ||
|     - cd ${WORKING_DIR}/${SOURCE_DIR}
 | ||
|     - eatmydata apt-get build-dep --no-install-recommends -y .
 | ||
|     - update-ccache-symlinks; ccache -z # Zero out ccache counters
 | ||
|     - while true; do sleep 600; echo "10 minutes passed" >&2; done & # Progress keeper since build is long and silent
 | ||
|     - debian/autobake-deb.sh |& tail -n 10000 # Keep Gitlab-CI output under 4 MB
 | ||
|     - cd ${WORKING_DIR}
 | ||
|     - rm -rf ${WORKING_DIR}/${SOURCE_DIR}
 | ||
|     - du -shc ${WORKING_DIR}/* # Show total file size of artifacts. Must stay are under 100 MB.
 | ||
|     - ccache -s # Show ccache stats to validate it worked
 | ||
|     - mv ${CCACHE_TMP_DIR} ${CCACHE_WORK_DIR}
 | ||
| 
 | ||
| # Buster only has libfmt 6.1 but 7.0 is required, so backport build for Buster
 | ||
| # is not possible unless somebody packages libfmt7-dev for Buster.
 | ||
| 
 | ||
| autopkgtest:
 | ||
|   extends: .test-autopkgtest
 | ||
|   artifacts:
 | ||
|     reports:
 | ||
|       junit: ${WORKING_DIR}/debci/artifacts/mysql-test-run-junit.xml
 | ||
| 
 | ||
| piuparts:
 | ||
|   stage: test extras
 | ||
| 
 | ||
| blhc:
 | ||
|   stage: test extras
 | ||
| 
 | ||
| # In addition to Salsa-CI, also run these fully MariaDB specific build jobs
 | ||
| 
 | ||
| # Define snippets used to construct jobs
 | ||
| 
 | ||
| .test-prepare-container: &test-prepare-container |
 | ||
|   cd ${WORKING_DIR} # Don't repeat this step, it's just cd ./debian/output
 | ||
|   # Enable automatic restarts from maint scripts
 | ||
|   sed -i "s/101/0/g" -i /usr/sbin/policy-rc.d
 | ||
|   # Fake /sbin/runlevel to avoid warnings of "invoke-rc.d: could not determine current runlevel"
 | ||
|   echo -e '#!/bin/sh\necho "N 5"' > /sbin/runlevel; chmod +x /sbin/runlevel
 | ||
|   # Avoid the warnings of "debconf: unable to initialize frontend: Dialog"
 | ||
|   echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
 | ||
|   # Emit non-zero exit code also on warnings
 | ||
|   echo 'APT::Update::Error-Mode "any";' > /etc/apt/apt.conf.d/non-zero-exit-on-warnings
 | ||
|   # Prime the apt cache so later apt commands can run
 | ||
|   apt-get update -qq
 | ||
| 
 | ||
| # Readline was removed from Debian Sid (and Bullseye) in Feb 2021. To be able to install older
 | ||
| # versions of MariaDB that depend on it, fetch and install it from Buster.
 | ||
| .test-install-readline-in-sid-for-backwards-compat: &test-install-readline-in-sid-for-backwards-compat |
 | ||
|   curl -sS -O https://snapshot.debian.org/archive/debian/20190316T031117Z/pool/main/r/readline5/libreadline5_5.2%2Bdfsg-3%2Bb13_amd64.deb
 | ||
|   apt-get -qq install --no-install-recommends --yes ./libreadline5_5.2%2Bdfsg-3%2Bb13_amd64.deb
 | ||
| 
 | ||
| # OpenSSL 1.1 was Debian Sid in Dec 2022 (as Bookworm will ship with OpenSSL 3.0
 | ||
| # only). To be able to install versions of MariaDB that depend on OpenSSL 1.1,
 | ||
| # fetch and install it manually.
 | ||
| .test-install-openssl1-in-sid-for-backwards-compat: &test-install-openssl1-in-sid-for-backwards-compat |
 | ||
|   curl -sS -O https://snapshot.debian.org/archive/debian/20220507T034236Z/pool/main/o/openssl/libssl1.1_1.1.1o-1_amd64.deb
 | ||
|   apt-get -qq install --no-install-recommends --yes ./libssl1.1_1.1.1o-1_amd64.deb
 | ||
| 
 | ||
| # Package libaio1 was replaced by libaio1t64 in Debian Sid in April 2024. To
 | ||
| # continue installing old MariaDB versions that depend on libaio1, use libaio1
 | ||
| # from snapshots.
 | ||
| .test-install-libaio-in-sid-for-backwards-compat: &test-install-libaio-in-sid-for-backwards-compat |
 | ||
|   curl -sS -O https://snapshot.debian.org/archive/debian/20240331T210805Z/pool/main/liba/libaio/libaio1_0.3.113-5_amd64.deb
 | ||
|   apt-get -qq install --no-install-recommends --yes ./libaio1_0.3.113-5_amd64.deb
 | ||
| 
 | ||
| .test-verify-initial: &test-verify-initial |
 | ||
|   dpkg -l | grep -iE 'maria|mysql|galera' || true # List installed
 | ||
|   # MariaDB until 10.5 only had 'mysql', and since only 'mariadb', so try both
 | ||
|   service mysql status || service mariadb status
 | ||
|   mysql --skip-column-names -e "select @@version, @@version_comment" # Show version
 | ||
|   mysql --table -e "SHOW DATABASES;" # List databases before upgrade
 | ||
|   mysql --table -e "SELECT host,user,plugin,authentication_string FROM user;" mysql
 | ||
|   mysql --table -e "SELECT * FROM plugin;" mysql
 | ||
|   mysql --table -e "SHOW PLUGINS;" mysql
 | ||
| 
 | ||
| .test-enable-sid-repos: &test-enable-sid-repos
 | ||
|   # Replace any old repos with just Sid
 | ||
|   - echo 'deb http://deb.debian.org/debian sid main' > /etc/apt/sources.list
 | ||
|   # Upgrade minimal stack first
 | ||
|   - apt-get update -qq
 | ||
|   # Complete upgrade of minimal stack
 | ||
|   - apt-get install -qq --yes apt || export APT_STATUS="failed"
 | ||
|   # Due to https://bugs.debian.org/993755 and #975077 upgrades from Buster or
 | ||
|   # older to Bookworm or newer fails on:
 | ||
|   #   /usr/bin/perl: error while loading shared libraries: libcrypt.so.1: cannot
 | ||
|   #     open shared object file: No such file or directory
 | ||
|   #   dpkg: error processing package libc6:amd64 (--configure):
 | ||
|   # Therefore, run this extra workaround if first run of apt-get install failed:
 | ||
|   - |
 | ||
|     if [ "$APT_STATUS" = "failed" ]
 | ||
|     then
 | ||
|       cd $(mktemp -d) # Use temp dir where apt can download and unpack files
 | ||
|       apt-get -y download libcrypt1
 | ||
|       dpkg-deb -x libcrypt1_*.deb .
 | ||
|       cp -ra usr/lib/* /lib/ || true # libcrypt 1:4.4.36-3+
 | ||
|       cd - # Back to /builds/$USER/mariadb-server/debian/output
 | ||
|       find /lib/*/libcrypt.* -ls # Show that new libcrypt is there
 | ||
|       apt-get -qq --yes --fix-broken install
 | ||
|       apt-get install -qq --yes apt
 | ||
|     fi
 | ||
| 
 | ||
| .test-enable-artifacts-repo: &test-enable-artifacts-repo |
 | ||
|   apt-get install -qq --yes apt-utils
 | ||
|   apt-ftparchive packages . > Packages
 | ||
|   echo "deb [trusted=yes] file:$(pwd) ./" > /etc/apt/sources.list.d/mariadb-local.list
 | ||
|   apt-get update -qq
 | ||
| 
 | ||
| .test-install-all: &test-install-all
 | ||
|   - *test-enable-artifacts-repo
 | ||
|   - apt-get install -qq --simulate ${BUILT_PACKAGES}
 | ||
|   - apt-get install -qq --yes ${BUILT_PACKAGES}
 | ||
|   # Verify installation of MariaDB built in this commit
 | ||
|   - mariadb --version
 | ||
|   - dpkg -l | grep -iE 'maria|mysql|galera'
 | ||
|   - find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
 | ||
|   # Purge old versions if they exist
 | ||
|   - apt-get purge --yes mariadb*10.?
 | ||
|   - find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
 | ||
| 
 | ||
| .test-full-upgrade: &test-full-upgrade
 | ||
|   - *test-enable-artifacts-repo
 | ||
|   - apt-get full-upgrade -qq --simulate
 | ||
|   - apt-get full-upgrade -qq --yes
 | ||
|   # Verify installation of MariaDB built in this commit
 | ||
|   - mariadb --version
 | ||
|   - dpkg -l | grep -iE 'maria|mysql|galera'
 | ||
|   - find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
 | ||
|   # Purge old versions if they exist
 | ||
|   - apt-get purge --yes mariadb*10.?
 | ||
|   - find /etc -name '*mariadb*' -ls -or -name '*mysql*' -ls | sort -k 11
 | ||
|   # Purging the old server might stop the running server, so restart it just in case
 | ||
|   - service mariadb restart
 | ||
| 
 | ||
| .test-install-all-libs: &test-install-all-libs
 | ||
|   - *test-enable-artifacts-repo
 | ||
|   - apt-get install -yq --no-install-recommends libmariadb-dev-compat libmariadbd-dev
 | ||
|   # Installs 31 packages, including:
 | ||
|   # libmariadb3 libmariadb-dev libmariadb-dev-compat libmariadbd19t64 libmariadbd-dev
 | ||
| 
 | ||
| .test-full-upgrade-libs: &test-full-upgrade-libs
 | ||
|   - *test-enable-artifacts-repo
 | ||
|   - apt-get full-upgrade -y
 | ||
|   - dpkg -l | grep -iE 'maria|mysql|galera'
 | ||
|   # library tests don't have the mariadb client nor server, so don't check them
 | ||
| 
 | ||
| .test-verify-final: &test-verify-final |
 | ||
|   dpkg -l | grep -e "mariadb-server.*10\.11"
 | ||
|   mkdir -p debug # Ensure dir exists before using it
 | ||
|   find /var/lib/mysql -ls > debug/var-lib-mysql.list || true # Ignore errors about "no such file or directory"
 | ||
|   cp -ra /etc/mysql debug/etc-mysql
 | ||
|   mariadb --skip-column-names -e "select @@version, @@version_comment" # Show version
 | ||
|   mariadb --table -e "SHOW DATABASES;" # List databases
 | ||
|   mariadb --table -e "SELECT host,user,plugin,authentication_string FROM user;" mysql
 | ||
|   mariadb --table -e "SELECT * FROM plugin;" mysql
 | ||
|   mariadb --table -e "SHOW PLUGINS;" mysql
 | ||
|   # Test that InnoDB works and that command 'mysql' is also still usable
 | ||
|   mysql -e "CREATE DATABASE test; USE test; CREATE TABLE t(a INT PRIMARY KEY) ENGINE=INNODB; INSERT INTO t VALUEs (1); SELECT * FROM t; DROP TABLE t; DROP DATABASE test;"
 | ||
| 
 | ||
| .test-verify-libs: &test-verify-libs
 | ||
|   # Don't use a collapsed command as Gitlab-CI would hide each command from the output
 | ||
|   - ldconfig -p | grep -e mariadb -e mysql
 | ||
|   - pkg-config --list-all
 | ||
|   - pkg-config --cflags --libs mysqlclient
 | ||
|   - pkg-config --cflags --libs libmariadb
 | ||
|   - pkg-config --cflags --libs mariadb
 | ||
|   - apt-get install -qq --yes --no-install-recommends g++
 | ||
|   - |
 | ||
|     # Build a test binary that depends on libmysqlclient
 | ||
|     cat > b933063.cpp <<EOF
 | ||
|     #include <iostream>
 | ||
|     #include <mysql/mysql.h>
 | ||
|     #include <stdexcept>
 | ||
|     int main()
 | ||
|     {
 | ||
|       MYSQL h;
 | ||
|       if (!mysql_init(&h)
 | ||
|         || mysql_options(&h, MYSQL_READ_DEFAULT_GROUP, "")
 | ||
|         // || mysql_options(&h, MYSQL_SET_CHARSET_NAME, "utf8mb4")
 | ||
|         || !mysql_real_connect(&h, "", "", NULL, "", 0, NULL, 0))
 | ||
|         throw std::runtime_error(mysql_error(&h));
 | ||
|       std::string q = "show variables like '%char%'";
 | ||
|       if (mysql_real_query(&h, q.data(), q.size()))
 | ||
|         throw std::runtime_error(mysql_error(&h));
 | ||
|       MYSQL_RES* result = mysql_store_result(&h);
 | ||
|       if (!result && mysql_errno(&h))
 | ||
|         throw std::runtime_error(mysql_error(&h));
 | ||
|       while (MYSQL_ROW row = mysql_fetch_row(result))
 | ||
|       {
 | ||
|         std::cout << row[0] << ": " << row[1] << "\n";
 | ||
|       }
 | ||
|       return 0;
 | ||
|     }
 | ||
|     EOF
 | ||
|     apt-get install -qq --yes --allow-downgrades ./*.deb # Server must be installed for client to connect
 | ||
|     echo "Testing -l mysqlclient"
 | ||
|     g++ b933063.cpp -l mysqlclient && ./a.out | tee result
 | ||
|     if grep --quiet latin result; then echo "ERROR: Charset latin found!"; exit 1; fi
 | ||
|     echo "Testing -l mariadbclient"
 | ||
|     g++ b933063.cpp -l mariadbclient && ./a.out | tee result
 | ||
|     if grep --quiet latin result; then echo "ERROR: Charset latin found!"; exit 1; fi
 | ||
|   - |
 | ||
|     # Build a test binary to verify API version strings
 | ||
|     cat > b1031863.cpp <<EOF
 | ||
|     #include <cstring>
 | ||
|     #include <iostream>
 | ||
|     #include <mysql/mysql.h>
 | ||
|     using namespace std;
 | ||
| 
 | ||
|     void test_if_starts_with(const string expected, const string tested, const string name) {
 | ||
|       int r = strncmp(tested.c_str(), expected.c_str(), expected.size());
 | ||
|       if (r == 0) {
 | ||
|         cout << name << ": " << tested << "\n";
 | ||
|       } else {
 | ||
|         cout << "ERROR: " << name << " started with " << tested << " instead of the expected " << expected << "!\n";
 | ||
|         exit(1);
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     int main()
 | ||
|     {
 | ||
|       MYSQL h;
 | ||
|       // Constants refer to server version
 | ||
|       test_if_starts_with("1011", to_string(MARIADB_VERSION_ID), "MARIADB_VERSION_ID");
 | ||
|       test_if_starts_with("1011", to_string(MYSQL_VERSION_ID), "MYSQL_VERSION_ID");
 | ||
|       // Client ABI returns connector version
 | ||
|       test_if_starts_with("303", to_string(mysql_get_client_version()), "mysql_get_client_version()");
 | ||
|       test_if_starts_with("3.3", mysql_get_client_info(), "mysql_get_client_info()");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     EOF
 | ||
|     g++ b1031863.cpp -l mysqlclient && ./a.out
 | ||
| 
 | ||
| 
 | ||
| .salsa-ci-template-for-mariadb:
 | ||
|   stage: test
 | ||
|   needs:
 | ||
|     - job: build
 | ||
|   image: debian:${RELEASE}
 | ||
|   artifacts:
 | ||
|     when: always
 | ||
|     name: "$CI_BUILD_NAME"
 | ||
|     paths:
 | ||
|       - ${WORKING_DIR}/debug
 | ||
|   script:
 | ||
|     - echo "This script section must be overridden in each test" && exit 1
 | ||
|   variables:
 | ||
|     GIT_STRATEGY: none
 | ||
|   except:
 | ||
|     variables:
 | ||
|       - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
 | ||
| 
 | ||
| .salsa-ci-template-for-mariadb-upgrade:
 | ||
|   stage: test
 | ||
|   needs:
 | ||
|     - job: build
 | ||
|   image: debian:${RELEASE}
 | ||
|   artifacts:
 | ||
|     when: always
 | ||
|     name: "$CI_BUILD_NAME"
 | ||
|     paths:
 | ||
|       - ${WORKING_DIR}/debug
 | ||
|   before_script:
 | ||
|     - *test-prepare-container
 | ||
|     - apt-get install -qq --yes --no-install-recommends ca-certificates curl
 | ||
|     - |
 | ||
|       [[ -d /etc/apt/keyrings ]] || mkdir /etc/apt/keyrings
 | ||
|       curl -sS https://mariadb.org/mariadb_release_signing_key.pgp -o /etc/apt/keyrings/mariadb-keyring.pgp
 | ||
|       cat >/etc/apt/sources.list.d/mariadb.sources <<EOF
 | ||
|       X-Repolib-Name: MariaDB
 | ||
|       Types: deb
 | ||
|       URIs: https://archive.mariadb.org/mariadb-${MARIADB_VERSION}/repo/debian
 | ||
|       Suites: ${RELEASE}
 | ||
|       Components: main
 | ||
|       Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp
 | ||
|       EOF
 | ||
|     - apt-get update -qq
 | ||
|   script:
 | ||
|     - echo "This script section must be overridden in each test" && exit 1
 | ||
|   variables:
 | ||
|     GIT_STRATEGY: none
 | ||
|     MARIADB_VERSION: "10.0"
 | ||
|   except:
 | ||
|     variables:
 | ||
|       - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
 | ||
| 
 | ||
| fresh install:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - *test-install-all
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| simple upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - apt-get install -qq --yes 'default-mysql*' ${BUILT_PACKAGES}
 | ||
|     - *test-full-upgrade
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb and Bookworm upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:bookworm
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install everything MariaDB currently in Debian Bookworm
 | ||
|     - apt-get install -qq --yes 'default-mysql*' 'mariadb-*' 'libmariadb*'
 | ||
|     # Verify installation of MariaDB from Bookworm
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.11"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Ensure mariadbd will not crash on next shutdown for any reason
 | ||
|     - service mariadb restart
 | ||
|     - *test-full-upgrade
 | ||
|     - service mariadb status  # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb-10.6 and Bookworm-20230208 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:bookworm-20230208
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - |
 | ||
|       echo 'deb [check-valid-until=no] http://snapshot.debian.org/archive/debian/20230208T130000Z bookworm main' > /etc/apt/sources.list.d/bookworm.list
 | ||
|       rm /etc/apt/sources.list.d/debian.sources
 | ||
|       apt-get update -qq
 | ||
|     # In February 2023 Bookworm snapshot this will install MariaDB 10.6
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     # Verify installation of MariaDB from (February 2023) Bookworm
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.6"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Ensure mariadbd will not crash on next shutdown for any reason
 | ||
|     - service mariadb restart
 | ||
|     - *test-full-upgrade
 | ||
|     - service mariadb status  # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - apt-get purge --yes mariadb*10.?
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb-10.6 and Jammy upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: ubuntu:jammy
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install everything MariaDB currently in Ubuntu Jammy
 | ||
|     - apt-get install -qq --yes 'mariadb-*' 'libmariadb*'
 | ||
|     # Verify installation of MariaDB from Jammy
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.6"
 | ||
|     - *test-verify-initial
 | ||
|     # Install Debian Sid signing keys as Ubuntu does not have them by default
 | ||
|     - apt-get install -qq --yes --no-install-recommends curl
 | ||
|     - curl -sSLO http://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2023.4_all.deb
 | ||
|     - apt-get install -qq --yes ./debian-archive-keyring_*
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Ensure mariadbd will not crash on next shutdown for any reason
 | ||
|     - service mariadb restart
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate mariadb-server
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     # Due to usrmerge, full-upgrade from Jammy to Trixie or newer cannot work
 | ||
|     - service mariadb status  # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - apt-get purge --yes mariadb*10.?
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb-10.5 and Bullseye upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:bullseye
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install everything MariaDB currently in Debian Bullseye
 | ||
|     - apt-get install -qq --yes 'default-mysql*' 'mariadb-*' 'libmariadb*'
 | ||
|     # Verify installation of MariaDB from Bullseye
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.5"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Ensure mariadbd will not crash on next shutdown for any reason
 | ||
|     - service mariadb restart
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate mariadb-server
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     # Due to usrmerge, full-upgrade from Bullseye to Trixie or newer cannot work
 | ||
|     - service mariadb status  # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - apt-get purge --yes mariadb*10.?
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb-10.3 and Buster upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:buster
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install everything MariaDB currently in Debian Buster
 | ||
|     - apt-get install -qq --yes 'default-mysql*' 'mariadb-*' 'libmariadb*'
 | ||
|     # Verify installation of MariaDB from Buster
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.3"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Ensure mariadbd will not crash on next shutdown for any reason
 | ||
|     - service mysql restart # in 10.3 service name is still 'mysql'
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate mariadb-server
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     # Due to usrmerge, full-upgrade from Bullseye to Trixie or newer cannot work
 | ||
|     - service mysql status
 | ||
|     # mariadb-10.3 in Buster ships a /etc/init.d/mysql and it continues to exist
 | ||
|     # after upgrade, and is removed only on purge
 | ||
|     - apt-get purge --yes mariadb*10.?
 | ||
|     - service mariadb status
 | ||
|     # Give the mariadb-upgrade plenty of time to complete, otherwise next commands
 | ||
|     # fail on non-existing mariadb.sys user
 | ||
|     - sleep 15
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb-10.3 and Focal upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: ubuntu:focal
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install everything MariaDB currently in Ubuntu Focal
 | ||
|     - apt-get install -qq --yes 'mariadb-*' 'libmariadb*'
 | ||
|     # Verify installation of MariaDB from Focal
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.3"
 | ||
|     - *test-verify-initial
 | ||
|     # Install Debian Sid signing keys as Ubuntu does not have them by default
 | ||
|     - apt-get install -qq --yes --no-install-recommends curl
 | ||
|     - curl -sSLO http://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2023.4_all.deb
 | ||
|     - apt-get install -qq --yes ./debian-archive-keyring_*
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Ensure mariadbd will not crash on next shutdown for any reason
 | ||
|     - service mysql restart # in 10.3 service name is still 'mysql'
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate mariadb-server
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     # Due to usrmerge, full-upgrade from Focal to Trixie or newer cannot work
 | ||
|     - service mysql status
 | ||
|     # mariadb-10.3 in Focal ships a /etc/init.d/mysql and it continues to exist
 | ||
|     # after upgrade, and is removed only on purge
 | ||
|     - apt-get purge --yes mariadb*10.?
 | ||
|     # Give the mariadb-upgrade plenty of time to complete, otherwise next commands
 | ||
|     # fail on non-existing mariadb.sys user
 | ||
|     - sleep 15
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # Similar to the Cacti install test, check that MariaDB consumer Zoph upgrades
 | ||
| default-mysql-server and Bookworm upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:bookworm
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install everything MariaDB currently in Debian Bookworm
 | ||
|     - apt-get install -qq --yes default-mysql-server zoph
 | ||
|     # Verify installation of MariaDB from Bookworm
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.11"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate default-mysql-server
 | ||
|     - apt-get install -qq --yes default-mysql-server
 | ||
|     - *test-full-upgrade
 | ||
|     - service mariadb status  # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # Similar to the Cacti install test, check that MariaDB consumer Zoph upgrades
 | ||
| default-mysql-server and Bullseye upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:bullseye
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install everything MariaDB currently in Debian Bullseye
 | ||
|     - apt-get install -qq --yes default-mysql-server zoph
 | ||
|     # Verify installation of MariaDB from Bullseye
 | ||
|     - dpkg -l | grep -e "mariadb-server.*10\.5"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate default-mysql-server
 | ||
|     - apt-get install -qq --yes default-mysql-server
 | ||
|     # Due to usrmerge, full-upgrade from Bullseye to Trixie or newer cannot work
 | ||
|     - service mariadb status  # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| test basic features:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - *test-install-all
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
|     - |
 | ||
|       # Print info about server
 | ||
|       mariadb --skip-column-names -e "select @@version, @@version_comment"
 | ||
|       mariadb --skip-column-names -e "select engine, support, transactions, savepoints from information_schema.engines order by engine" | sort
 | ||
|       mariadb --skip-column-names -e "select plugin_name, plugin_status, plugin_type, plugin_library, plugin_license from information_schema.all_plugins order by plugin_name, plugin_library"
 | ||
|       # Test various features
 | ||
|       mariadb -e "CREATE DATABASE db"
 | ||
|       mariadb -e "CREATE TABLE db.t_innodb(a1 SERIAL, c1 CHAR(8)) ENGINE=InnoDB; INSERT INTO db.t_innodb VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
 | ||
|       mariadb -e "CREATE TABLE db.t_myisam(a2 SERIAL, c2 CHAR(8)) ENGINE=MyISAM; INSERT INTO db.t_myisam VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
 | ||
|       mariadb -e "CREATE TABLE db.t_aria(a3 SERIAL, c3 CHAR(8)) ENGINE=Aria; INSERT INTO db.t_aria VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
 | ||
|       mariadb -e "CREATE TABLE db.t_memory(a4 SERIAL, c4 CHAR(8)) ENGINE=MEMORY; INSERT INTO db.t_memory VALUES (1,'"'"'foo'"'"'),(2,'"'"'bar'"'"')"
 | ||
|       mariadb -e "CREATE ALGORITHM=MERGE VIEW db.v_merge AS SELECT * FROM db.t_innodb, db.t_myisam, db.t_aria"
 | ||
|       mariadb -e "CREATE ALGORITHM=TEMPTABLE VIEW db.v_temptable AS SELECT * FROM db.t_innodb, db.t_myisam, db.t_aria"
 | ||
|       mariadb -e "CREATE PROCEDURE db.p() SELECT * FROM db.v_merge"
 | ||
|       mariadb -e "CREATE FUNCTION db.f() RETURNS INT DETERMINISTIC RETURN 1"
 | ||
|       # Test that the features still work (this step can be done e.g. after an upgrade)
 | ||
|       mariadb -e "SHOW TABLES IN db"
 | ||
|       mariadb -e "SELECT * FROM db.t_innodb; INSERT INTO db.t_innodb VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
 | ||
|       mariadb -e "SELECT * FROM db.t_myisam; INSERT INTO db.t_myisam VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
 | ||
|       mariadb -e "SELECT * FROM db.t_aria; INSERT INTO db.t_aria VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
 | ||
|       mariadb -e "SELECT * FROM db.t_memory; INSERT INTO db.t_memory VALUES (3,'"'"'foo'"'"'),(4,'"'"'bar'"'"')"
 | ||
|       mariadb -e "SELECT COUNT(*) FROM db.v_merge"
 | ||
|       mariadb -e "SELECT COUNT(*) FROM db.v_temptable"
 | ||
|       mariadb -e "CALL db.p()"
 | ||
|       mariadb -e "SELECT db.f()"
 | ||
|     - |
 | ||
|       # Test TLS connections
 | ||
|       dpkg -l | grep -i -e tls -e ssl
 | ||
|       # Create user for TCP connection, must have password
 | ||
|       mariadb -e "SET PASSWORD FOR 'mysql'@'localhost' = PASSWORD('asdf234');"
 | ||
|       cat <<EOF > /root/.my.cnf
 | ||
|       [client]
 | ||
|       user=mysql
 | ||
|       password=asdf234
 | ||
|       protocol=tcp
 | ||
|       EOF
 | ||
|       export CERT_PATH=/usr/share/mariadb/mariadb-test/std_data
 | ||
|       openssl verify -CAfile $CERT_PATH/cacert.pem $CERT_PATH/server-cert.pem
 | ||
|       openssl x509 -subject -issuer -noout -in $CERT_PATH/cacert.pem
 | ||
|       openssl x509 -subject -issuer -noout -in $CERT_PATH/server-cert.pem
 | ||
|       cat <<EOF > /etc/mysql/mariadb.conf.d/tls.cnf
 | ||
|       [client-server]
 | ||
|       ssl = on
 | ||
|       ssl-ca = $CERT_PATH/cacert.pem
 | ||
|       ssl-cert = $CERT_PATH/server-cert.pem
 | ||
|       ssl-key = $CERT_PATH/server-key.pem
 | ||
|       [server]
 | ||
|       require-secure-transport = on
 | ||
|       [client]
 | ||
|       ssl-verify-server-cert = on
 | ||
|       EOF
 | ||
|       service mariadb restart
 | ||
|       mariadb -Bse 'STATUS' | tee result
 | ||
|       # Ensure important values present, otherwise fail job
 | ||
|       grep --quiet "localhost via TCP/IP" result
 | ||
|       mariadb -Bse 'SHOW VARIABLES' | grep -e tls -e ssl | tee result
 | ||
|       grep --quiet "have_ssl	YES" result
 | ||
|       grep --quiet TLSv1.3 result
 | ||
|       mariadb -Bse 'SHOW SESSION STATUS' | grep -i -e tls -e ssl | tee result
 | ||
|       grep --quiet TLSv1.3 result
 | ||
| 
 | ||
| # Install Cacti, which in uses dbconfig-common to configure the MariaDB user and
 | ||
| # connection automatically in order to validate that at least one downstream
 | ||
| # server consumer continues to work.
 | ||
| test consumer cacti:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --yes cacti
 | ||
|     - mariadb -E -e "SHOW CREATE TABLE version;" cacti
 | ||
| 
 | ||
| # Build a piece of software that was designed for libmysqlclient-dev but using the
 | ||
| # libmariadb-dev-compat layer. Should always end up using libmariadb.so.3 run-time.
 | ||
| build mariadbclient consumer Python-MySQLdb:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - *test-install-all-libs
 | ||
|     - apt-get install -qq --yes pkg-config python3-pip
 | ||
|     # See what MySQLdb will build with
 | ||
|     - pkg-config --cflags --libs mysqlclient
 | ||
|     # MySQLdb is also available in Debian as package python3-mysqldb, but
 | ||
|     # install it from pip to force that the client is compiled with
 | ||
|     # libmariadb-dev-compat on-the-fly.
 | ||
|     # Python 3.11 needs `--break-system-packages` to proceed with this.
 | ||
|     - pip3 install --break-system-packages mysqlclient # Compiles module against libmysqlclient
 | ||
|     - apt-get purge --yes libmariadb-dev # Not needed for run-time
 | ||
|     - python3 -c "import MySQLdb; print(MySQLdb.get_client_info())"
 | ||
| 
 | ||
| libmysql* to libmariadb* upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # Install all libmysql* available in Debian unstable
 | ||
|     - apt-get install -qq --yes pkg-config libmysqlclient-dev
 | ||
|     - pkg-config --list-all
 | ||
|     - pkg-config --cflags mysqlclient # mysqlclient.pc from original package
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --yes libmariadb3
 | ||
|     - pkg-config --list-all
 | ||
|     - apt-get install -qq --yes libmariadb-dev
 | ||
|     - pkg-config --list-all
 | ||
|     - apt-get install -qq --yes libmariadb-dev-compat
 | ||
|     - pkg-config --cflags mysqlclient # mysqlclient.pc from compat package
 | ||
|     - pkg-config --list-all
 | ||
|     - apt-get install -qq --yes libmariadbd19t64
 | ||
|     - pkg-config --list-all
 | ||
|     - apt-get install -qq --yes libmariadbd-dev
 | ||
|     - pkg-config --list-all
 | ||
|     - apt-get install -qq --yes default-libmysqlclient-dev default-libmysqld-dev
 | ||
|     - *test-verify-libs
 | ||
| 
 | ||
| default-libmysqlclient-dev upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - apt-get install -qq --yes pkg-config default-libmysqlclient-dev default-libmysqld-dev
 | ||
|     - pkg-config --list-all
 | ||
|     - *test-full-upgrade-libs
 | ||
|     - *test-verify-libs
 | ||
| 
 | ||
| default-libmysqlclient-dev and Bookworm upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:bookworm
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - apt-get install -qq --yes pkg-config default-libmysqlclient-dev
 | ||
|     - pkg-config --list-all
 | ||
|     - *test-enable-sid-repos
 | ||
|     - *test-full-upgrade-libs
 | ||
|     - *test-verify-libs
 | ||
| 
 | ||
| default-libmysqlclient-dev and Bullseye upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB and distro
 | ||
|   image: debian:bullseye
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - apt-get install -qq --yes pkg-config default-libmysqlclient-dev
 | ||
|     - pkg-config --list-all
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Due to usrmerge, full-upgrade from Bullseye to Trixie or newer cannot work
 | ||
|     - *test-install-all-libs
 | ||
|     - *test-verify-libs
 | ||
| 
 | ||
| # No longer possible since as it pulls as dependencies packages that trigger
 | ||
| # usrmerge, which cannot run in a container
 | ||
| #default-libmysqlclient-dev and Buster upgrade:
 | ||
| 
 | ||
| # Upgrading from MySQL 8.0 with datadir in place is not possible. Users need to do a data dump.
 | ||
| # The Debian maintainer scripts detect this situation and simply moves old datadir aside and start fresh.
 | ||
| mysql-8.0 in Sid upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   image: debian:sid
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     # The postinst fails often if 'ps' is missing from system, so install procps
 | ||
|     - apt-get install -qq --yes 'mysql*' libmysqlcppconn7t64
 | ||
|     # Ensure MySQL 8.0 package actually got installed
 | ||
|     - dpkg -l | grep -e "mysql-server.*8\.0"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-install-all
 | ||
|     # Due to some (currently unknown) changes in MySQL 8.0 packaging or apt
 | ||
|     # behaviour changes, a system with a previous installation of MySQL 8.0 will
 | ||
|     # on upgrades to MariaDB first fully remove MySQL, including the
 | ||
|     # /etc/init.d/mysql file, so previous techniques in
 | ||
|     # mariadb-server-10.6.postinst to maintain backwards compatibility with
 | ||
|     # 'service mysql status' after installing MariaDB on top MySQL no longer
 | ||
|     # works. Thus the step to test it now intentionally has a fallback to use
 | ||
|     # the service name 'mariadb' instead, and the fallback is always used.
 | ||
|     - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
 | ||
|     - service mysql status || service mariadb status
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # Upgrading from MySQL 8.0 with datadir in place is not possible. Users need to do a data dump.
 | ||
| # The Debian maintainer scripts detect this situation and simply moves old datadir aside and start fresh.
 | ||
| mysql-8.0 in Ubuntu 23.10 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   image: ubuntu:mantic
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - apt-get install -qq --yes procps mysql-server 'libmysqlc*'
 | ||
|     # Ensure MySQL 8.0 package actually got installed
 | ||
|     - dpkg -l | grep mysql
 | ||
|     - service mysql status
 | ||
|     - *test-verify-initial
 | ||
|     # Install Debian Sid signing keys as Ubuntu does not have them by default
 | ||
|     - apt-get install -qq --yes --no-install-recommends curl
 | ||
|     - curl -sSLO http://deb.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2023.4_all.deb
 | ||
|     - apt-get install -qq --yes ./debian-archive-keyring_*
 | ||
|     - *test-enable-sid-repos
 | ||
|     # Ensure mysqld will not crash on next shutdown for any reason
 | ||
|     - service mysql restart
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate mariadb-server
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     # Due to usrmerge, full-upgrade from Mantic to Trixie or newer may not work
 | ||
|     - service mariadb status  # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     # Remove everything MySQL except mysql-common which also MariaDB depends on
 | ||
|     - apt-get purge --yes mysql-s* mysql-cl* libmysql*
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # Upgrading from MySQL 8.0 with datadir in place is not possible. Users need to do a data dump.
 | ||
| # The Debian maintainer scripts detect this situation and simply moves old datadir aside and start fresh.
 | ||
| mysql-community-cluster-8.0 from MySQL.com with Bookworm upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   image: debian:bookworm
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - |
 | ||
|       apt-get install -qq --yes --no-install-recommends ca-certificates curl systemctl
 | ||
|       curl -sS "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xbca43417c3b485dd128ec6d4b7b3b788a8d3785c" -o /etc/apt/trusted.gpg.d/mysql.asc
 | ||
|       echo "deb https://repo.mysql.com/apt/debian/ bookworm mysql-cluster-8.0" > /etc/apt/sources.list.d/mysql.list
 | ||
|       apt-get update -qq
 | ||
|     - apt-get install -qq --yes mysql-cluster-community-server
 | ||
|     - sed 's/ExecStartPre=+/ExecStartPre=/' -i /lib/systemd/system/mysql.service # Hack to make file compatible with systemctl shim
 | ||
|     - systemctl start mysql
 | ||
|     - dpkg -l | grep -iE 'maria|mysql|galera'
 | ||
|     - systemctl status mysql; mysql -e 'SELECT VERSION()'
 | ||
|     - systemctl stop mysql # Stop manually as maintainer scripts don't handle this with systemctl shim
 | ||
|     - *test-enable-sid-repos
 | ||
|     - *test-enable-artifacts-repo
 | ||
|     - apt-get install -qq --simulate mariadb-server
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     # Ignore systemctl shim result as MariaDB systemd file is incompatible with it and yields:
 | ||
|     #   ERROR:systemctl:the ExecStartPre control process exited with error code
 | ||
|     - systemctl status mysql || true
 | ||
|     - mysql -e 'SELECT VERSION()' || true
 | ||
|     - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb.org-10.11 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.11"
 | ||
|   script:
 | ||
|     - apt-get install -qq --yes mariadb-server
 | ||
|     - *test-verify-initial
 | ||
|     # Install MariaDB built in this commit
 | ||
|     # Force downgrades so our version installs on top of upstream revision, e.g. 1:11.10.1-1 vs 1:11.10.1+mariadb~sid
 | ||
|     - apt-get install -qq --yes --allow-downgrades ./*.deb
 | ||
|     # Verify installation of MariaDB built in this commit
 | ||
|     - dpkg -l | grep -iE 'maria|mysql|galera' || true # List installed
 | ||
|     - mariadb --version # Client version
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb.org-10.10 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.10"
 | ||
|   script:
 | ||
|     # this should not use Sid to begin with
 | ||
|     - apt-get install -qq --yes mariadb-server=1:10.10.2+maria~debunstable mariadb-client=1:10.10.2+maria~debunstable
 | ||
|     - *test-verify-initial
 | ||
|     - *test-full-upgrade
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb.org-10.9 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.9"
 | ||
|   script:
 | ||
|     # this should not use Sid to begin with
 | ||
|     - apt-get install -qq --yes mariadb-server=1:10.9.4+maria~debunstable mariadb-client=1:10.9.4+maria~debunstable
 | ||
|     - *test-verify-initial
 | ||
|     - *test-full-upgrade
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb.org-10.8 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.8"
 | ||
|   script:
 | ||
|     - apt-get install -qq --yes mariadb-server-10.8
 | ||
|     - *test-verify-initial
 | ||
|     - *test-install-all
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb.org-10.7 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.7"
 | ||
|   script:
 | ||
|     - apt-get install -qq --yes mariadb-server-10.7
 | ||
|     - *test-verify-initial
 | ||
|     - *test-install-all
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| mariadb.org-10.6 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.6"
 | ||
|   script:
 | ||
|     # Package libmariadbclient-dev from mariadb.org conflicts with libmariadb-dev in Sid, so cannot use wildcard that would include it
 | ||
|     # Enable this line when there is a way to install them only from the mariadb.org repo
 | ||
|     # - apt-get install -qq --yes 'mariadb*' libmariadb3 'libmariadb-*' 'libmariadbd*'
 | ||
|     - apt-get install -qq --yes mariadb-server-10.6
 | ||
|     - *test-verify-initial
 | ||
|     - *test-install-all
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # archive.mariadb.org for Debian Sid latest is 10.5.13
 | ||
| mariadb.org-10.5 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.5"
 | ||
|   script:
 | ||
|     - *test-install-openssl1-in-sid-for-backwards-compat
 | ||
|     - apt-get install -qq --yes mariadb-server-10.5
 | ||
|     - *test-verify-initial
 | ||
|     - *test-install-all
 | ||
|     - service mariadb status # There is no init.d/mysql in MariaDB 10.5+
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # archive.mariadb.org for Debian Sid latest is 10.4.17
 | ||
| mariadb.org-10.4 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.4"
 | ||
|   script:
 | ||
|     - *test-install-readline-in-sid-for-backwards-compat
 | ||
|     - *test-install-openssl1-in-sid-for-backwards-compat
 | ||
|     - *test-install-libaio-in-sid-for-backwards-compat
 | ||
|     - apt-get install -qq --yes mariadb-server-10.4
 | ||
|     # MariaDB.org version of 10.4 and early 10.5 do not install an init file, so
 | ||
|     # it must be installed here manually
 | ||
|     - cp /usr/share/mysql/mysql.init /etc/init.d/mysql; chmod +x /etc/init.d/mysql; service mysql start; sleep 5
 | ||
|     - *test-verify-initial
 | ||
|     - *test-install-all
 | ||
|     - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
 | ||
|     - service mysql status
 | ||
|     - service mariadb status
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # archive.mariadb.org for Debian Sid latest is 10.3.27
 | ||
| mariadb.org-10.3 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.3"
 | ||
|   script:
 | ||
|     - *test-install-readline-in-sid-for-backwards-compat
 | ||
|     - *test-install-openssl1-in-sid-for-backwards-compat
 | ||
|     - *test-install-libaio-in-sid-for-backwards-compat
 | ||
|     - apt-get install -qq --yes mariadb-server-10.3
 | ||
|     - *test-verify-initial
 | ||
|     - *test-install-all
 | ||
|     # mariadb-10.3 in Buster ships a /etc/init.d/mysql and it continues to exist
 | ||
|     # after upgrade, and is removed only on purge
 | ||
|     - service mysql status || service mariadb status
 | ||
|     # Give the mariadb-upgrade plenty of time to complete, otherwise next commands
 | ||
|     # fail on non-existing mariadb.sys user
 | ||
|     - sleep 15
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # archive.mariadb.org for Debian Sid latest is 10.2.21
 | ||
| mariadb.org-10.2 upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb-upgrade
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   variables:
 | ||
|     MARIADB_VERSION: "10.2"
 | ||
|   script:
 | ||
|     - *test-install-readline-in-sid-for-backwards-compat
 | ||
|     - *test-install-openssl1-in-sid-for-backwards-compat
 | ||
|     - *test-install-libaio-in-sid-for-backwards-compat
 | ||
|     - apt-get install -qq --yes mariadb-server-10.2
 | ||
|     # Verify initial state before upgrade
 | ||
|     - dpkg -l | grep -iE 'maria|mysql|galera' || true # List installed
 | ||
|     - service mysql status
 | ||
|     # prepending with --defaults-file=/etc/mysql/debian.cnf is needed in upstream 5.5–10.3
 | ||
|     - |
 | ||
|       mysql --defaults-file=/etc/mysql/debian.cnf --skip-column-names -e "SELECT @@version, @@version_comment"
 | ||
|       mysql --defaults-file=/etc/mysql/debian.cnf --table -e "SHOW DATABASES;"
 | ||
|       mysql --defaults-file=/etc/mysql/debian.cnf --table -e "SELECT * FROM mysql.user; SHOW CREATE USER root@localhost;"
 | ||
|       mysql --defaults-file=/etc/mysql/debian.cnf --table -e "SELECT * FROM mysql.plugin; SHOW PLUGINS;"
 | ||
|     - *test-install-all
 | ||
|     # mariadb-10.2 in ships a /etc/init.d/mysql and it continues to exist
 | ||
|     # after upgrade, and is removed only on purge
 | ||
|     - service mysql status || service mariadb status
 | ||
|     # Give the mariadb-upgrade plenty of time to complete, otherwise next commands
 | ||
|     # fail on non-existing mariadb.sys user
 | ||
|     - sleep 15
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # Buster is the last Debian release Oracle MySQL 5.7 offers binaries for
 | ||
| mysql.com-5.7 with Buster upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   needs:
 | ||
|     - job: build
 | ||
|   image: debian:buster
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - |
 | ||
|       apt-get install -qq --yes --no-install-recommends gpg gpg-agent dirmngr ca-certificates # Bare minimal (<4MB) for apt-key to work
 | ||
|       apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 B7B3B788A8D3785C
 | ||
|       echo "deb https://repo.mysql.com/apt/debian/ buster mysql-5.7" > /etc/apt/sources.list.d/mysql.list
 | ||
|       apt-get update -qq
 | ||
|     - apt-get install -qq --yes mysql-server 'libmysqlc*'
 | ||
|     # Ensure MySQL 5.7 package actually got installed
 | ||
|     - dpkg -l | grep -e "mysql-server.*5.7"
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     - *test-install-all
 | ||
|     # Due to some (currently unknown) changes in MySQL 5.7 packaging or apt
 | ||
|     # behaviour changes, a system with a previous installation of MySQL will
 | ||
|     # on upgrades to MariaDB first fully remove MySQL, including the
 | ||
|     # /etc/init.d/mysql file, so previous techniques in
 | ||
|     # mariadb-server-10.6.postinst to maintain backwards compatibility with
 | ||
|     # 'service mysql status' after installing MariaDB on top MySQL no longer
 | ||
|     # works. Thus the step to test it now intentionally has a fallback to use
 | ||
|     # the service name 'mariadb' instead, and the fallback is always used.
 | ||
|     - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
 | ||
|     - service mysql status || service mariadb status
 | ||
|     - sleep 15 # Give the mysql_upgrade a bit of extra time to complete with MySQL 5.7 before querying the server
 | ||
|     - *test-verify-final
 | ||
| 
 | ||
| # Note: pmm2-client does not exist in the Bookworm repository anymore
 | ||
| percona-xtradb-5.7 with Bookworm upgrade:
 | ||
|   extends: .salsa-ci-template-for-mariadb
 | ||
|   stage: upgrade MariaDB variant
 | ||
|   image: debian:bookworm
 | ||
|   script:
 | ||
|     - *test-prepare-container
 | ||
|     - |
 | ||
|       apt-get install -qq --yes --no-install-recommends ca-certificates curl systemctl
 | ||
|       curl -sS "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9334A25F8507EFA5" -o /etc/apt/trusted.gpg.d/percona.asc
 | ||
|       echo "deb https://repo.percona.com/apt/ bookworm main" > /etc/apt/sources.list.d/percona.list
 | ||
|       apt-get update -qq
 | ||
|     - apt-get install -qq --yes percona-xtradb-cluster-full-57 percona-xtrabackup-24 percona-toolkit
 | ||
|     # Ensure Percona 5.7 package actually got installed
 | ||
|     - dpkg -l | grep -e "percona.*5\.7"
 | ||
|     - service mysql status
 | ||
|     - *test-verify-initial
 | ||
|     - *test-enable-sid-repos
 | ||
|     - *test-install-all
 | ||
|     # Percona package owned /etc/init.d/mysql, so on removal and upgrade to MariaDB old service name can't be referenced anymore
 | ||
|     - service mariadb status
 | ||
|     - sleep 15 # Give the mysql_upgrade a bit of extra time to complete with MySQL 5.7 before querying the server
 | ||
|     - *test-verify-final
 | 
