-
Notifications
You must be signed in to change notification settings - Fork 333
168 lines (165 loc) · 6.77 KB
/
_test.yaml
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
on:
workflow_call:
inputs:
FULL_MATRIX:
required: true
type: string
permissions:
contents: read
env:
CI_TOOLS_DIR: "/home/runner/work/kuma/kuma/.ci_tools"
# This is automatically managed by CI
K8S_MIN_VERSION: v1.23.17-k3s1
K8S_MAX_VERSION: v1.30.0-k3s1
jobs:
test_unit:
timeout-minutes: 20
if: ${{ !contains(github.event.pull_request.labels.*.name, 'ci/skip-test') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
fetch-depth: 0
- uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: |
${{ env.CI_TOOLS_DIR }}
key: ${{ runner.os }}-${{ runner.arch }}-devtools-${{ hashFiles('mk/dependencies/deps.lock') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-devtools
- run: |
make dev/tools
- run: |
make test
gen_e2e_matrix:
timeout-minutes: 2
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.generate-matrix.outputs.matrix }}
runners: ${{ steps.assign-e2e-runners.outputs.runners }}
steps:
- id: generate-matrix
name: Generate matrix
env:
BASE_MATRIX: |-
{
"test_e2e": {
"target": [""],
"k8sVersion": ["kindIpv6", "${{ env.K8S_MIN_VERSION }}", "${{ env.K8S_MAX_VERSION }}"],
"arch": ["amd64"],
"parallelism": [4],
"cniNetworkPlugin": ["flannel"],
"sidecarContainers": [""]
},
"test_e2e_env": {
"target": ["kubernetes", "universal", "multizone"],
"k8sVersion": ["kind", "kindIpv6", "${{ env.K8S_MIN_VERSION }}", "${{ env.K8S_MAX_VERSION }}"],
"arch": ["amd64"],
"parallelism": [1],
"cniNetworkPlugin": ["flannel"],
"sidecarContainers": [""],
"exclude":[
{"target": "kubernetes", "k8sVersion":"kind"},
{"target": "multizone", "k8sVersion":"kind"},
{"target":"universal", "k8sVersion":"${{ env.K8S_MIN_VERSION }}"},
{"target":"universal", "k8sVersion":"${{ env.K8S_MAX_VERSION }}"}
],
"include":[
{"sidecarContainers": "sidecarContainers", "k8sVersion": "${{ env.K8S_MAX_VERSION }}", "target": "kubernetes", "arch": "amd64"},
{"k8sVersion": "${{ env.K8S_MAX_VERSION }}", "target": "multizone", "arch": "arm64"},
{"k8sVersion": "${{ env.K8S_MAX_VERSION }}", "target": "kubernetes", "arch": "arm64"},
{"k8sVersion": "${{ env.K8S_MAX_VERSION }}", "target": "universal", "arch": "arm64"},
{"k8sVersion": "${{ env.K8S_MAX_VERSION }}", "target": "gatewayapi", "arch": "amd64"},
{"cniNetworkPlugin": "calico", "k8sVersion": "${{ env.K8S_MAX_VERSION }}", "target": "multizone", "arch": "amd64"}
]
}
}
# You can modify the include to run one of test suites on PRs (though you'd need to then remove it)
OVERRIDE_JQ_CMD: |-
.test_e2e = false
| .test_e2e_env.include = []
| .test_e2e_env.exclude += [{"arch": "arm64"}, {"k8sVersion": "kindIpv6"}, {"k8sVersion": "${{ inputs.K8S_MIN_VERSION}}"}]
run: |-
BASE_MATRIX_ALL='${{ env.BASE_MATRIX }}'
if [[ "${{ inputs.FULL_MATRIX }}" != "true" ]]; then
BASE_MATRIX_ALL=$(echo $BASE_MATRIX_ALL | jq -r '${{ env.OVERRIDE_JQ_CMD }}')
fi
# Skip e2e tests if the PR has the label "ci/skip-e2e-test" or "ci/skip-test"
if [[ "${{ contains(github.event.pull_request.labels.*.name, 'ci/skip-e2e-test') || contains(github.event.pull_request.labels.*.name, 'ci/skip-test') }}" == "true" ]]; then
BASE_MATRIX_ALL='{}'
fi
echo "final matrix: $BASE_MATRIX_ALL"
echo "matrix<<EOF" >> $GITHUB_OUTPUT
echo "$BASE_MATRIX_ALL" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- id: assign-e2e-runners
name: Assign runners for E2E tests
env:
IS_TRUSTED_BUILD: ${{ github.event_name == 'push' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository }}
ALL_RUNNERS: |-
{
"trusted_builds": {
"amd64": [
"ubuntu-latest",
"ubuntu-latest-kong"
],
"arm64": [
"ubuntu-latest-arm64-kong"
]
},
"untrusted_builds": {
"amd64": [
"ubuntu-latest"
],
"arm64": []
}
}
run: |-
ALL_RUNNERS='${{ env.ALL_RUNNERS }}'
if [[ "${{ inputs.IS_TRUSTED_BUILD }}" == "true" ]]; then
ALL_RUNNERS=$(echo $ALL_RUNNERS | jq -r '.trusted_builds')
else
ALL_RUNNERS=$(echo $ALL_RUNNERS | jq -r '.untrusted_builds')
fi
for ARCH in amd64 arm64; do
COUNT=$(echo $ALL_RUNNERS | jq -r ".$ARCH | length")
if [[ $COUNT -eq 0 ]]; then
ALL_RUNNERS=$(echo $ALL_RUNNERS | jq -r ".$ARCH=\"\"")
elif [[ $COUNT -eq 1 ]]; then
ALL_RUNNERS=$(echo $ALL_RUNNERS | jq -r ".$ARCH=.$ARCH[0]")
else
RANDOM_INDEX=$(( $RANDOM % $COUNT ))
ALL_RUNNERS=$(echo $ALL_RUNNERS | jq -r ".$ARCH=.$ARCH[$RANDOM_INDEX]")
fi
done
echo "final runners: $ALL_RUNNERS"
echo "runners<<EOF" >> $GITHUB_OUTPUT
echo "$ALL_RUNNERS" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
test_e2e:
needs: ["gen_e2e_matrix"]
if: fromJSON(needs.gen_e2e_matrix.outputs.matrix).test_e2e
strategy:
max-parallel: 5
matrix: ${{ fromJSON(needs.gen_e2e_matrix.outputs.matrix).test_e2e }}
fail-fast: false
uses: ./.github/workflows/_e2e.yaml
with:
matrix: ${{ toJSON(matrix) }}
runnersByArch: ${{ needs.gen_e2e_matrix.outputs.runners }}
secrets: inherit
test_e2e_env:
needs: ["gen_e2e_matrix"]
if: fromJSON(needs.gen_e2e_matrix.outputs.matrix).test_e2e_env
strategy:
max-parallel: 5
matrix: ${{ fromJSON(needs.gen_e2e_matrix.outputs.matrix).test_e2e_env }}
fail-fast: false
uses: ./.github/workflows/_e2e.yaml
with:
matrix: ${{ toJSON(matrix) }}
runnersByArch: ${{ needs.gen_e2e_matrix.outputs.runners }}
secrets: inherit