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