mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
884 lines
34 KiB
YAML
884 lines
34 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:
|
|
DEB_BUILD_OPTIONS: "nocheck noautodbgsym"
|
|
RELEASE: bullseye
|
|
SALSA_CI_DISABLE_REPROTEST: 1
|
|
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 in Bullseye
|
|
- upgrade from Buster
|
|
- upgrade extras
|
|
- test extras
|
|
- publish # Stage referenced by Salsa-CI template aptly stanza, so must exist even though not used
|
|
|
|
build:
|
|
extends: .build-package
|
|
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}
|
|
|
|
build i386:
|
|
extends: .build-package-i386
|
|
script:
|
|
- *autobake-deb-steps
|
|
|
|
build sid:
|
|
extends: .build-package
|
|
script:
|
|
- *autobake-deb-steps
|
|
variables:
|
|
RELEASE: sid
|
|
|
|
# Build native deb without using autobake-deb.sh. This way we will detect
|
|
# if the debian/control file and other packaging is correct as-is for Debian Sid.
|
|
build native deb amd64:
|
|
extends: .build-package
|
|
|
|
build native deb i386:
|
|
extends: .build-package-i386
|
|
|
|
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
|
|
# Build log checker needs a .build file and thus only works on native build
|
|
needs:
|
|
- job: build native deb amd64
|
|
|
|
# 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 -qq
|
|
|
|
.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-bullseye-repos: &test-enable-bullseye-repos
|
|
# Replace any old repos with just Sid
|
|
- echo 'deb http://deb.debian.org/debian bullseye main' > /etc/apt/sources.list
|
|
# Upgrade minimal stack first
|
|
- apt-get update -qq
|
|
- apt-get install -y apt
|
|
|
|
.test-enable-bullseye-backports-repos: &test-enable-bullseye-backports-repos |
|
|
# Enable bullseye-backports (assumes environment already Debian Bullseye)
|
|
echo 'deb http://deb.debian.org/debian bullseye-backports main' > /etc/apt/sources.list.d/bullseye-backports.list
|
|
# Increase default backports priority policy from '100' to '500' so it can actually be used
|
|
cat << EOF > /etc/apt/preferences.d/enable-backports-to-satisfy-dependencies
|
|
Package: *
|
|
Pin: release n=bullseye-*
|
|
Pin-Priority: 500
|
|
EOF
|
|
apt-get update -qq
|
|
|
|
.test-enable-buster-backports-repos: &test-enable-buster-backports-repos |
|
|
# Enable buster-backports (assumes environment already Debian Buster)
|
|
echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.list
|
|
# Increase default backports priority policy from '100' to '500' so it can actually be used
|
|
cat << EOF > /etc/apt/preferences.d/enable-backports-to-satisfy-dependencies
|
|
Package: *
|
|
Pin: release n=buster-*
|
|
Pin-Priority: 500
|
|
EOF
|
|
apt-get update -qq
|
|
|
|
.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 Bullseye upgrade:
|
|
stage: upgrade in Bullseye
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
artifacts:
|
|
when: always
|
|
name: "$CI_BUILD_NAME"
|
|
paths:
|
|
- ${WORKING_DIR}/debug
|
|
script:
|
|
- *test-prepare-container
|
|
# Install everything MariaDB 10.5 currently in Debian Bullseye
|
|
- apt-get install -y 'default-mysql*' 'mariadb-*' 'libmariadb*'
|
|
- *test-verify-initial
|
|
- *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 with Buster backports 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
|
|
# Install everything MariaDB 10.3 currently in Debian Buster
|
|
- apt-get install -y 'default-mysql*' 'mariadb-*' 'libmariadb*'
|
|
# Verify installation of MariaDB from Buster
|
|
- *test-verify-initial
|
|
# Buster backports is needed for liburing1 (>= 0.7) and galera-4 (>= 26.4)
|
|
- *test-enable-buster-backports-repos
|
|
- *test-install
|
|
# mariadb-10.3 in Buster ships a /etc/init.d/mysql so it should continue to work
|
|
- 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-10.3 Buster upgrade:
|
|
stage: upgrade from Buster
|
|
needs:
|
|
- job: build
|
|
image: debian:buster
|
|
artifacts:
|
|
when: always
|
|
name: "$CI_BUILD_NAME"
|
|
paths:
|
|
- ${WORKING_DIR}/debug
|
|
script:
|
|
- *test-prepare-container
|
|
# Install everything MariaDB 10.3 currently in Debian Buster
|
|
- apt-get install -y 'default-mysql*' 'mariadb-*' 'libmariadb*'
|
|
# Verify installation of MariaDB from Buster
|
|
- *test-verify-initial
|
|
- *test-enable-bullseye-repos
|
|
- *test-install
|
|
# mariadb-10.3 in Buster ships a /etc/init.d/mysql so it should continue to work
|
|
- 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)$/
|
|
|
|
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/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
|
|
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 avoid an 800+ line 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)$/
|
|
|
|
default-libmysqlclient-dev Bullseye upgrade:
|
|
stage: upgrade in Bullseye
|
|
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
|
|
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-bullseye-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.
|
|
#
|
|
# Testing on Focal binaries on Buster works. Using Jammy binaries on Bullseye
|
|
# does not work as libc in Jammy is too new.
|
|
mysql-8.0 from Ubuntu 22.04 upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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 -qq
|
|
# 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
|
|
- *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.11 to mariadb upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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 https://deb.mariadb.org/10.11/debian ${RELEASE} main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update
|
|
- apt-get install -y 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:10.9.1-1 vs 1:10.9.1+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.10 to mariadb upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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 https://deb.mariadb.org/10.10/debian ${RELEASE} main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update
|
|
- apt-get install -y 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:10.9.1-1 vs 1:10.9.1+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.9 to mariadb upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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 https://deb.mariadb.org/10.9/debian ${RELEASE} main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update
|
|
- apt-get install -y 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:10.9.1-1 vs 1:10.9.1+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.8 to mariadb upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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 https://deb.mariadb.org/10.8/debian ${RELEASE} main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update
|
|
- apt-get install -y mariadb-server-10.8
|
|
- *test-verify-initial
|
|
# Install MariaDB built in this commit
|
|
# Force downgrades so our version installs on top of upstream revision, e.g. 1:10.9.1-1 vs 1:10.9.1+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)$/
|
|
|
|
# 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 upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
artifacts:
|
|
when: always
|
|
name: "$CI_BUILD_NAME"
|
|
paths:
|
|
- ${WORKING_DIR}/debug
|
|
script:
|
|
- *test-prepare-container
|
|
- apt-get install --no-install-recommends --yes ca-certificates curl systemctl
|
|
- curl -sS "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x859be8d7c586f538430b19c2467b942d3a79bd29" -o /etc/apt/trusted.gpg.d/mysql.asc
|
|
- echo "deb https://repo.mysql.com/apt/debian/ bullseye mysql-cluster-8.0" > /etc/apt/sources.list.d/mysql.list
|
|
- apt-get update -qq
|
|
- apt-get install -y 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-install
|
|
# 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
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
except:
|
|
variables:
|
|
- $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
|
|
|
|
mariadb.org-10.7 to mariadb upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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 https://deb.mariadb.org/10.7/debian ${RELEASE} main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update
|
|
- apt-get install -y mariadb-server-10.7
|
|
- *test-verify-initial
|
|
# Install MariaDB built in this commit
|
|
# Force downgrades so our version installs on top of upstream revision, e.g. 1:10.9.1-1 vs 1:10.9.1+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.6 to mariadb upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
artifacts:
|
|
when: always
|
|
name: "$CI_BUILD_NAME"
|
|
paths:
|
|
- ${WORKING_DIR}/debug
|
|
script:
|
|
- *test-prepare-container
|
|
- apt-get -qq install --no-install-recommends --yes ca-certificates curl
|
|
- curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
|
|
- echo "deb https://deb.mariadb.org/10.6/debian ${RELEASE} main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update -qq
|
|
- apt-get install -y mariadb-server-10.6
|
|
- *test-verify-initial
|
|
# Install MariaDB built in this commit
|
|
# Force downgrades so our version installs on top of upstream revision, e.g. 1:10.9.1-1 vs 1:10.9.1+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.5 to mariadb upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
artifacts:
|
|
when: always
|
|
name: "$CI_BUILD_NAME"
|
|
paths:
|
|
- ${WORKING_DIR}/debug
|
|
script:
|
|
- *test-prepare-container
|
|
- apt-get -qq install --no-install-recommends --yes ca-certificates curl
|
|
- curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
|
|
- echo "deb https://archive.mariadb.org/mariadb-10.5/repo/debian ${RELEASE} main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update -qq
|
|
- apt-get install -y mariadb-server-10.5
|
|
- *test-verify-initial
|
|
- *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.org-10.4 to mariadb with Buster backports 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 -qq install --no-install-recommends --yes ca-certificates curl
|
|
- curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
|
|
- echo "deb https://archive.mariadb.org/mariadb-10.4/repo/debian buster main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update -qq
|
|
- 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
|
|
# Buster backports is needed for liburing1 (>= 0.7) and galera-4 (>= 26.4)
|
|
- *test-enable-buster-backports-repos
|
|
- *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 with Buster backports upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build bullseye-backports
|
|
image: debian:bullseye
|
|
artifacts:
|
|
when: always
|
|
name: "$CI_BUILD_NAME"
|
|
paths:
|
|
- ${WORKING_DIR}/debug
|
|
script:
|
|
- *test-prepare-container
|
|
- apt-get -qq install --no-install-recommends --yes ca-certificates curl
|
|
- curl -sS https://mariadb.org/mariadb_release_signing_key.asc -o /etc/apt/trusted.gpg.d/mariadb.asc
|
|
- echo "deb https://archive.mariadb.org/mariadb-10.3/repo/debian buster main" > /etc/apt/sources.list.d/mariadb.list
|
|
- apt-get update -qq
|
|
- apt-get install -y mariadb-server-10.3
|
|
- *test-verify-initial
|
|
# Buster backports is needed for liburing1 (>= 0.7) and galera-4 (>= 26.4)
|
|
- *test-enable-buster-backports-repos
|
|
- *test-install
|
|
- service mysql 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
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
except:
|
|
variables:
|
|
- $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
|
|
|
|
# archive.mariadb.org has for 10.2 only Stretch, so we can't test upgrades to
|
|
# 10.6 with only Buster and Bullseye builds
|
|
|
|
mysql.com-5.7 upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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 467B942D3A79BD29
|
|
echo "deb https://repo.mysql.com/apt/debian/ bullseye mysql-5.7" > /etc/apt/sources.list.d/mysql.list
|
|
apt-get update -qq
|
|
apt-get install -y 'mysql*' 'libmysqlc*'
|
|
- *test-verify-initial
|
|
- *test-install
|
|
# 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 mariadb status # There is no init.d/mysql in MariaDB 10.5+
|
|
- sleep 15 # Give the mysql_upgrade a bit of extra time to complete with MySQL 5.7 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 upgrade:
|
|
stage: upgrade extras
|
|
needs:
|
|
- job: build
|
|
image: debian:${RELEASE}
|
|
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/ ${RELEASE} main" > /etc/apt/sources.list.d/mysql.list
|
|
apt-get update -qq
|
|
apt-get install -y percona-xtradb-cluster-full-57 percona-xtrabackup-24 percona-toolkit pmm2-client
|
|
- service mysql status
|
|
- *test-verify-initial
|
|
- *test-install
|
|
- service mysql 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
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
except:
|
|
variables:
|
|
- $CI_COMMIT_TAG != null && $SALSA_CI_ENABLE_PIPELINE_ON_TAGS !~ /^(1|yes|true)$/
|