17
17
description : Tag of the NGF and NGINX Docker images
18
18
required : true
19
19
default : edge
20
- nginx_plus :
21
- description : Run tests with NGINX Plus
22
- required : false
23
- default : false
24
- type : boolean
20
+ type :
21
+ description : Type of NGINX image to test
22
+ required : true
23
+ default : both
24
+ type : choice
25
+ options : [oss, plus, both]
26
+ schedule :
27
+ - cron : " 0 16 1,15 * *" # Run on the 1st and 15th of every month at 16:00 UTC
25
28
26
29
defaults :
27
30
run :
@@ -35,104 +38,143 @@ permissions:
35
38
contents : read
36
39
37
40
jobs :
41
+ vars :
42
+ name : Set up vars
43
+ runs-on : ubuntu-22.04
44
+ outputs :
45
+ test_label : ${{ github.event.inputs.test_label || 'all' }}
46
+ version : ${{ github.event.inputs.version || 'edge' }}
47
+ image_tag : ${{ github.event.inputs.image_tag || 'edge' }}
48
+ types : ${{ steps.var.outputs.types }}
49
+ permissions :
50
+ contents : read
51
+ steps :
52
+ - name : Set vars
53
+ id : var
54
+ run : |
55
+ if ${{ github.event.inputs.type == 'both' || github.event_name == 'schedule' }}; then
56
+ echo 'types=["oss","plus"]' >> $GITHUB_OUTPUT
57
+ else
58
+ echo 'types=["${{ github.event.inputs.type }}"]' >> $GITHUB_OUTPUT
59
+ fi
60
+
38
61
setup-and-run-tests :
39
62
name : Setup and Run NFR Tests
40
63
runs-on : ubuntu-22.04
41
64
permissions :
42
- contents : write # needed for opening PR with the results files
43
- pull-requests : write # needed for opening PR with the results files
65
+ contents : read
44
66
id-token : write # needed for authenticating to GCP
67
+ needs : vars
68
+ strategy :
69
+ matrix :
70
+ type : ${{ fromJson(needs.vars.outputs.types) }}
71
+ steps :
72
+ - name : Checkout Repository
73
+ uses : actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
74
+
75
+ - name : Authenticate to Google Cloud
76
+ id : auth
77
+ uses : google-github-actions/auth@71fee32a0bb7e97b4d33d548e7d957010649d8fa # v2.1.3
78
+ with :
79
+ token_format : access_token
80
+ workload_identity_provider : ${{ secrets.GCP_WORKLOAD_IDENTITY }}
81
+ service_account : ${{ secrets.GCP_SERVICE_ACCOUNT }}
82
+
83
+ - name : Set up Cloud SDK
84
+ uses : google-github-actions/setup-gcloud@98ddc00a17442e89a24bbf282954a3b65ce6d200 # v2.1.0
85
+ with :
86
+ project_id : ${{ secrets.GCP_PROJECT_ID }}
87
+ install_components : kubectl
88
+
89
+ - name : Setup dotenv file
90
+ working-directory : ./tests/scripts
91
+ run : |
92
+ echo "RESOURCE_NAME=nfr-tests-${{ github.run_id }}" >> vars.env
93
+ echo "TAG=${{ needs.vars.outputs.image_tag }}" >> vars.env
94
+ echo "PREFIX=ghcr.io/nginxinc/nginx-gateway-fabric" >> vars.env
95
+ echo "NGINX_PREFIX=ghcr.io/nginxinc/nginx-gateway-fabric/nginx" >> vars.env
96
+ echo "NGINX_PLUS_PREFIX=us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/nginx-gateway-fabric/nginx-plus" >> vars.env
97
+ echo "GKE_CLUSTER_NAME=nfr-tests-${{ github.run_id }}" >> vars.env
98
+ echo "GKE_CLUSTER_ZONE=us-east1-b" >> vars.env
99
+ echo "GKE_CLUSTER_REGION=us-east1" >> vars.env
100
+ echo "GKE_PROJECT=${{ secrets.GCP_PROJECT_ID }}" >> vars.env
101
+ echo "GKE_SVC_ACCOUNT=${{ secrets.GCP_SERVICE_ACCOUNT }}" >> vars.env
102
+ echo "GKE_NODES_SERVICE_ACCOUNT=${{ secrets.GKE_NODES_SERVICE_ACCOUNT }}" >> vars.env
103
+ echo "IMAGE=projects/debian-cloud/global/images/debian-11-bullseye-v20240213" >> vars.env
104
+ echo "NETWORK_TAGS=nfr-tests-${{ github.run_id }}" >> vars.env
105
+ echo "NGF_REPO=nginxinc" >> vars.env
106
+ echo "NGF_BRANCH=${{ github.ref_name }}" >> vars.env
107
+ echo "SOURCE_IP_RANGE=$(curl -sS -4 icanhazip.com)/32" >> vars.env
108
+ echo "ADD_VM_IP_AUTH_NETWORKS=true" >> vars.env
109
+ echo "PLUS_ENABLED=${{ matrix.type == 'plus' }}" >> vars.env
110
+ echo "GINKGO_LABEL=" >> vars.env
111
+ echo "NGF_VERSION=${{ needs.vars.outputs.version }}" >> vars.env
112
+ echo "GKE_NUM_NODES=12" >> vars.env
113
+ echo "GKE_MACHINE_TYPE=n2d-standard-16" >> vars.env
45
114
115
+ - name : Create GKE cluster
116
+ working-directory : ./tests
117
+ run : make create-gke-cluster CI=true
118
+
119
+ - name : Create and setup VM
120
+ working-directory : ./tests
121
+ run : make create-and-setup-vm
122
+
123
+ - name : Run Tests
124
+ working-directory : ./tests
125
+ run : |
126
+ if ${{ needs.vars.outputs.test_label != 'all' }}; then
127
+ sed -i '/^GINKGO_LABEL=/s/=.*/="${{ needs.vars.outputs.test_label }}"/' "scripts/vars.env" && make nfr-test;
128
+ else
129
+ make nfr-test;
130
+ fi
131
+
132
+ - name : Upload Artifacts
133
+ uses : actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
134
+ with :
135
+ name : results-${{ matrix.type }}
136
+ path : tests/results/
137
+
138
+ - name : Cleanup
139
+ working-directory : ./tests
140
+ if : always()
141
+ run : |
142
+ bash scripts/cleanup-vm.sh true
143
+ make delete-gke-cluster
144
+ rm -rf scripts/vars.env
145
+
146
+ pr-results :
147
+ name : Open PR with results
148
+ runs-on : ubuntu-22.04
149
+ permissions :
150
+ contents : write # needed for opening PR with the results files
151
+ pull-requests : write # needed for opening PR with the results files
152
+ needs : [vars, setup-and-run-tests]
46
153
steps :
47
- - name : Checkout Repository
48
- uses : actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
49
-
50
- - name : Authenticate to Google Cloud
51
- id : auth
52
- uses : google-github-actions/auth@71fee32a0bb7e97b4d33d548e7d957010649d8fa # v2.1.3
53
- with :
54
- token_format : access_token
55
- workload_identity_provider : ${{ secrets.GCP_WORKLOAD_IDENTITY }}
56
- service_account : ${{ secrets.GCP_SERVICE_ACCOUNT }}
57
-
58
- - name : Set up Cloud SDK
59
- uses : google-github-actions/setup-gcloud@98ddc00a17442e89a24bbf282954a3b65ce6d200 # v2.1.0
60
- with :
61
- project_id : ${{ secrets.GCP_PROJECT_ID }}
62
- install_components : kubectl
63
-
64
- - name : Setup dotenv file
65
- working-directory : ./tests/scripts
66
- run : |
67
- echo "RESOURCE_NAME=nfr-tests-${{ github.run_id }}" >> vars.env
68
- echo "TAG=${{ inputs.image_tag }}" >> vars.env
69
- echo "PREFIX=ghcr.io/nginxinc/nginx-gateway-fabric" >> vars.env
70
- echo "NGINX_PREFIX=ghcr.io/nginxinc/nginx-gateway-fabric/nginx" >> vars.env
71
- echo "NGINX_PLUS_PREFIX=us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/nginx-gateway-fabric/nginx-plus" >> vars.env
72
- echo "GKE_CLUSTER_NAME=nfr-tests-${{ github.run_id }}" >> vars.env
73
- echo "GKE_CLUSTER_ZONE=us-east1-b" >> vars.env
74
- echo "GKE_CLUSTER_REGION=us-east1" >> vars.env
75
- echo "GKE_PROJECT=${{ secrets.GCP_PROJECT_ID }}" >> vars.env
76
- echo "GKE_SVC_ACCOUNT=${{ secrets.GCP_SERVICE_ACCOUNT }}" >> vars.env
77
- echo "GKE_NODES_SERVICE_ACCOUNT=${{ secrets.GKE_NODES_SERVICE_ACCOUNT }}" >> vars.env
78
- echo "IMAGE=projects/debian-cloud/global/images/debian-11-bullseye-v20240213" >> vars.env
79
- echo "NETWORK_TAGS=nfr-tests-${{ github.run_id }}" >> vars.env
80
- echo "NGF_REPO=nginxinc" >> vars.env
81
- echo "NGF_BRANCH=${{ github.ref_name }}" >> vars.env
82
- echo "SOURCE_IP_RANGE=$(curl -sS -4 icanhazip.com)/32" >> vars.env
83
- echo "ADD_VM_IP_AUTH_NETWORKS=true" >> vars.env
84
- echo "PLUS_ENABLED=${{ inputs.nginx_plus }}" >> vars.env
85
- echo "GINKGO_LABEL=" >> vars.env
86
- echo "NGF_VERSION=${{ inputs.version }}" >> vars.env
87
- echo "GKE_NUM_NODES=12" >> vars.env
88
- echo "GKE_MACHINE_TYPE=n2d-standard-16" >> vars.env
89
-
90
- - name : Create GKE cluster
91
- working-directory : ./tests
92
- run :
93
- make create-gke-cluster CI=true
94
-
95
- - name : Create and setup VM
96
- working-directory : ./tests
97
- run :
98
- make create-and-setup-vm
99
-
100
- - name : Run Tests
101
- working-directory : ./tests
102
- run : |
103
- if ${{ inputs.test_label != 'all' }}; then
104
- sed -i '/^GINKGO_LABEL=/s/=.*/="${{ inputs.test_label }}"/' "scripts/vars.env" && make nfr-test;
105
- else
106
- make nfr-test;
107
- fi
108
-
109
- - name : Cleanup
110
- working-directory : ./tests
111
- if : always()
112
- run : |
113
- bash scripts/cleanup-vm.sh true
114
- make delete-gke-cluster
115
- rm -rf scripts/vars.env
116
-
117
- - name : Open a PR with the results
118
- uses : peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
119
- with :
120
- token : ${{ secrets.NGINX_PAT }}
121
- commit-message : NFR Test Results for NGF version ${{ inputs.version }} ${{ inputs.nginx_plus == true && '(Plus)' || ''}}
122
- author :
nginx-bot <[email protected] >
123
- committer :
nginx-bot <[email protected] >
124
- branch : tests/nfr-tests-${{ inputs.version }}${{ inputs.nginx_plus == true && '-plus' || ''}}
125
- delete-branch : true
126
- title : NFR Test Results for NGF version ${{ inputs.version }} ${{ inputs.nginx_plus == true && '(Plus)' || ''}}
127
- add-paths : |
128
- tests/results/
129
- body : |
130
- Update with NFR test results for NGF version ${{ inputs.version }} ${{ inputs.nginx_plus == true && '(Plus)' || ''}}
131
- - Auto-generated by the NFR tests workflow run ${{ github.run_id }}
132
- - Tests ran using Docker image tag ${{ inputs.image_tag }}
133
- - ${{ inputs.test_label }} test(s) ran
134
- - NGINX Plus enabled: ${{ inputs.nginx_plus }}
135
- labels : |
136
- tests
137
- assignees : ${{ github.actor }}
138
- draft : true
154
+ - name : Checkout Repository
155
+ uses : actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
156
+
157
+ - name : Download Artifacts
158
+ uses : actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
159
+ with :
160
+ path : tests/results/
161
+
162
+ - name : Open a PR with the results
163
+ uses : peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
164
+ with :
165
+ token : ${{ secrets.NGINX_PAT }}
166
+ commit-message : NFR Test Results for NGF version ${{ needs.vars.outputs.version }}
167
+ author :
nginx-bot <[email protected] >
168
+ committer :
nginx-bot <[email protected] >
169
+ branch : tests/nfr-tests-${{ needs.vars.outputs.version }}
170
+ delete-branch : true
171
+ title : NFR Test Results for NGF version ${{ needs.vars.outputs.version }}
172
+ add-paths : |
173
+ tests/results/
174
+ body : |
175
+ Update with NFR test results for NGF version ${{ needs.vars.outputs.version }} ${{ needs.vars.outputs.types }}
176
+ - Auto-generated by the NFR tests workflow run ${{ github.run_id }}
177
+ - Tests ran using Docker image tag ${{ needs.vars.outputs.image_tag }}
178
+ - ${{ needs.vars.outputs.test_label }} test(s) ran
179
+ assignees : ${{ github.actor }}
180
+ draft : ${{ github.event_name != 'schedule' }}
0 commit comments