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