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