vitess.io/vitess@v0.16.2/test/templates/unit_test.tpl (about)

     1  name: {{.Name}}
     2  on: [push, pull_request]
     3  concurrency:
     4    group: format('{0}-{1}', ${{"{{"}} github.ref {{"}}"}}, '{{.Name}}')
     5    cancel-in-progress: true
     6  
     7  env:
     8    LAUNCHABLE_ORGANIZATION: "vitess"
     9    LAUNCHABLE_WORKSPACE: "vitess-app"
    10    GITHUB_PR_HEAD_SHA: "${{`{{ github.event.pull_request.head.sha }}`}}"
    11  
    12  jobs:
    13    test:
    14      runs-on: ubuntu-22.04
    15  
    16      steps:
    17      - name: Skip CI
    18        run: |
    19          if [[ "{{"${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}"}}" == "true" ]]; then
    20            echo "skipping CI due to the 'Skip CI' label"
    21            exit 1
    22          fi
    23  
    24      - name: Check if workflow needs to be skipped
    25        id: skip-workflow
    26        run: |
    27          skip='false'
    28          if [[ "{{"${{github.event.pull_request}}"}}" ==  "" ]] && [[ "{{"${{github.ref}}"}}" != "refs/heads/main" ]] && [[ ! "{{"${{github.ref}}"}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "{{"${{github.ref}}"}}" =~ "refs/tags/.*" ]]; then
    29            skip='true'
    30          fi
    31          echo Skip ${skip}
    32          echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT
    33  
    34      - name: Check out code
    35        if: steps.skip-workflow.outputs.skip-workflow == 'false'
    36        uses: actions/checkout@v3
    37  
    38      - name: Check for changes in relevant files
    39        if: steps.skip-workflow.outputs.skip-workflow == 'false'
    40        uses: frouioui/paths-filter@main
    41        id: changes
    42        with:
    43          token: ''
    44          filters: |
    45            unit_tests:
    46              - 'go/**'
    47              - 'test.go'
    48              - 'Makefile'
    49              - 'build.env'
    50              - 'go.sum'
    51              - 'go.mod'
    52              - 'proto/*.proto'
    53              - 'tools/**'
    54              - 'config/**'
    55              - 'bootstrap.sh'
    56              - '.github/workflows/{{.FileName}}'
    57  
    58      - name: Set up Go
    59        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
    60        uses: actions/setup-go@v3
    61        with:
    62          go-version: 1.20.3
    63  
    64      - name: Set up python
    65        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
    66        uses: actions/setup-python@v4
    67  
    68      - name: Tune the OS
    69        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
    70        run: |
    71          sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535"
    72          # Increase the asynchronous non-blocking I/O. More information at https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_use_native_aio
    73          echo "fs.aio-max-nr = 1048576" | sudo tee -a /etc/sysctl.conf
    74          sudo sysctl -p /etc/sysctl.conf
    75  
    76      - name: Get dependencies
    77        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
    78        run: |
    79          export DEBIAN_FRONTEND="noninteractive"
    80          sudo apt-get update
    81  
    82          # Uninstall any previously installed MySQL first
    83          sudo systemctl stop apparmor
    84          sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common
    85          sudo apt-get -y autoremove
    86          sudo apt-get -y autoclean
    87          sudo deluser mysql
    88          sudo rm -rf /var/lib/mysql
    89          sudo rm -rf /etc/mysql
    90  
    91          {{if (eq .Platform "mysql57")}}
    92          # Get key to latest MySQL repo
    93          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
    94  
    95          # mysql57
    96          wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
    97          # Bionic packages are still compatible for Jammy since there's no MySQL 5.7
    98          # packages for Jammy.
    99          echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections
   100          echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | sudo debconf-set-selections
   101          sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
   102          sudo apt-get update
   103          sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses5
   104  
   105          {{end}}
   106  
   107          {{if (eq .Platform "mysql80")}}
   108          # Get key to latest MySQL repo
   109          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
   110  
   111          # mysql80
   112          wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
   113          echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections
   114          sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config*
   115          sudo apt-get update
   116          sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client
   117  
   118          {{end}}
   119  
   120          sudo apt-get install -y make unzip g++ curl git wget ant openjdk-11-jdk eatmydata
   121          sudo service mysql 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          mkdir -p dist bin
   127          curl -L https://github.com/coreos/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz | tar -zxC dist
   128          mv dist/etcd-v3.3.10-linux-amd64/{etcd,etcdctl} bin/
   129  
   130          go mod download
   131          go install golang.org/x/tools/cmd/goimports@latest
   132          
   133          # install JUnit report formatter
   134          go install github.com/vitessio/go-junit-report@HEAD
   135  
   136      - name: Run make tools
   137        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
   138        run: |
   139          make tools
   140  
   141      - name: Setup launchable dependencies
   142        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true' && github.base_ref == 'main'
   143        run: |
   144          # Get Launchable CLI installed. If you can, make it a part of the builder image to speed things up
   145          pip3 install --user launchable~=1.0 > /dev/null
   146  
   147          # verify that launchable setup is all correct.
   148          launchable verify || true
   149  
   150          # Tell Launchable about the build you are producing and testing
   151          launchable record build --name "$GITHUB_RUN_ID" --source .
   152  
   153      - name: Run test
   154        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true'
   155        timeout-minutes: 30
   156        run: |
   157          eatmydata -- make unit_test | tee -a output.txt | go-junit-report -set-exit-code > report.xml
   158  
   159      - name: Print test output and Record test result in launchable
   160        if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.unit_tests == 'true' && always()
   161        run: |
   162          # send recorded tests to launchable
   163          launchable record tests --build "$GITHUB_RUN_ID" go-test . || true
   164  
   165          # print test output
   166          cat output.txt