3333 env :
3434 CONTAINER_IMAGE_ID : " ghcr.io/super-linter/super-linter:${{ matrix.images.prefix }}latest"
3535 CONTAINER_IMAGE_TARGET : " ${{ matrix.images.target }}"
36+ CONTAINER_IMAGE_OUTPUT_IMAGE_NAME : " super-linter-${{ matrix.images.prefix }}latest"
3637 steps :
3738 - name : Checkout Code
3839 uses : actions/checkout@v4
@@ -94,14 +95,21 @@ jobs:
9495 BUILD_REVISION=${{ env.BUILD_REVISION }}
9596 BUILD_VERSION=${{ env.BUILD_VERSION }}
9697 cache-from : type=registry,ref=${{ env.CONTAINER_IMAGE_ID }}-buildcache
97- load : true
98+ outputs : type=docker,dest=/tmp/${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }}.tar
9899 push : false
99100 secrets : |
100101 GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
101102 tags : |
102103 ${{ env.CONTAINER_IMAGE_ID }}
103104 target : " ${{ matrix.images.target }}"
104105
106+ # Load the image here because the docker/build-push-action doesn't support multiple exporters yet
107+ # Ref: https://github.com/docker/build-push-action/issues/413
108+ # Ref: https://github.com/moby/buildkit/issues/1555
109+ - name : Load image
110+ run : |
111+ docker load <"/tmp/${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }}.tar"
112+
105113 - name : Test Local Action (debug log)
106114 uses : ./
107115 env :
@@ -128,8 +136,81 @@ jobs:
128136 FILTER_REGEX_EXCLUDE : " .*(/test/linters/|CHANGELOG.md).*"
129137 TYPESCRIPT_STANDARD_TSCONFIG_FILE : " .github/linters/tsconfig.json"
130138
131- - name : Run Test Suite
132- run : make test
139+ # Validate the container image labels here so we don't have to pass the expected
140+ # label values to other build jobs
141+ - name : Validate container image labels
142+ run : make validate-container-image-labels
143+
144+ - name : Upload ${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }} container image
145+ uses : actions/upload-artifact@v4.3.1
146+ with :
147+ name : ${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }}
148+ path : /tmp/${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }}.tar
149+
150+ build-test-suite-matrix :
151+ name : Build test suite matrix
152+ runs-on : ubuntu-latest
153+ needs : test
154+ permissions :
155+ contents : read
156+ outputs :
157+ matrix : ${{ steps.generate-matrix.outputs.test-cases }}
158+ steps :
159+ - name : Checkout Code
160+ uses : actions/checkout@v4
161+ with :
162+ fetch-depth : 0
163+ - name : Generate test cases matrix
164+ id : generate-matrix
165+ run : |
166+ TEST_TARGETS=$(make -pRrq 2>&1 | grep 'test:' | tr -d '\n' | sed -e "s/^test: //" | jq --raw-input --slurp --compact-output 'split(" ")')
167+ echo "TEST_TARGETS: ${TEST_TARGETS}"
168+ echo "test-cases=${TEST_TARGETS}" >> "${GITHUB_OUTPUT}"
169+
170+ run-test-suite :
171+ name : Run test cases
172+ runs-on : ubuntu-latest
173+ permissions :
174+ contents : read
175+ needs : build-test-suite-matrix
176+ strategy :
177+ matrix :
178+ test-case : ${{ fromJson(needs.build-test-suite-matrix.outputs.matrix) }}
179+ images :
180+ - container-image-id : super-linter-latest
181+ prefix : " "
182+ target : standard
183+ - container-image-id : super-linter-slim-latest
184+ prefix : slim-
185+ target : slim
186+ exclude :
187+ # Don't validate container image labels because we do that when building the image
188+ - test-case : validate-container-image-labels
189+ env :
190+ CONTAINER_IMAGE_ID : " ghcr.io/super-linter/super-linter:${{ matrix.images.prefix }}latest"
191+ CONTAINER_IMAGE_TARGET : " ${{ matrix.images.target }}"
192+ CONTAINER_IMAGE_OUTPUT_IMAGE_NAME : " super-linter-${{ matrix.images.prefix }}latest"
193+ steps :
194+ - name : Checkout Code
195+ uses : actions/checkout@v4
196+ with :
197+ fetch-depth : 0
198+
199+ - name : Download ${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }} container image
200+ uses : actions/download-artifact@v4.1.2
201+ with :
202+ name : ${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }}
203+ path : /tmp
204+
205+ - name : Load ${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }} container image
206+ run : |
207+ docker load --input /tmp/${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }}.tar
208+ docker image ls -a
209+
210+ - name : " Test case: ${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }} - ${{ matrix.test-case }}"
211+ run : |
212+ echo "Running: ${{ env.CONTAINER_IMAGE_OUTPUT_IMAGE_NAME }} - ${{ matrix.test-case }}"
213+ make ${{ matrix.test-case }}
133214 env :
134215 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
135216
0 commit comments