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 ""