vitess.io/vitess@v0.16.2/.github/workflows/static_checks_etc.yml (about) 1 name: Static Code Checks, Etc. 2 3 on: 4 - pull_request 5 - push 6 7 jobs: 8 build: 9 name: Static Code Checks Etc 10 runs-on: ubuntu-22.04 11 12 steps: 13 - name: Skip CI 14 run: | 15 if [[ "${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}" == "true" ]]; then 16 echo "skipping CI due to the 'Skip CI' label" 17 exit 1 18 fi 19 20 - name: Check if workflow needs to be skipped 21 id: skip-workflow 22 run: | 23 skip='false' 24 if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then 25 skip='true' 26 fi 27 echo Skip ${skip} 28 echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT 29 30 - name: Checkout code 31 if: steps.skip-workflow.outputs.skip-workflow == 'false' 32 uses: actions/checkout@v3 33 34 - name: Run FOSSA scan and upload build data 35 if: steps.skip-workflow.outputs.skip-workflow == 'false' 36 uses: fossa-contrib/fossa-action@v1 37 with: 38 fossa-api-key: 76d7483ea206d530d9452e44bffe7ba8 39 40 - name: Check for changes in Go files 41 if: steps.skip-workflow.outputs.skip-workflow == 'false' 42 uses: frouioui/paths-filter@main 43 id: changes 44 with: 45 token: '' 46 filters: | 47 go_files: 48 - '**/*.go' 49 - '*.go' 50 - 'go.sum' 51 - 'go.mod' 52 parser_changes: 53 - 'go/vt/sqlparser/**' 54 - 'go.sum' 55 - 'go.mod' 56 - 'build.env' 57 - 'bootstrap.sh' 58 - 'tools/**' 59 - '.github/workflows/static_checks_etc.yml' 60 proto_changes: 61 - 'bootstrap.sh' 62 - 'tools/**' 63 - 'build.env' 64 - 'go.sum' 65 - 'go.mod' 66 - 'Makefile' 67 - 'go/vt/proto/**' 68 - 'proto/*.proto' 69 - '.github/workflows/static_checks_etc.yml' 70 sizegen: 71 - 'go/**/*.go' 72 - 'test.go' 73 - 'Makefile' 74 - 'build.env' 75 - 'go.sum' 76 - 'go.mod' 77 - 'tools/**' 78 - 'bootstrap.sh' 79 - '.github/workflows/static_checks_etc.yml' 80 visitor: 81 - 'go/tools/asthelpergen/**' 82 - 'go/vt/sqlparser/**' 83 - 'Makefile' 84 - 'build.env' 85 - 'go.sum' 86 - 'go.mod' 87 - 'tools/**' 88 - 'bootstrap.sh' 89 - 'misc/git/hooks/asthelpers' 90 - '.github/workflows/static_checks_etc.yml' 91 end_to_end: 92 - 'docker/**' 93 - 'test.go' 94 - 'Makefile' 95 - 'bootstrap.sh' 96 - '.github/workflows/static_checks_etc.yml' 97 ci_config: 98 - 'test/config.json' 99 - '.github/workflows/static_checks_etc.yml' 100 release_notes: 101 - 'changelog/**' 102 - './go/tools/releases/**' 103 104 - name: Set up Go 105 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.go_files == 'true' || steps.changes.outputs.parser_changes == 'true' || steps.changes.outputs.proto_changes == 'true') 106 uses: actions/setup-go@v3 107 with: 108 go-version: 1.20.3 109 110 - name: Tune the OS 111 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 112 run: | 113 sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" 114 115 - name: Run go fmt 116 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 117 run: | 118 gofmt -l . | grep -vF vendor/ && exit 1 || echo "All files formatted correctly" 119 120 - name: Install goimports 121 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.go_files == 'true' || steps.changes.outputs.visitor == 'true') 122 run: | 123 go install golang.org/x/tools/cmd/goimports@latest 124 125 - name: Run goimports 126 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 127 run: | 128 out=$(goimports -local vitess.io/vitess -l -w $(find . -name "*.go" | grep -v ".pb.go")) 129 echo $out | grep go > /dev/null && echo -e "The following files are malformatted:\n$out" && exit 1 || echo "All the files are formatted correctly" 130 131 - name: Get dependencies 132 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.parser_changes == 'true' || steps.changes.outputs.go_files == 'true') 133 run: | 134 sudo apt-get update 135 sudo apt-get install -y make unzip g++ etcd curl git wget 136 sudo service etcd stop 137 go mod download 138 139 - name: Run make minimaltools 140 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.parser_changes == 'true' || steps.changes.outputs.go_files == 'true') 141 run: | 142 make minimaltools 143 144 - name: check_make_parser 145 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.parser_changes == 'true' || steps.changes.outputs.go_files == 'true') 146 run: | 147 tools/check_make_parser.sh || exit 1 148 149 - name: check_make_sizegen 150 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.sizegen == 'true' || steps.changes.outputs.go_files == 'true') 151 run: | 152 tools/check_make_sizegen.sh || exit 1 153 154 - name: check_make_visitor 155 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.visitor == 'true' || steps.changes.outputs.go_files == 'true') 156 run: | 157 misc/git/hooks/asthelpers || exit 1 158 159 - name: run ensure_bootstrap_version 160 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' 161 run: | 162 make ensure_bootstrap_version 163 git status 164 test -z "$(git diff-index --name-only HEAD --)" || exit 1 165 166 - name: Install golangci-lint 167 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 168 run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2 169 170 - name: Clean Env 171 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 172 run: $(go env GOPATH)/bin/golangci-lint cache clean 173 174 - name: Print linter version 175 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 176 run: $(go env GOPATH)/bin/golangci-lint --version 177 178 - name: Run golangci-lint 179 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 180 run: $(go env GOPATH)/bin/golangci-lint run go/... --timeout 10m || exit 1 181 182 - name: Run go mod tidy 183 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.go_files == 'true' 184 run: | 185 set -e 186 go mod tidy 187 output=$(git status -s) 188 if [ -z "${output}" ]; then 189 exit 0 190 fi 191 echo 'We wish to maintain a tidy state for go mod. Please run `go mod tidy` on your branch, commit and push again.' 192 echo 'Running `go mod tidy` on this CI test yields with the following changes:' 193 echo "$output" 194 exit 1 195 196 - name: check_make_proto 197 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.proto_changes == 'true' 198 run: | 199 tools/check_make_proto.sh || exit 1 200 201 - name: Check test/config.json 202 if: steps.skip-workflow.outputs.skip-workflow == 'false' && (steps.changes.outputs.go_files == 'true' || steps.changes.outputs.ci_config == 'true') 203 run: | 204 go run ./go/tools/ci-config/main.go || exit 1 205 206 - name: Check changelog 207 if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.release_notes == 'true' 208 run: | 209 set -e 210 go run ./go/tools/releases/releases.go 211 output=$(git status -s) 212 if [ -z "${output}" ]; then 213 exit 0 214 fi 215 echo 'We wish to maintain a consistent changelog directory, please run `go run ./go/tools/releases/releases.go`, commit and push again.' 216 echo 'Running `go run ./go/tools/releases/releases.go` on CI yields the following changes:' 217 echo "$output" 218 echo ""