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