1+ #
2+ # MIT License
3+ #
4+ # (C) Copyright 2025 Hewlett Packard Enterprise Development LP
5+ #
6+ # Permission is hereby granted, free of charge, to any person obtaining a
7+ # copy of this software and associated documentation files (the "Software"),
8+ # to deal in the Software without restriction, including without limitation
9+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
10+ # and/or sell copies of the Software, and to permit persons to whom the
11+ # Software is furnished to do so, subject to the following conditions:
12+ #
13+ # The above copyright notice and this permission notice shall be included
14+ # in all copies or substantial portions of the Software.
15+ #
16+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19+ # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20+ # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21+ # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22+ # OTHER DEALINGS IN THE SOFTWARE.
23+ #
24+ name : Test build-sign-scan reusable workflow
25+
26+ on :
27+ push :
28+ paths :
29+ - .github/workflows/test-build-sign-scan.yaml
30+ - build-sign-scan/**
31+ workflow_dispatch :
32+
33+ jobs :
34+ test-docker-build-local :
35+ uses : ./.github/workflows/build-sign-scan.yaml
36+ with :
37+ context_path : build-sign-scan/tests/alpine
38+ docker_tag : artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-local-1
39+ docker_additional_tags : |
40+
41+ artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-local-2
42+ docker_build_args : |
43+ --label='Random label 1'
44+
45+ --label="Random label 2"
46+ env : |
47+ VAR1=var1
48+
49+ VAR2='var2 var2'
50+ VAR3="var3 var3"
51+ VAR4='var4
52+ var4'
53+ VAR5="var4
54+ var4"
55+ docker_push : false
56+ snyk : false
57+ sign : false
58+
59+ # test-docker-build-single-platform:
60+ # uses: ./.github/workflows/build-sign-scan.yaml
61+ # with:
62+ # context_path: build-sign-scan/tests/alpine
63+ # docker_tag: artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-single-platform-1
64+ # docker_additional_tags: |
65+ # artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-single-platform-2
66+ # snyk: true
67+ # sign: true
68+ # secrets: inherit
69+
70+ # test-docker-build-multi-platform:
71+ # uses: ./.github/workflows/build-sign-scan.yaml
72+ # with:
73+ # context_path: build-sign-scan/tests/alpine
74+ # docker_tag: artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-multi-platform-1
75+ # docker_build_platforms: linux/amd64,linux/arm64
76+ # docker_additional_tags: |
77+ # artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-multi-platform-2
78+ # snyk: true
79+ # sign: true
80+ # secrets: inherit
81+
82+ # test-docker-build-secrets:
83+ # uses: ./.github/workflows/build-sign-scan.yaml
84+ # with:
85+ # context_path: build-sign-scan/tests/sles
86+ # docker_tag: artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-secrets-1
87+ # docker_build_platforms: linux/amd64,linux/arm64
88+ # docker_additional_tags: |
89+ # artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-docker-build-secrets-2
90+ # snyk: false
91+ # sign: false
92+ # secrets:
93+ # docker_username: ${{ secrets.ARTIFACTORY_ALGOL60_USERNAME }}
94+ # docker_password: ${{ secrets.ARTIFACTORY_ALGOL60_TOKEN }}
95+ # docker_secrets: |
96+ # SLES_REPO_USERNAME=${{ secrets.ARTIFACTORY_ALGOL60_READONLY_USERNAME }}
97+ # SLES_REPO_PASSWORD=${{ secrets.ARTIFACTORY_ALGOL60_READONLY_TOKEN }}
98+ # gcp_workload_identity_provider: ${{ secrets.COSIGN_GCP_WORKLOAD_IDENTITY_PROVIDER_RSA }}
99+ # gcp_service_account: ${{ secrets.COSIGN_GCP_SERVICE_ACCOUNT_RSA }}
100+ # gcp_cosign_key: ${{ secrets.COSIGN_KEY_RSA }}
101+ # snyk_token: ${{ secrets.SNYK_TOKEN }}
102+
103+ # test-docker-build-google:
104+ # uses: ./.github/workflows/build-sign-scan.yaml
105+ # with:
106+ # context_path: build-sign-scan/tests/alpine
107+ # docker_login: false
108+ # docker_oidc: true
109+ # docker_tag: us-docker.pkg.dev/hpe-stage-csm-release/csm-docker/unstable/test-build-sign-scan:test-docker-build-google-1
110+ # docker_build_platforms: linux/amd64,linux/arm64
111+ # docker_additional_tags: |
112+ # us-docker.pkg.dev/hpe-stage-csm-release/csm-docker/unstable/test-build-sign-scan:test-docker-build-google-2
113+ # snyk: true
114+ # sign: true
115+ # secrets: inherit
116+
117+ test-makefile-local :
118+ uses : ./.github/workflows/build-sign-scan.yaml
119+ with :
120+ context_path : build-sign-scan/tests/alpine
121+ make_target : local
122+ docker_login : false
123+ docker_additional_tags : |
124+
125+ artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-makefile-local-2
126+ docker_build_args : |
127+ --label='Random label 1'
128+
129+ --label="Random label 2"
130+ env : |
131+ VERSION=test-makefile-local-1
132+ VAR1=var1
133+
134+ VAR2='var2 var2'
135+ VAR3="var3 var3"
136+ VAR4='var4
137+ var4'
138+ VAR5="var4
139+ var4"
140+ snyk : false
141+ sign : false
142+
143+ # test-makefile-single-platform:
144+ # uses: ./.github/workflows/build-sign-scan.yaml
145+ # with:
146+ # context_path: build-sign-scan/tests/alpine
147+ # make_target: unstable
148+ # env: |
149+ # PLATFORM=linux/amd64
150+ # VERSION=test-makefile-single-platform-1
151+ # docker_additional_tags: |
152+ # artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-makefile-single-platform-2
153+ # snyk: true
154+ # sign: true
155+ # secrets: inherit
156+
157+ # test-makefile-multi-platform:
158+ # uses: ./.github/workflows/build-sign-scan.yaml
159+ # with:
160+ # context_path: build-sign-scan/tests/alpine
161+ # make_target: unstable
162+ # env: |
163+ # VERSION=test-makefile-multi-platform-1
164+ # docker_additional_tags: |
165+ # artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-makefile-multi-platform-2
166+ # snyk: true
167+ # sign: true
168+ # secrets: inherit
169+
170+ # test-makefile-secrets:
171+ # uses: ./.github/workflows/build-sign-scan.yaml
172+ # with:
173+ # context_path: build-sign-scan/tests/sles
174+ # make_target: unstable
175+ # env: |
176+ # VERSION=test-makefile-secrets-1
177+ # docker_additional_tags: |
178+ # artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan:test-makefile-secrets-2
179+ # snyk: false
180+ # sign: false
181+ # secrets:
182+ # docker_username: ${{ secrets.ARTIFACTORY_ALGOL60_USERNAME }}
183+ # docker_password: ${{ secrets.ARTIFACTORY_ALGOL60_TOKEN }}
184+ # docker_secrets: |
185+ # SLES_REPO_USERNAME=${{ secrets.ARTIFACTORY_ALGOL60_READONLY_USERNAME }}
186+ # SLES_REPO_PASSWORD=${{ secrets.ARTIFACTORY_ALGOL60_READONLY_TOKEN }}
187+ # gcp_workload_identity_provider: ${{ secrets.COSIGN_GCP_WORKLOAD_IDENTITY_PROVIDER_RSA }}
188+ # gcp_service_account: ${{ secrets.COSIGN_GCP_SERVICE_ACCOUNT_RSA }}
189+ # gcp_cosign_key: ${{ secrets.COSIGN_KEY_RSA }}
190+ # snyk_token: ${{ secrets.SNYK_TOKEN }}
191+
192+ # test-makefile-google:
193+ # uses: ./.github/workflows/build-sign-scan.yaml
194+ # with:
195+ # context_path: build-sign-scan/tests/alpine
196+ # make_target: unstable
197+ # docker_login: false
198+ # docker_oidc: true
199+ # env: |
200+ # REGISTRY=us-docker.pkg.dev/hpe-stage-csm-release/csm-docker/unstable
201+ # VERSION=test-makefile-google-1
202+ # docker_additional_tags: |
203+ # us-docker.pkg.dev/hpe-stage-csm-release/csm-docker/unstable/test-build-sign-scan:test-makefile-google-2
204+ # snyk: true
205+ # sign: true
206+ # secrets: inherit
207+
208+ # review:
209+ # runs-on: ubuntu-latest
210+
211+ # permissions:
212+ # contents: 'read'
213+ # id-token: 'write'
214+
215+ # needs:
216+ # - test-docker-build-local
217+ # - test-docker-build-single-platform
218+ # - test-docker-build-multi-platform
219+ # - test-docker-build-secrets
220+ # - test-docker-build-google
221+ # - test-makefile-local
222+ # - test-makefile-single-platform
223+ # - test-makefile-multi-platform
224+ # - test-makefile-secrets
225+ # - test-makefile-google
226+
227+ # steps:
228+ # - name: Report Test Results
229+ # env:
230+ # NEEDS_CONTEXT: ${{ toJSON(needs) }}
231+ # run: |
232+ # function assert() {
233+ # if ! [[ "${2}" =~ ${3} ]]; then
234+ # echo "::error::Test ${test_name}: ${1}: expected \"${3}\", got \"${2}\"."
235+ # exit_code=$((exit_code+1))
236+ # fi
237+ # }
238+
239+ # echo "$NEEDS_CONTEXT" > outputs.json
240+ # exit_code=0
241+ # for build_type in docker-build makefile; do
242+ # for image_type in local single-platform multi-platform secrets google; do
243+ # test_name="test-${build_type}-${image_type}"
244+
245+ # # Test built tags
246+ # image_name=artifactory.algol60.net/csm-docker-backup/unstable/test-build-sign-scan
247+ # test "${image_type}" == google && image_name=us-docker.pkg.dev/hpe-stage-csm-release/csm-docker/unstable/test-build-sign-scan
248+ # tags=$(jq -r ".\"${test_name}\".outputs.image_tags" outputs.json | tr ',' '\n' | sort | tr '\n' ',' | sed -e 's/,$//')
249+ # assert tags "${tags}" "${image_name}:${test_name}-1,${image_name}:${test_name}-2"
250+
251+ # # Test built platforms
252+ # platforms=$(jq -r ".\"${test_name}\".outputs.image_platforms" outputs.json)
253+ # test "${image_type}" == single && assert platforms "${platforms}" '["linux/amd64"]'
254+ # test "${image_type}" != local -a "${image_type}" != single-platform && assert platforms "${platforms}" '["linux/amd64","linux/arm64"]'
255+
256+ # # Test Snyk output
257+ # snyk_summary=$(jq -r ".\"${test_name}\".outputs.snyk_summary" outputs.json)
258+ # test "${image_type}" != local -a "${image_type}" != secrets && assert snyk_summary "${snyk_summary}" 'crtitical: [0-9]+, high: [0-9]+, medium: [0-9]+, low: [0-9]+'
259+
260+ # # Test Trivy output
261+ # trivy_summary=$(jq -r ".\"${test_name}\".outputs.trivy_summary" outputs.json)
262+ # test "${image_type}" != local -a "${image_type}" != secrets && assert trivy_summary "${trivy_summary}" '(Tests: [0-9]+ \(SUCCESSES: [0-9]+, FAILURES: [0-9]+\)|PASS)'
263+
264+ # # Test Scan output
265+ # sign_summary=$(jq -r ".\"${test_name}\".outputs.sign_summary" outputs.json)
266+ # test "${image_type}" != local -a "${image_type}" != secrets && assert sign_summary "${sign_summary}" 'Signed .+ with Cosign'
267+ # done
268+ # done
269+ # exit $exit_code
270+ # shell: bash
0 commit comments