Skip to content

Commit 885917d

Browse files
ci: DRY up MySQL Setup (#18815)
Signed-off-by: Arthur Schreiber <[email protected]>
1 parent 5203ed4 commit 885917d

File tree

95 files changed

+878
-1817
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+878
-1817
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: 'Setup MySQL'
2+
description: 'Set up MySQL server for use in GitHub Actions workflows'
3+
inputs:
4+
flavor:
5+
description: 'The flavor of MySQL to use (e.g. mysql-5.7, mysql-8.0, mysql-8.4)'
6+
required: true
7+
runs:
8+
using: "composite"
9+
steps:
10+
- name: Setup MySQL
11+
shell: bash
12+
run: |
13+
export DEBIAN_FRONTEND="noninteractive"
14+
sudo apt-get update
15+
16+
# Uninstall any previously installed MySQL first
17+
# sudo systemctl stop apparmor
18+
sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common
19+
sudo apt-get -y autoremove
20+
sudo apt-get -y autoclean
21+
# sudo deluser mysql
22+
sudo rm -rf /var/lib/mysql
23+
sudo rm -rf /etc/mysql
24+
25+
# We have to install this old version of libaio1. See also:
26+
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
27+
wget http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb && \
28+
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb && \
29+
rm libaio1_0.3.112-13build1_amd64.deb
30+
31+
# Get key to latest MySQL repo
32+
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
33+
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
34+
35+
if [[ "${{ inputs.flavor }}" == "mysql-5.7" ]]; then
36+
# Bionic packages are still compatible for Jammy since there's no MySQL 5.7
37+
# packages for Jammy.
38+
echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections
39+
echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | sudo debconf-set-selections
40+
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
41+
sudo apt-get update
42+
# libtinfo5 is also needed for older MySQL 5.7 builds.
43+
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
44+
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
45+
sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses6
46+
elif [[ "${{ inputs.flavor }}" == "mysql-8.0" ]]; then
47+
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections
48+
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
49+
sudo apt-get update
50+
sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
51+
elif [[ "${{ inputs.flavor }}" == "mysql-8.4" ]]; then
52+
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
53+
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
54+
sudo apt-get update
55+
sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
56+
else
57+
echo "Unsupported MySQL flavor: ${{ inputs.flavor }}"
58+
exit 1
59+
fi
60+
61+
sudo service mysql stop
62+
sudo bash -c "echo '/usr/sbin/mysqld { }' > /etc/apparmor.d/usr.sbin.mysqld" # https://bugs.launchpad.net/ubuntu/+source/mariadb-10.1/+bug/1806263
63+
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
64+
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld || echo "could not remove mysqld profile"

.github/workflows/cluster_endtoend_12.yml

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,24 @@ jobs:
7575
if: steps.changes.outputs.end_to_end == 'true'
7676
uses: ./.github/actions/tune-os
7777

78+
- name: Setup MySQL
79+
if: steps.changes.outputs.end_to_end == 'true'
80+
uses: ./.github/actions/setup-mysql
81+
with:
82+
flavor: mysql-8.4
83+
7884
- name: Get dependencies
7985
if: steps.changes.outputs.end_to_end == 'true'
8086
timeout-minutes: 10
8187
run: |
8288
83-
# Get key to latest MySQL repo
84-
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
85-
# Setup MySQL 8.4
86-
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
87-
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
88-
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
89-
sudo apt-get -qq update
90-
91-
# We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
92-
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
93-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
94-
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
95-
# libtinfo5 is also needed for older MySQL 5.7 builds.
96-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
97-
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
89+
sudo apt-get -qq install -y mysql-shell
9890
9991
# Install everything else we need, and configure
100-
sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
92+
sudo apt-get -qq install -y make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
10193
102-
sudo service mysql stop
10394
sudo service etcd stop
104-
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
105-
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
95+
10696
go mod download
10797
10898
# install JUnit report formatter

.github/workflows/cluster_endtoend_13.yml

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,24 @@ jobs:
7575
if: steps.changes.outputs.end_to_end == 'true'
7676
uses: ./.github/actions/tune-os
7777

78+
- name: Setup MySQL
79+
if: steps.changes.outputs.end_to_end == 'true'
80+
uses: ./.github/actions/setup-mysql
81+
with:
82+
flavor: mysql-8.4
83+
7884
- name: Get dependencies
7985
if: steps.changes.outputs.end_to_end == 'true'
8086
timeout-minutes: 10
8187
run: |
8288
83-
# Get key to latest MySQL repo
84-
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
85-
# Setup MySQL 8.4
86-
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
87-
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
88-
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
89-
sudo apt-get -qq update
90-
91-
# We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
92-
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
93-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
94-
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
95-
# libtinfo5 is also needed for older MySQL 5.7 builds.
96-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
97-
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
89+
sudo apt-get -qq install -y mysql-shell
9890
9991
# Install everything else we need, and configure
100-
sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
92+
sudo apt-get -qq install -y make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
10193
102-
sudo service mysql stop
10394
sudo service etcd stop
104-
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
105-
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
95+
10696
go mod download
10797
10898
# install JUnit report formatter

.github/workflows/cluster_endtoend_15.yml

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,24 @@ jobs:
7575
if: steps.changes.outputs.end_to_end == 'true'
7676
uses: ./.github/actions/tune-os
7777

78+
- name: Setup MySQL
79+
if: steps.changes.outputs.end_to_end == 'true'
80+
uses: ./.github/actions/setup-mysql
81+
with:
82+
flavor: mysql-8.4
83+
7884
- name: Get dependencies
7985
if: steps.changes.outputs.end_to_end == 'true'
8086
timeout-minutes: 10
8187
run: |
8288
83-
# Get key to latest MySQL repo
84-
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
85-
# Setup MySQL 8.4
86-
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
87-
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
88-
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
89-
sudo apt-get -qq update
90-
91-
# We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
92-
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
93-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
94-
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
95-
# libtinfo5 is also needed for older MySQL 5.7 builds.
96-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
97-
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
89+
sudo apt-get -qq install -y mysql-shell
9890
9991
# Install everything else we need, and configure
100-
sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
92+
sudo apt-get -qq install -y make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
10193
102-
sudo service mysql stop
10394
sudo service etcd stop
104-
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
105-
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
95+
10696
go mod download
10797
10898
# install JUnit report formatter

.github/workflows/cluster_endtoend_18.yml

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,24 @@ jobs:
7575
if: steps.changes.outputs.end_to_end == 'true'
7676
uses: ./.github/actions/tune-os
7777

78+
- name: Setup MySQL
79+
if: steps.changes.outputs.end_to_end == 'true'
80+
uses: ./.github/actions/setup-mysql
81+
with:
82+
flavor: mysql-8.4
83+
7884
- name: Get dependencies
7985
if: steps.changes.outputs.end_to_end == 'true'
8086
timeout-minutes: 10
8187
run: |
8288
83-
# Get key to latest MySQL repo
84-
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
85-
# Setup MySQL 8.4
86-
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
87-
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
88-
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
89-
sudo apt-get -qq update
90-
91-
# We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
92-
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
93-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
94-
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
95-
# libtinfo5 is also needed for older MySQL 5.7 builds.
96-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
97-
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
89+
sudo apt-get -qq install -y mysql-shell
9890
9991
# Install everything else we need, and configure
100-
sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
92+
sudo apt-get -qq install -y make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
10193
102-
sudo service mysql stop
10394
sudo service etcd stop
104-
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
105-
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
95+
10696
go mod download
10797
10898
# install JUnit report formatter

.github/workflows/cluster_endtoend_21.yml

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,24 @@ jobs:
7575
if: steps.changes.outputs.end_to_end == 'true'
7676
uses: ./.github/actions/tune-os
7777

78+
- name: Setup MySQL
79+
if: steps.changes.outputs.end_to_end == 'true'
80+
uses: ./.github/actions/setup-mysql
81+
with:
82+
flavor: mysql-8.4
83+
7884
- name: Get dependencies
7985
if: steps.changes.outputs.end_to_end == 'true'
8086
timeout-minutes: 10
8187
run: |
8288
83-
# Get key to latest MySQL repo
84-
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
85-
# Setup MySQL 8.4
86-
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
87-
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
88-
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
89-
sudo apt-get -qq update
90-
91-
# We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
92-
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
93-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
94-
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
95-
# libtinfo5 is also needed for older MySQL 5.7 builds.
96-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
97-
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
89+
sudo apt-get -qq install -y mysql-shell
9890
9991
# Install everything else we need, and configure
100-
sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
92+
sudo apt-get -qq install -y make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
10193
102-
sudo service mysql stop
10394
sudo service etcd stop
104-
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
105-
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
95+
10696
go mod download
10797
10898
# install JUnit report formatter

.github/workflows/cluster_endtoend_backup_pitr.yml

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,24 @@ jobs:
7575
if: steps.changes.outputs.end_to_end == 'true'
7676
uses: ./.github/actions/tune-os
7777

78+
- name: Setup MySQL
79+
if: steps.changes.outputs.end_to_end == 'true'
80+
uses: ./.github/actions/setup-mysql
81+
with:
82+
flavor: mysql-8.4
83+
7884
- name: Get dependencies
7985
if: steps.changes.outputs.end_to_end == 'true'
8086
timeout-minutes: 10
8187
run: |
8288
83-
# Get key to latest MySQL repo
84-
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
85-
# Setup MySQL 8.4
86-
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
87-
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
88-
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
89-
sudo apt-get -qq update
90-
91-
# We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
92-
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
93-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
94-
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
95-
# libtinfo5 is also needed for older MySQL 5.7 builds.
96-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
97-
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
89+
sudo apt-get -qq install -y mysql-shell
9890
9991
# Install everything else we need, and configure
100-
sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
92+
sudo apt-get -qq install -y make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
10193
102-
sudo service mysql stop
10394
sudo service etcd stop
104-
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
105-
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
95+
10696
go mod download
10797
10898
# install JUnit report formatter

.github/workflows/cluster_endtoend_backup_pitr_mysqlshell.yml

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,24 @@ jobs:
7575
if: steps.changes.outputs.end_to_end == 'true'
7676
uses: ./.github/actions/tune-os
7777

78+
- name: Setup MySQL
79+
if: steps.changes.outputs.end_to_end == 'true'
80+
uses: ./.github/actions/setup-mysql
81+
with:
82+
flavor: mysql-8.4
83+
7884
- name: Get dependencies
7985
if: steps.changes.outputs.end_to_end == 'true'
8086
timeout-minutes: 10
8187
run: |
8288
83-
# Get key to latest MySQL repo
84-
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
85-
# Setup MySQL 8.4
86-
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
87-
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.4-lts | sudo debconf-set-selections
88-
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
89-
sudo apt-get -qq update
90-
91-
# We have to install this old version of libaio1 in case we end up testing with MySQL 5.7. See also:
92-
# https://bugs.launchpad.net/ubuntu/+source/libaio/+bug/2067501
93-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb
94-
sudo dpkg -i libaio1_0.3.112-13build1_amd64.deb
95-
# libtinfo5 is also needed for older MySQL 5.7 builds.
96-
curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
97-
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_amd64.deb
89+
sudo apt-get -qq install -y mysql-shell
9890
9991
# Install everything else we need, and configure
100-
sudo apt-get -qq install -y mysql-server mysql-shell mysql-client make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
92+
sudo apt-get -qq install -y make unzip g++ etcd-client etcd-server curl git wget xz-utils libncurses6
10193
102-
sudo service mysql stop
10394
sudo service etcd stop
104-
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
105-
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
95+
10696
go mod download
10797
10898
# install JUnit report formatter

0 commit comments

Comments
 (0)