зеркало из https://github.com/github/vitess-gh.git
191 строка
7.4 KiB
YAML
191 строка
7.4 KiB
YAML
name: Upgrade Downgrade Testing Reparent New VTTablet
|
|
on:
|
|
push:
|
|
pull_request:
|
|
|
|
concurrency:
|
|
group: format('{0}-{1}', ${{ github.ref }}, 'Upgrade Downgrade Testing Reparent New VTTablet')
|
|
cancel-in-progress: true
|
|
|
|
# This test ensures that our end-to-end tests work using Vitess components
|
|
# (vtctl, vttablet, etc) built on different versions.
|
|
|
|
jobs:
|
|
get_next_release:
|
|
if: always()
|
|
name: Get latest release
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
next_release: ${{ steps.output-next-release-ref.outputs.next_release_ref }}
|
|
|
|
steps:
|
|
- name: Check out to HEAD
|
|
uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set output with latest release branch
|
|
id: output-next-release-ref
|
|
run: |
|
|
next_release_ref=$(./tools/get_next_release.sh ${{github.base_ref}} ${{github.ref}})
|
|
echo $next_release_ref
|
|
echo "::set-output name=next_release_ref::${next_release_ref}"
|
|
|
|
upgrade_downgrade_test:
|
|
if: always() && (needs.get_next_release.result == 'success')
|
|
name: Run Upgrade Downgrade Test
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- get_next_release
|
|
|
|
steps:
|
|
- name: Check if workflow needs to be skipped
|
|
id: skip-workflow
|
|
run: |
|
|
skip='false'
|
|
if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then
|
|
skip='true'
|
|
fi
|
|
if [[ "${{needs.get_next_release.outputs.next_release}}" == "" ]]; then
|
|
skip='true'
|
|
fi
|
|
echo Skip ${skip}
|
|
echo "::set-output name=skip-workflow::${skip}"
|
|
|
|
- name: Check out commit's code
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false'
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Check for changes in relevant files
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false'
|
|
uses: frouioui/paths-filter@main
|
|
id: changes
|
|
with:
|
|
token: ''
|
|
filters: |
|
|
end_to_end:
|
|
- 'go/**'
|
|
- 'go/**/*.go'
|
|
- 'test.go'
|
|
- 'Makefile'
|
|
- 'build.env'
|
|
- 'go.[sumod]'
|
|
- 'proto/*.proto'
|
|
- 'tools/**'
|
|
- 'config/**'
|
|
- 'bootstrap.sh'
|
|
- '.github/workflows/upgrade_downgrade_test_reparent_new_vttablet.yml'
|
|
|
|
- name: Set up Go
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: 1.19.3
|
|
|
|
- name: Set up python
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
uses: actions/setup-python@v2
|
|
|
|
- name: Tune the OS
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
run: |
|
|
echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range
|
|
|
|
- name: Get base dependencies
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
run: |
|
|
sudo DEBIAN_FRONTEND="noninteractive" apt-get update
|
|
# Uninstall any nextly installed MySQL first
|
|
sudo systemctl stop apparmor
|
|
sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common
|
|
sudo apt-get -y autoremove
|
|
sudo apt-get -y autoclean
|
|
sudo deluser mysql
|
|
sudo rm -rf /var/lib/mysql
|
|
sudo rm -rf /etc/mysql
|
|
# Install mysql80
|
|
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
|
|
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb
|
|
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections
|
|
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
|
|
sudo apt-get update
|
|
sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
|
|
# Install everything else we need, and configure
|
|
sudo apt-get install -y make unzip g++ etcd curl git wget eatmydata
|
|
sudo service mysql stop
|
|
sudo service etcd stop
|
|
sudo bash -c "echo '/usr/sbin/mysqld { }' > /etc/apparmor.d/usr.sbin.mysqld" # https://bugs.launchpad.net/ubuntu/+source/mariadb-10.1/+bug/1806263
|
|
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
|
|
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld || echo "could not remove mysqld profile"
|
|
|
|
# install JUnit report formatter
|
|
go install github.com/vitessio/go-junit-report@HEAD
|
|
|
|
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
|
|
sudo apt-get install -y gnupg2
|
|
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
|
|
sudo apt-get update
|
|
sudo apt-get install percona-xtrabackup-24
|
|
|
|
# Checkout to the next release of Vitess
|
|
- name: Check out other version's code (${{ needs.get_next_release.outputs.next_release }})
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
uses: actions/checkout@v2
|
|
with:
|
|
ref: ${{ needs.get_next_release.outputs.next_release }}
|
|
|
|
- name: Get dependencies for the next release
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
run: |
|
|
go mod download
|
|
|
|
- name: Building next release's binaries
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
timeout-minutes: 10
|
|
run: |
|
|
source build.env
|
|
make build
|
|
mkdir -p /tmp/vitess-build-other/
|
|
cp -R bin /tmp/vitess-build-other/
|
|
rm -Rf bin/*
|
|
|
|
# Checkout to this build's commit
|
|
- name: Check out commit's code
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Get dependencies for this commit
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
run: |
|
|
go mod download
|
|
|
|
- name: Building the binaries for this commit
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
timeout-minutes: 10
|
|
run: |
|
|
source build.env
|
|
make build
|
|
mkdir -p /tmp/vitess-build-current/
|
|
cp -R bin /tmp/vitess-build-current/
|
|
|
|
# Swap the binaries. Use vtctl version n and keep vttablet at version n+1
|
|
- name: Use current version Vtctl, and other version VTTablet
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
run: |
|
|
source build.env
|
|
|
|
rm -f $PWD/bin/vttablet
|
|
cp /tmp/vitess-build-other/bin/vttablet $PWD/bin/vttablet
|
|
vtctl --version
|
|
vttablet --version
|
|
|
|
# Running a test with vtctl at version n and vttablet at version n+1
|
|
- name: Run reparent tests (vtctl=N, vttablet=N+1)
|
|
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
|
|
run: |
|
|
rm -rf /tmp/vtdataroot
|
|
mkdir -p /tmp/vtdataroot
|
|
|
|
source build.env
|
|
eatmydata -- go run test.go -skip-build -keep-data -docker=false -print-log -follow -tag upgrade_downgrade_reparent
|