Skip to content

Commit e91b251

Browse files
committed
feat(docker): sign built images with cosign
Signed-off-by: Emilien Escalle <emilien.escalle@escemi.com>
1 parent cd824b3 commit e91b251

14 files changed

Lines changed: 300 additions & 178 deletions

.github/workflows/__main-ci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ permissions:
2020
pull-requests: write
2121
security-events: write
2222
statuses: write
23-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
2423
id-token: write
2524

2625
concurrency:

.github/workflows/__pull-request-ci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ permissions:
1414
pull-requests: write
1515
security-events: write
1616
statuses: write
17-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
1817
id-token: write
1918

2019
concurrency:

.github/workflows/__shared-ci.yml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ permissions:
1212
pull-requests: read
1313
security-events: write
1414
statuses: write
15-
# yamllint disable-line rule:line-length
16-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
1715
id-token: write
1816

1917
jobs:
@@ -42,10 +40,6 @@ jobs:
4240
needs: linter
4341
uses: ./.github/workflows/__test-action-get-image-name.yml
4442

45-
test-action-helm-generate-docs:
46-
needs: linter
47-
uses: ./.github/workflows/__test-action-helm-generate-docs.yml
48-
4943
test-action-helm-parse-chart-uri:
5044
needs: linter
5145
uses: ./.github/workflows/__test-action-helm-parse-chart-uri.yml

.github/workflows/__test-action-docker-prune-pull-requests-image-tags.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ permissions:
1010
issues: read
1111
packages: write
1212
pull-requests: read
13-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
1413
id-token: write
1514

1615
env:

.github/workflows/__test-action-helm-generate-docs.yml

Lines changed: 0 additions & 23 deletions
This file was deleted.

.github/workflows/__test-action-helm-test-chart.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ permissions:
1010
issues: read
1111
packages: write
1212
pull-requests: read
13-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
1413
id-token: write
1514

1615
jobs:

.github/workflows/__test-workflow-docker-build-images.yml

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ permissions:
1010
issues: read
1111
packages: write
1212
pull-requests: read
13-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
1413
id-token: write
1514

1615
# jscpd:ignore-start
1716
jobs:
1817
arrange:
18+
name: Arrange
1919
runs-on: ubuntu-latest
2020
steps:
2121
- run: |
@@ -24,7 +24,8 @@ jobs:
2424
exit 1
2525
fi
2626
27-
act-build-arch:
27+
act-build-images:
28+
name: Act - Build multi-arch and mono-arch images
2829
needs: arrange
2930
uses: ./.github/workflows/docker-build-images.yml
3031
secrets:
@@ -55,17 +56,18 @@ jobs:
5556
}
5657
]
5758
58-
assert-build-arch:
59-
needs: act-build-arch
59+
assert-build-arch-mono-arch:
60+
name: Assert - multi-arch and mono-arch builds
61+
needs: act-build-images
6062
runs-on: "ubuntu-latest"
6163
steps:
62-
- name: Check built images ouput
64+
- name: Assert - built images output
6365
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
6466
with:
6567
script: |
6668
const assert = require("assert");
6769
68-
const builtImagesOutput = `${{ needs.act-build-arch.outputs.built-images }}`;
70+
const builtImagesOutput = `${{ needs.act-build-images.outputs.built-images }}`;
6971
assert(builtImagesOutput.length, `"built-images" output is empty`);
7072
7173
// Check if is valid Json
@@ -132,13 +134,13 @@ jobs:
132134
username: ${{ github.repository_owner }}
133135
password: ${{ github.token }}
134136

135-
- name: Check multi-arch docker image and manifest
137+
- name: Assert - multi-arch docker image and manifest
136138
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
137139
with:
138140
script: |
139141
const assert = require("assert");
140142
141-
const image = `${{ fromJson(needs.act-build-arch.outputs.built-images).test-multi-arch.images[0] }}`;
143+
const image = `${{ fromJson(needs.act-build-images.outputs.built-images).test-multi-arch.images[0] }}`;
142144
143145
await exec.exec('docker', ['pull', image]);
144146
@@ -194,13 +196,23 @@ jobs:
194196
assert.equal(annotations[key], value, `Expected annotation not found: ${key}`);
195197
});
196198
199+
- name: Assert signed multi-arch docker image
200+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
201+
with:
202+
script: |
203+
const assert = require("assert");
204+
205+
for(const image of ${{ fromJson(needs.act-build-images.outputs.built-images).test-multi-arch.images }}) {
206+
await exec.exec('cosign', ['verify', image]);
207+
}
208+
197209
- name: Check mono-arch docker image
198210
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
199211
with:
200212
script: |
201213
const assert = require("assert");
202214
203-
const image = `${{ fromJson(needs.act-build-arch.outputs.built-images).test-mono-arch.images[0] }}`;
215+
const image = `${{ fromJson(needs.act-build-images.outputs.built-images).test-mono-arch.images[0] }}`;
204216
205217
await exec.exec('docker', ['pull', image]);
206218
@@ -239,7 +251,18 @@ jobs:
239251
);
240252
});
241253
254+
- name: Assert signed mono-arch docker image
255+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
256+
with:
257+
script: |
258+
const assert = require("assert");
259+
260+
for(const image of ${{ fromJson(needs.act-build-images.outputs.built-images).test-mono-arch.images }}) {
261+
await exec.exec('cosign', ['verify', image]);
262+
}
263+
242264
act-build-args-secrets-and-registry-caching:
265+
name: Act - Build with args, secrets and registry caching
243266
needs: arrange
244267
uses: ./.github/workflows/docker-build-images.yml
245268
secrets:
@@ -275,6 +298,7 @@ jobs:
275298
SECRET_ENV_GITHUB_APP_TOKEN_2
276299
277300
assert-build-args-secrets-and-registry-caching:
301+
name: Assert - Build with args, secrets and registry caching
278302
needs: act-build-args-secrets-and-registry-caching
279303
runs-on: "ubuntu-latest"
280304
steps:

.github/workflows/docker-build-images.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Needs the following permissions:
1919
- `issues`: `read`
2020
- `packages`: `write`
2121
- `pull-requests`: `read`
22-
- `id-token`: `write` <!-- FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659 -->
22+
- `id-token`: `write`
2323

2424
<!-- end description -->
2525
<!-- start contents -->
@@ -39,7 +39,6 @@ permissions:
3939
issues: read
4040
packages: write
4141
pull-requests: read
42-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
4342
id-token: write
4443

4544
jobs:

.github/workflows/docker-build-images.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ permissions:
137137
issues: read
138138
packages: write
139139
pull-requests: read
140-
# FIXME: This is a workaround for having workflow actions. See https://github.com/orgs/community/discussions/38659
141140
id-token: write
142141

143142
jobs:
@@ -500,3 +499,9 @@ jobs:
500499
oci-registry-username: ${{ inputs.oci-registry-username }}
501500
oci-registry-password: ${{ secrets.oci-registry-password }}
502501
built-images: ${{ steps.built-images.outputs.built-images }}
502+
503+
- id: sign-images
504+
uses: ./self-workflow/actions/docker/sign-images
505+
with:
506+
built-images: ${{ steps.built-images.outputs.built-images }}
507+
github-token: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!-- start title -->
2+
<!-- end title -->
3+
<!--
4+
// jscpd:ignore-start
5+
-->
6+
<!-- markdownlint-disable MD013 -->
7+
<!-- start badges -->
8+
<!-- end badges -->
9+
<!-- markdownlint-enable MD013 -->
10+
<!--
11+
// jscpd:ignore-end
12+
-->
13+
<!-- start description -->
14+
<!-- end description -->
15+
<!-- start contents -->
16+
<!-- end contents -->
17+
18+
If default GitHub token is used, the following permissions are required:
19+
20+
```yml
21+
permissions:
22+
id-token: write
23+
```
24+
25+
<!-- start usage -->
26+
<!-- end usage -->
27+
<!-- start inputs -->
28+
<!-- end inputs -->
29+
<!-- markdownlint-disable MD013 -->
30+
<!-- start outputs -->
31+
<!-- end outputs -->
32+
<!-- markdownlint-enable MD013 -->
33+
<!-- start [.github/ghadocs/examples/] -->
34+
<!-- end [.github/ghadocs/examples/] -->

0 commit comments

Comments
 (0)