vitess.io/vitess@v0.16.2/.github/workflows/upgrade_downgrade_test_query_serving_schema.yml (about)

     1  name: Upgrade Downgrade Testing Query Serving (Schema)
     2  on:
     3    push:
     4    pull_request:
     5  
     6  concurrency:
     7    group: format('{0}-{1}', ${{ github.ref }}, 'Upgrade Downgrade Testing Query Serving (Schema)')
     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_previous_release:
    15      if: always()
    16      name: Get Previous Release - Query Serving (Schema)
    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 - Query Serving (Schema)
    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_query_serving_schema.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      # Running a test with vtgate and vttablet using version n
   177      - name: Run query serving tests (vtgate=N, vttablet=N)
   178        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
   179        run: |
   180          rm -rf /tmp/vtdataroot
   181          mkdir -p /tmp/vtdataroot
   182  
   183          source build.env
   184          eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_query_serving_schema
   185  
   186      # Swap the binaries in the bin. Use vtgate version n-1 and keep vttablet at version n
   187      - name: Use last release's VTGate
   188        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
   189        run: |
   190          source build.env
   191  
   192          rm -f $PWD/bin/vtgate
   193          cp /tmp/vitess-build-other/bin/vtgate $PWD/bin/vtgate
   194          vtgate --version
   195  
   196      # Running a test with vtgate at version n-1 and vttablet at version n
   197      - name: Run query serving tests (vtgate=N-1, vttablet=N)
   198        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
   199        run: |
   200          rm -rf /tmp/vtdataroot
   201          mkdir -p /tmp/vtdataroot
   202  
   203          source build.env
   204          eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_query_serving_schema
   205  
   206      # Swap the binaries again. This time, vtgate will be at version n, and vttablet will be at version n-1
   207      - name: Use current version VTGate, and other version VTTablet
   208        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
   209        run: |
   210          source build.env
   211  
   212          rm -f $PWD/bin/vtgate $PWD/bin/vttablet
   213          cp /tmp/vitess-build-current/bin/vtgate $PWD/bin/vtgate
   214          cp /tmp/vitess-build-other/bin/vttablet $PWD/bin/vttablet
   215          vtgate --version
   216          vttablet --version
   217  
   218      # Running a test with vtgate at version n and vttablet at version n-1
   219      - name: Run query serving tests (vtgate=N, vttablet=N-1)
   220        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true'
   221        run: |
   222          rm -rf /tmp/vtdataroot
   223          mkdir -p /tmp/vtdataroot
   224  
   225          source build.env
   226          eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_query_serving_schema