summaryrefslogtreecommitdiffstats
path: root/.github/workflows/ci.yml
blob: d09b8a53a1fea8dfb9b899829bbf6954402044a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
name: Continuous Integration

env:
  GO_VERSION: 1.18

on:
  push:
    branches:
      - master
  pull_request:

jobs:
  unit-tests:
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - windows-latest
        include:
          - os: ubuntu-latest
            cache_path: ~/.cache/go-build
          - os: windows-latest
            cache_path: ~\AppData\Local\go-build
    name: ci - ${{matrix.os}}
    runs-on: ${{matrix.os}}
    env:
      GOFLAGS: -mod=vendor
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Go
        uses: actions/setup-go@v1
        with:
          go-version: 1.18.x
      - name: Cache build
        uses: actions/cache@v3
        with:
          path: |
            ${{matrix.cache_path}}
            ~/go/pkg/mod
          key: ${{runner.os}}-go-${{hashFiles('**/go.sum')}}-test
          restore-keys: |
            ${{runner.os}}-go-
      - name: Test code
        # we're passing -short so that we skip the integration tests, which will be run in parallel below
        run: |
          go test ./... -short
  integration-tests-old:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        parallelism: [5]
        index: [0,1,2,3,4]
    name: "Integration Tests (Old pattern) (${{ matrix.index }}/${{ matrix.parallelism }})"
    env:
      GOFLAGS: -mod=vendor
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Go
        uses: actions/setup-go@v1
        with:
          go-version: 1.18.x
      - name: Cache build
        uses: actions/cache@v1
        with:
          path: |
            ~/.cache/go-build
            ~/go/pkg/mod
          key: ${{runner.os}}-go-${{hashFiles('**/go.sum')}}-test
          restore-keys: |
            ${{runner.os}}-go-
      - name: Test code
        # for file.allow thing see https://vielmetti.typepad.com/logbook/2022/10/git-security-fixes-lead-to-fatal-transport-file-not-allowed-error-in-ci-systems-cve-2022-39253.html
        run: |
          git config --global protocol.file.allow always && PARALLEL_TOTAL=${{ matrix.parallelism }} PARALLEL_INDEX=${{ matrix.index }} go test pkg/integration/deprecated/*.go
  integration-tests:
    runs-on: ubuntu-latest
    name: "Integration Tests"
    env:
      GOFLAGS: -mod=vendor
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Go
        uses: actions/setup-go@v1
        with:
          go-version: 1.18.x
      - name: Cache build
        uses: actions/cache@v1
        with:
          path: |
            ~/.cache/go-build
            ~/go/pkg/mod
          key: ${{runner.os}}-go-${{hashFiles('**/go.sum')}}-test
          restore-keys: |
            ${{runner.os}}-go-
      - name: Test code
        run: |
          go test pkg/integration/clients/*.go
  build:
    runs-on: ubuntu-latest
    env:
      GOFLAGS: -mod=vendor
      GOARCH: amd64
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Go
        uses: actions/setup-go@v1
        with:
          go-version: 1.18.x
      - name: Cache build
        uses: actions/cache@v1
        with:
          path: |
            ~/.cache/go-build
            ~/go/pkg/mod
          key: ${{runner.os}}-go-${{hashFiles('**/go.sum')}}-build
          restore-keys: |
            ${{runner.os}}-go-
      - name: Build linux binary
        run: |
          GOOS=linux go build
      - name: Build windows binary
        run: |
          GOOS=windows go build
      - name: Build darwin binary
        run: |
          GOOS=darwin go build
      - name: Build integration test binary
        run: |
          GOOS=linux go build cmd/integration_test/main.go
      - name: Build integration test injector
        run: |
          GOOS=linux go build pkg/integration/clients/injector/main.go
  check-codebase:
    runs-on: ubuntu-latest
    env:
      GOFLAGS: -mod=vendor
      GOARCH: amd64
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Go
        uses: actions/setup-go@v1
        with:
          go-version: 1.18.x
      - name: Cache build
        uses: actions/cache@v1
        with:
          path: |
            ~/.cache/go-build
            ~/go/pkg/mod
          key: ${{runner.os}}-go-${{hashFiles('**/go.sum')}}-build
          restore-keys: |
            ${{runner.os}}-go-
      - name: Check Cheatsheet
        run: |
          go run scripts/cheatsheet/main.go check
      - name: Check Vendor Directory
        # ensure our vendor directory matches up with our go modules
        run: |
          go mod vendor && git diff --exit-code || (echo "Unexpected change to vendor directory. Run 'go mod vendor' locally and commit the changes" && exit 1)
  lint:
    runs-on: ubuntu-latest
    env:
      GOFLAGS: -mod=vendor
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Go
        uses: actions/setup-go@v1
        with:
          go-version: 1.18.x
      - name: Cache build
        uses: actions/cache@v1
        with:
          path: |
            ~/.cache/go-build
            ~/go/pkg/mod
          key: ${{runner.os}}-go-${{hashFiles('**/go.sum')}}-test
          restore-keys: |
            ${{runner.os}}-go-
      - name: Lint
        uses: golangci/golangci-lint-action@v3.1.0
        with:
          version: latest
      - name: errors
        run: golangci-lint run
        if: ${{ failure() }}