summaryrefslogtreecommitdiffstats
path: root/debian/salsa-ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/salsa-ci.yml821
1 files changed, 821 insertions, 0 deletions
diff --git a/debian/salsa-ci.yml b/debian/salsa-ci.yml
new file mode 100644
index 00000000..5b21c4dd
--- /dev/null
+++ b/debian/salsa-ci.yml
@@ -0,0 +1,821 @@
+---
+# 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:
+ DEB_BUILD_OPTIONS: "nocheck noautodbgsym"
+ RELEASE: sid
+ SALSA_CI_DISABLE_REPROTEST: 1
+ SALSA_CI_DISABLE_MISSING_BREAKS: 0
+ SALSA_CI_DISABLE_RC_BUGS: 0
+
+stages:
+ - provisioning
+ - build
+ - test
+ - upgrade in Sid
+ - upgrade from Buster/Stretch
+ - upgrade extras
+ - test extras
+ - publish # Stage referenced by Salsa-CI template aptly stanza, so must exist even though not used
+
+gnitpick:
+ stage: provisioning
+ image: debian:sid-slim
+ script: |
+ # Bare minimal (<4MB) for apt-key and gnitpick to work
+ apt-get update -qq && apt-get -qq install --no-install-recommends --yes ca-certificates curl python3-minimal git
+ curl -sS https://raw.githubusercontent.com/Seravo/gnitpick/master/gnitpick.py -o /usr/bin/gnitpick; chmod +x /usr/bin/gnitpick
+ # Actual Gnitpick part
+ gnitpick --target-repository https://salsa.debian.org/mariadb-team/mariadb-10.5.git
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+packaging-fix-checks:
+ stage: provisioning
+ image: debian:sid-slim
+ script:
+ - apt-get update -qq && apt-get -qq install --no-install-recommends --yes git devscripts python3-debian
+ - |
+ if [ "$(find debian/patches/ -type f -not -name series | wc -l)" -eq "$(cat debian/patches/series | wc -l)" ]
+ then
+ echo "The directory debian/patches/ contents and debian/patches/series file match by count."
+ else
+ find debian/patches -type f -not -name series -printf "%P\n" | sort > /tmp/patches-directory-sorted
+ sort debian/patches/series > /tmp/patches-series-sorted
+ diff -y /tmp/patches-series-sorted /tmp/patches-directory-sorted
+ echo
+ echo "The directory debian/patches/ file count does not match that in debian/series. Check that there are no unaccounted patches!"
+ exit 1
+ fi
+ - |
+ wrap-and-sort -a
+ git checkout debian/tests/control # Revert touching this file, wrap-and-sort shouldn't do it
+ if [ "$(git diff --name-only | wc -l)" -eq 0 ]
+ then
+ echo "No uncommited changes after 'wrap-and-sort -av', maintainer has done good job keeping files in order."
+ else
+ git diff
+ echo
+ echo "Debian packaging files are unordered! Please run 'wrap-and-sort -av'."
+ exit 1
+ fi
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+
+# build jobs often needs more than default GitLab timeout (1h)
+.build-package:
+ timeout: 3h
+
+build buster-backports:
+ extends: .build-package
+ variables:
+ RELEASE: buster-backports
+
+build stretch-backports:
+ extends: .build-package
+ variables:
+ RELEASE: stretch-backports
+
+autopkgtest:
+ extends: .test-autopkgtest
+ artifacts:
+ reports:
+ junit: ${WORKING_DIR}/debci/artifacts/mysql-test-run-junit.xml
+
+piuparts:
+ extends: .test-piuparts
+ stage: test extras
+
+blhc:
+ extends: .test-blhc
+ stage: test extras
+ needs:
+ - job: build
+
+# 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
+ # Prime the apt cache so later apt commands can run
+ apt-get update
+
+# 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 -O http://ftp.de.debian.org/debian/pool/main/r/readline5/libreadline5_5.2+dfsg-3+b13_amd64.deb
+ apt install -y ./libreadline5_5.2+dfsg-3+b13_amd64.deb
+
+.test-verify-initial: &test-verify-initial |
+ dpkg -l | grep -iE 'maria|mysql|galera' || true # List installed
+ service mysql status || service mariadb status # Early MariaDB 10.5 only had 'mariadb'
+ 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
+ apt-get install -y apt
+
+.test-install: &test-install |
+ # Install MariaDB built in this commit
+ apt-get install -y ./*.deb
+ # Verify installation of MariaDB built in this commit
+ dpkg -l | grep -iE 'maria|mysql|galera' || true # List installed
+ mariadb --version # Client version
+
+.test-verify-final: &test-verify-final |
+ 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
+ cp -ra /var/log/mysql debug/var-log-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 -y --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 -y ./*.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
+
+.test-install-all-libs: &test-install-all-libs
+ - apt-get install -y ./libmariadb3_*.deb ./libmariadb-dev_*.deb ./libmariadb-dev-compat_*.deb ./libmariadbd19_*.deb ./libmariadbd-dev_*.deb ./mariadb-common_*.deb
+
+fresh install:
+ stage: test
+ needs:
+ - job: build
+ image: debian:${RELEASE}
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - *test-install
+ - service mariadb status # There is no init.d/mysql in MariaDB 10.5
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb-10.5 Sid upgrade:
+ stage: upgrade in Sid
+ needs:
+ - job: build
+ image: debian:${RELEASE}
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - *test-install
+ - service mariadb status # There is no init.d/mysql in MariaDB 10.5
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb-10.3 Buster to mariadb-10.5 upgrade:
+ stage: upgrade from Buster/Stretch
+ needs:
+ - job: build
+ image: debian:buster
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ # Install everything MariaDB currently in Debian Buster
+ - apt-get install -y 'default-mysql*' 'mariadb-*' 'libmariadb*'
+ # Verify installation of MariaDB from Buster
+ - *test-verify-initial
+ - *test-enable-sid-repos
+ - *test-install
+ - service mysql status
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb-10.1 Stretch to mariadb-10.5 upgrade:
+ stage: upgrade from Buster/Stretch
+ needs:
+ - job: build
+ image: debian:stretch
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ # Install almost everything currently in Debian Stretch,
+ # omitting libmariadbclient-dev-compat as it would conflict
+ - apt-get install -y 'default-mysql*' 'mariadb-*' 'libmariadbd*' 'libmariadbclient*'
+ # Verify installation of MariaDB from Stretch
+ - *test-verify-initial
+ - *test-enable-sid-repos
+ - *test-install
+ - service mysql status
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+test basic features:
+ stage: test
+ needs:
+ - job: build
+ image: debian:${RELEASE}
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - *test-install
+ - 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/mysql/mysql-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
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+# 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:
+ stage: test
+ needs:
+ - job: build
+ image: debian:${RELEASE}
+ script:
+ - *test-prepare-container
+ # Run each step separately to avoitda 800+ lines chunk that lacks the
+ # commands themselves printed and Gitlab-CI cutting off the output
+ - apt-get install -y pkg-config ./libmariadb-dev*.deb ./libmariadb3_*.deb ./mariadb-common*.deb
+ - pkg-config --cflags --libs mysqlclient # See what MySQLdb builds with
+ - apt-get install -y python3-pip
+ - pip3 install mysqlclient # Compiles module against libmysqlclient
+ - apt-get purge -y libmariadb-dev # Not needed for run-time
+ - python3 -c "import MySQLdb; print(MySQLdb.get_client_info())"
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+libmysql* to libmariadb* upgrade:
+ stage: upgrade in Sid
+ needs:
+ - job: build
+ image: debian:${RELEASE}
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ # Install all libmysql* available in Debian unstable
+ - apt-get install -y pkg-config libmysqlclient-dev
+ - pkg-config --list-all
+ - pkg-config --cflags mysqlclient # mysqlclient.pc from original package
+ - apt-get install -y ./libmariadb3_*.deb ./mariadb-common_*.deb
+ - pkg-config --list-all
+ - apt-get install -y ./libmariadb-dev_*.deb
+ - pkg-config --list-all
+ - apt-get install -y ./libmariadb-dev-compat_*.deb
+ - pkg-config --cflags mysqlclient # mysqlclient.pc from compat package
+ - pkg-config --list-all
+ - apt-get install -y ./libmariadbd19_*.deb
+ - pkg-config --list-all
+ - apt-get install -y ./libmariadbd-dev_*.deb
+ - pkg-config --list-all
+ - apt-get install -y default-libmysqlclient-dev default-libmysqld-dev
+ - *test-verify-libs
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+default-libmysqlclient-dev Sid upgrade:
+ stage: upgrade in Sid
+ needs:
+ - job: build
+ image: debian:${RELEASE}
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt-get install -y pkg-config default-libmysqlclient-dev default-libmysqld-dev
+ - pkg-config --list-all
+ - *test-install-all-libs
+ - *test-verify-libs
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+default-libmysqlclient-dev Buster upgrade:
+ stage: upgrade from Buster/Stretch
+ needs:
+ - job: build
+ image: debian:buster
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt-get install -y pkg-config default-libmysqlclient-dev
+ - pkg-config --list-all
+ - *test-enable-sid-repos
+ - *test-install-all-libs
+ - *test-verify-libs
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+default-libmysqlclient-dev Stretch upgrade:
+ stage: upgrade from Buster/Stretch
+ needs:
+ - job: build
+ image: debian:stretch
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt-get install -y pkg-config default-libmysqlclient-dev
+ - pkg-config --list-all
+ - *test-enable-sid-repos
+ - *test-install-all-libs
+ - *test-verify-libs
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb-connector-c Stretch upgrade:
+ stage: upgrade from Buster/Stretch
+ needs:
+ - job: build
+ image: debian:stretch
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt-get install -y pkg-config libmariadb2 libmariadb-dev libmariadb-dev-compat
+ - pkg-config --list-all
+ - *test-enable-sid-repos
+ - *test-install-all-libs
+ - *test-verify-libs
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+# 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 Sid to mariadb-10.5 upgrade:
+ stage: upgrade in Sid
+ needs:
+ - job: build
+ image: debian:sid
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ # The postinst fails often if 'ps' is missing from system, so install procps
+ - apt-get install -y procps mysql-server 'libmysqlc*'
+ - *test-verify-initial
+ - *test-install
+ - service mysql status
+ - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+# 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 Focal to mariadb-10.5 upgrade:
+ stage: upgrade extras
+ needs:
+ - job: build buster-backports
+ image: debian:buster
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ # Add Ubuntu Focal archive keys and repository
+ - apt-get install --no-install-recommends --yes 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 871920D1991BC93C 3B4FE6ACC0B21F32
+ - echo 'deb http://archive.ubuntu.com/ubuntu/ focal main restricted' > /etc/apt/sources.list.d/ubuntu.list
+ - apt-get update
+ # First install often fail due to bug in mysql-8.0
+ - apt-get install -y mysql-server 'libmysqlc*' || true
+ - sleep 10 && apt-get install -f
+ - *test-verify-initial
+ # Enable backports to make galera-4 available
+ - echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/backports.list && apt-get update
+ - *test-install
+ - service mysql status
+ - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mysql-5.7 Bionic to mariadb-10.5 upgrade:
+ stage: upgrade extras
+ needs:
+ - job: build stretch-backports
+ image: debian:stretch
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ # Add Ubuntu Bionic archive keys and repository
+ - apt-get install --no-install-recommends --yes 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 871920D1991BC93C 3B4FE6ACC0B21F32
+ - echo 'deb http://archive.ubuntu.com/ubuntu/ bionic main restricted' > /etc/apt/sources.list.d/ubuntu.list
+ - apt-get update
+ - apt-get install -y 'mysql*' 'libmysqlc*'
+ - *test-verify-initial
+ # Enable backports to make libzstd1, rocksdb-tools
+ - echo 'deb http://deb.debian.org/debian stretch-backports main' >> /etc/apt/sources.list.d/backports.list
+ # Enable backports to make galera-4 available
+ - echo 'deb http://deb.debian.org/debian stretch-backports-sloppy main' >> /etc/apt/sources.list.d/backports.list && apt-get update
+ # Remove plugin that requires libcurl4, not available in Debian Stretch
+ - rm mariadb-plugin-s3*.deb
+ - *test-install
+ - service mysql status
+ - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb.org-10.5 to mariadb-10.5 upgrade:
+ stage: upgrade extras
+ needs:
+ - job: build
+ image: debian:sid
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt install -y curl
+ - curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
+ - echo 'deb http://mirror.one.com/mariadb/repo/10.5/debian sid main' > /etc/apt/sources.list.d/mariadb.list
+ - apt-get update
+ # The 10.5.9 release is missing mariadb-plugin-columnstore, define all other packages but it to avoid hitting the error:
+ # The following packages have unmet dependencies:
+ # mariadb-plugin-columnstore : Depends: mariadb-server-10.5 (= 1:10.5.8+maria~sid) but 1:10.5.9+maria~sid is to be installed
+ - apt-get install -y libmariadb3 'libmariadb-*' 'libmariadbd*' 'mariadb-c*' 'mariadb-b*' 'mariadb-s*' 'mariadb-t*' 'mariadb-plugin-con*' 'mariadb-plugin-cr*' 'mariadb-plugin-g*' 'mariadb-plugin-m*' 'mariadb-plugin-o*' 'mariadb-plugin-s*'
+ # Once 10.5.10 is out, revert back to:
+ # Package libmariadbclient-dev from mariadb.org conflicts with libmariadb-dev in Sid, so cannot use wildcard that would include it
+ #- apt-get install -y 'mariadb*' libmariadb3 'libmariadb-*' 'libmariadbd*'
+ - *test-verify-initial
+ # Install MariaDB built in this commit
+ # Force downgrades so our version installs on top of upstream revision, e.g. 1:10.5.5-1 vs 1:10.5.5+mariadb~sid
+ - apt-get install -y --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
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb.org-10.4 to mariadb-10.5 upgrade:
+ stage: upgrade extras
+ needs:
+ - job: build
+ image: debian:sid
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt install -y curl systemctl # systemctl shim needed on platforms that don't have systemd
+ - curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
+ - echo 'deb http://mirror.one.com/mariadb/repo/10.4/debian sid main' > /etc/apt/sources.list.d/mariadb.list
+ - apt-get update
+ - *test-install-readline-in-sid-for-backwards-compat
+ - apt-get install -y 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
+ - 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
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb.org-10.3 to mariadb-10.5 upgrade:
+ stage: upgrade extras
+ needs:
+ - job: build
+ image: debian:sid
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt install -y curl
+ - curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
+ - echo 'deb http://mirror.one.com/mariadb/repo/10.3/debian sid main' > /etc/apt/sources.list.d/mariadb.list
+ - apt-get update
+ - *test-install-readline-in-sid-for-backwards-compat
+ - apt-get install -y mariadb-server-10.3
+ # 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"
+ - echo 'SHOW DATABASES;' | mysql --defaults-file=/etc/mysql/debian.cnf
+ - mysql --defaults-file=/etc/mysql/debian.cnf -e "SELECT Host,User,plugin,authentication_string FROM user;" mysql
+ - mysql --defaults-file=/etc/mysql/debian.cnf -e "SELECT * FROM plugin;" mysql
+ - *test-install
+ - service mysql status
+ - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mariadb.org-10.2 to mariadb-10.5 upgrade:
+ stage: upgrade extras
+ needs:
+ - job: build
+ image: debian:sid
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - apt install -y curl
+ - curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
+ - echo 'deb http://mirror.one.com/mariadb/repo/10.2/debian sid main' > /etc/apt/sources.list.d/mariadb.list
+ - apt-get update
+ - *test-install-readline-in-sid-for-backwards-compat
+ - apt-get install -y 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"
+ - echo 'SHOW DATABASES;' | mysql --defaults-file=/etc/mysql/debian.cnf
+ - mysql --defaults-file=/etc/mysql/debian.cnf -e "SELECT Host,User,plugin,authentication_string FROM user;" mysql
+ - mysql --defaults-file=/etc/mysql/debian.cnf -e "SELECT * FROM plugin;" mysql
+ - *test-install
+ - service mysql status
+ - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+mysql.com-5.7 to mariadb-10.5 upgrade:
+ stage: upgrade extras
+ needs:
+ - job: build buster-backports
+ image: debian:buster
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - |
+ apt-get install --no-install-recommends --yes 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 8C718D3B5072E1F5
+ echo 'deb https://repo.mysql.com/apt/debian/ buster mysql-5.7' > /etc/apt/sources.list.d/mysql.list
+ apt-get update
+ apt-get install -y 'mysql*' 'libmysqlc*'
+ - *test-verify-initial
+ # Enable backports to make galera-4 available
+ - echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list.d/backports.list && apt-get update
+ - *test-install
+ - service mysql status
+ - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
+
+percona-xtradb-5.7 to mariadb-10.5 upgrade (MDEV-22679):
+ stage: upgrade extras
+ needs:
+ - job: build buster-backports
+ image: debian:buster
+ artifacts:
+ when: always
+ name: "$CI_BUILD_NAME"
+ paths:
+ - ${WORKING_DIR}/debug
+ script:
+ - *test-prepare-container
+ - |
+ apt-get install --no-install-recommends --yes 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 9334A25F8507EFA5
+ echo 'deb https://repo.percona.com/apt/ buster main' > /etc/apt/sources.list.d/mysql.list
+ apt-get update
+ apt-get install -y percona-xtradb-cluster-full-57 percona-xtrabackup-24 percona-toolkit pmm2-client
+ - service mysql status
+ - *test-verify-initial
+ # Enable backports to make galera-4 available
+ - echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list.d/backports.list && apt-get update
+ - *test-install
+ - service mysql status
+ - sleep 5 # Give the mysql_upgrade a bit of time to complete before querying the server
+ - *test-verify-final
+ variables:
+ GIT_STRATEGY: none
+ except:
+ variables:
+ - $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/