vitess.io/vitess@v0.16.2/.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml (about) 1 name: Upgrade Downgrade Testing Query Serving (Queries) Next Release 2 on: 3 push: 4 pull_request: 5 6 concurrency: 7 group: format('{0}-{1}', ${{ github.ref }}, 'Upgrade Downgrade Testing Query Serving (Queries) Next Release') 8 cancel-in-progress: true 9 10 # This test ensures that our end-to-end tests work using Vitess components 11 # (vtgate, vttablet, etc) built on different versions. 12 13 jobs: 14 get_next_release: 15 if: always() 16 name: Get Latest Release - Query Serving (Queries) Next Release 17 runs-on: ubuntu-22.04 18 outputs: 19 next_release: ${{ steps.output-next-release-ref.outputs.next_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-next-release-ref 29 run: | 30 next_release_ref=$(./tools/get_next_release.sh ${{github.base_ref}} ${{github.ref}}) 31 echo $next_release_ref 32 echo "next_release_ref=${next_release_ref}" >> $GITHUB_OUTPUT 33 34 upgrade_downgrade_test: 35 if: always() && (needs.get_next_release.result == 'success') 36 name: Run Upgrade Downgrade Test - Query Serving (Queries) Next Release 37 runs-on: ubuntu-22.04 38 needs: 39 - get_next_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 if [[ "${{needs.get_next_release.outputs.next_release}}" == "" ]]; then 57 skip='true' 58 fi 59 echo Skip ${skip} 60 echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT 61 62 - name: Check out commit's code 63 if: steps.skip-workflow.outputs.skip-workflow == 'false' 64 uses: actions/checkout@v3 65 66 - name: Check for changes in relevant files 67 if: steps.skip-workflow.outputs.skip-workflow == 'false' 68 uses: frouioui/paths-filter@main 69 id: changes 70 with: 71 token: '' 72 filters: | 73 end_to_end: 74 - 'go/**' 75 - 'go/**/*.go' 76 - 'test.go' 77 - 'Makefile' 78 - 'build.env' 79 - 'go.sum' 80 - 'go.mod' 81 - 'proto/*.proto' 82 - 'tools/**' 83 - 'config/**' 84 - 'bootstrap.sh' 85 - '.github/workflows/upgrade_downgrade_test_query_serving_queries_next_release.yml' 86 87 - name: Set up Go 88 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 89 uses: actions/setup-go@v3 90 with: 91 go-version: 1.20.3 92 93 - name: Set up python 94 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 95 uses: actions/setup-python@v4 96 97 - name: Tune the OS 98 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 99 run: | 100 sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" 101 102 - name: Get base dependencies 103 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 104 run: | 105 sudo DEBIAN_FRONTEND="noninteractive" apt-get update 106 # Uninstall any nextly installed MySQL first 107 sudo systemctl stop apparmor 108 sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common 109 sudo apt-get -y autoremove 110 sudo apt-get -y autoclean 111 sudo deluser mysql 112 sudo rm -rf /var/lib/mysql 113 sudo rm -rf /etc/mysql 114 # Install mysql80 115 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29 116 wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb 117 echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections 118 sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config* 119 sudo apt-get update 120 sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client 121 # Install everything else we need, and configure 122 sudo apt-get install -y make unzip g++ etcd curl git wget eatmydata 123 sudo service mysql stop 124 sudo service etcd stop 125 sudo bash -c "echo '/usr/sbin/mysqld { }' > /etc/apparmor.d/usr.sbin.mysqld" # https://bugs.launchpad.net/ubuntu/+source/mariadb-10.1/+bug/1806263 126 sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ 127 sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld || echo "could not remove mysqld profile" 128 129 # install JUnit report formatter 130 go install github.com/vitessio/go-junit-report@HEAD 131 132 wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb 133 sudo apt-get install -y gnupg2 134 sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb 135 sudo apt-get update 136 sudo apt-get install percona-xtrabackup-24 137 138 # Checkout to the next release of Vitess 139 - name: Check out other version's code (${{ needs.get_next_release.outputs.next_release }}) 140 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 141 uses: actions/checkout@v3 142 with: 143 ref: ${{ needs.get_next_release.outputs.next_release }} 144 145 - name: Get dependencies for the next release 146 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 147 run: | 148 go mod download 149 150 - name: Building next release's binaries 151 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 152 timeout-minutes: 10 153 run: | 154 source build.env 155 make build 156 mkdir -p /tmp/vitess-build-other/ 157 cp -R bin /tmp/vitess-build-other/ 158 rm -Rf bin/* 159 160 # Checkout to this build's commit 161 - name: Check out commit's code 162 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 163 uses: actions/checkout@v3 164 165 - name: Get dependencies for this commit 166 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 167 run: | 168 go mod download 169 170 - name: Building the binaries for this commit 171 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 172 timeout-minutes: 10 173 run: | 174 source build.env 175 make build 176 mkdir -p /tmp/vitess-build-current/ 177 cp -R bin /tmp/vitess-build-current/ 178 179 # Running a test with vtgate and vttablet using version n 180 - name: Run query serving tests (vtgate=N, vttablet=N) 181 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 182 run: | 183 rm -rf /tmp/vtdataroot 184 mkdir -p /tmp/vtdataroot 185 186 source build.env 187 eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_query_serving_queries 188 189 # Swap the binaries in the bin. Use vtgate version n+1 and keep vttablet at version n 190 - name: Use next release's VTGate 191 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 192 run: | 193 source build.env 194 195 rm -f $PWD/bin/vtgate 196 cp /tmp/vitess-build-other/bin/vtgate $PWD/bin/vtgate 197 vtgate --version 198 199 # Running a test with vtgate at version n+1 and vttablet at version n 200 - name: Run query serving tests (vtgate=N+1, vttablet=N) 201 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 202 run: | 203 rm -rf /tmp/vtdataroot 204 mkdir -p /tmp/vtdataroot 205 206 source build.env 207 eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_query_serving_queries 208 209 # Swap the binaries again. This time, vtgate will be at version n, and vttablet will be at version n+1 210 - name: Use current version VTGate, and other version VTTablet 211 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 212 run: | 213 source build.env 214 215 rm -f $PWD/bin/vtgate $PWD/bin/vttablet 216 cp /tmp/vitess-build-current/bin/vtgate $PWD/bin/vtgate 217 cp /tmp/vitess-build-other/bin/vttablet $PWD/bin/vttablet 218 vtgate --version 219 vttablet --version 220 221 # Running a test with vtgate at version n and vttablet at version n+1 222 - name: Run query serving tests (vtgate=N, vttablet=N+1) 223 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 224 run: | 225 rm -rf /tmp/vtdataroot 226 mkdir -p /tmp/vtdataroot 227 228 source build.env 229 eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_query_serving_queries