vitess.io/vitess@v0.16.2/.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml (about) 1 name: Upgrade Downgrade Testing Reparent Old VTTablet 2 on: 3 push: 4 pull_request: 5 6 concurrency: 7 group: format('{0}-{1}', ${{ github.ref }}, 'Upgrade Downgrade Testing Reparent Old VTTablet') 8 cancel-in-progress: true 9 10 # This test ensures that our end-to-end tests work using Vitess components 11 # (vtctl, vttablet, etc) built on different versions. 12 13 jobs: 14 get_previous_release: 15 if: always() 16 name: Get Previous Release - Reparent Old VTTablet 17 runs-on: ubuntu-22.04 18 outputs: 19 previous_release: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} 20 21 steps: 22 - name: Check out to HEAD 23 uses: actions/checkout@v3 24 with: 25 fetch-depth: 0 26 27 - name: Set output with latest release branch 28 id: output-previous-release-ref 29 run: | 30 previous_release_ref=$(./tools/get_previous_release.sh ${{github.base_ref}} ${{github.ref}}) 31 echo $previous_release_ref 32 echo "previous_release_ref=${previous_release_ref}" >> $GITHUB_OUTPUT 33 34 upgrade_downgrade_test: 35 if: always() && (needs.get_previous_release.result == 'success') 36 name: Run Upgrade Downgrade Test - Reparent Old VTTablet 37 runs-on: ubuntu-22.04 38 needs: 39 - get_previous_release 40 41 steps: 42 - name: Skip CI 43 run: | 44 if [[ "${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}" == "true" ]]; then 45 echo "skipping CI due to the 'Skip CI' label" 46 exit 1 47 fi 48 49 - name: Check if workflow needs to be skipped 50 id: skip-workflow 51 run: | 52 skip='false' 53 if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then 54 skip='true' 55 fi 56 echo Skip ${skip} 57 echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT 58 59 - name: Check out commit's code 60 if: steps.skip-workflow.outputs.skip-workflow == 'false' 61 uses: actions/checkout@v3 62 63 - name: Check for changes in relevant files 64 if: steps.skip-workflow.outputs.skip-workflow == 'false' 65 uses: frouioui/paths-filter@main 66 id: changes 67 with: 68 token: '' 69 filters: | 70 end_to_end: 71 - 'go/**' 72 - 'go/**/*.go' 73 - 'test.go' 74 - 'Makefile' 75 - 'build.env' 76 - 'go.sum' 77 - 'go.mod' 78 - 'proto/*.proto' 79 - 'tools/**' 80 - 'config/**' 81 - 'bootstrap.sh' 82 - '.github/workflows/upgrade_downgrade_test_reparent_old_vttablet.yml' 83 84 - name: Set up Go 85 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 86 uses: actions/setup-go@v3 87 with: 88 go-version: 1.20.3 89 90 - name: Set up python 91 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 92 uses: actions/setup-python@v4 93 94 - name: Tune the OS 95 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 96 run: | 97 sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" 98 99 - name: Get base dependencies 100 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 101 run: | 102 sudo DEBIAN_FRONTEND="noninteractive" apt-get update 103 # Uninstall any previously installed MySQL first 104 sudo systemctl stop apparmor 105 sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common 106 sudo apt-get -y autoremove 107 sudo apt-get -y autoclean 108 sudo deluser mysql 109 sudo rm -rf /var/lib/mysql 110 sudo rm -rf /etc/mysql 111 # Install mysql80 112 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29 113 wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb 114 echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections 115 sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config* 116 sudo apt-get update 117 sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client 118 # Install everything else we need, and configure 119 sudo apt-get install -y make unzip g++ etcd curl git wget eatmydata 120 sudo service mysql stop 121 sudo service etcd stop 122 sudo bash -c "echo '/usr/sbin/mysqld { }' > /etc/apparmor.d/usr.sbin.mysqld" # https://bugs.launchpad.net/ubuntu/+source/mariadb-10.1/+bug/1806263 123 sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ 124 sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld || echo "could not remove mysqld profile" 125 126 # install JUnit report formatter 127 go install github.com/vitessio/go-junit-report@HEAD 128 129 wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb 130 sudo apt-get install -y gnupg2 131 sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb 132 sudo apt-get update 133 sudo apt-get install percona-xtrabackup-24 134 135 # Checkout to the last release of Vitess 136 - name: Check out other version's code (${{ needs.get_previous_release.outputs.previous_release }}) 137 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 138 uses: actions/checkout@v3 139 with: 140 ref: ${{ needs.get_previous_release.outputs.previous_release }} 141 142 - name: Get dependencies for the last release 143 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 144 run: | 145 go mod download 146 147 - name: Building last release's binaries 148 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 149 timeout-minutes: 10 150 run: | 151 source build.env 152 make build 153 mkdir -p /tmp/vitess-build-other/ 154 cp -R bin /tmp/vitess-build-other/ 155 rm -Rf bin/* 156 157 # Checkout to this build's commit 158 - name: Check out commit's code 159 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 160 uses: actions/checkout@v3 161 162 - name: Get dependencies for this commit 163 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 164 run: | 165 go mod download 166 167 - name: Building the binaries for this commit 168 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 169 timeout-minutes: 10 170 run: | 171 source build.env 172 make build 173 mkdir -p /tmp/vitess-build-current/ 174 cp -R bin /tmp/vitess-build-current/ 175 176 # Swap the binaries. Use vtctl version n and keep vttablet at version n-1 177 - name: Use current version Vtctl, and other version VTTablet 178 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 179 run: | 180 source build.env 181 182 rm -f $PWD/bin/vttablet 183 cp /tmp/vitess-build-other/bin/vttablet $PWD/bin/vttablet 184 vtctl --version 185 vttablet --version 186 187 # Running a test with vtctl at version n and vttablet at version n-1 188 - name: Run reparent tests (vtctl=N, vttablet=N-1) 189 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 190 run: | 191 rm -rf /tmp/vtdataroot 192 mkdir -p /tmp/vtdataroot 193 194 source build.env 195 eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_reparent