Skip to content

Commit 9143686

Browse files
authored
Merge pull request #57 from krancour/image-signing
release: sign image
2 parents f616a26 + f0d9829 commit 9143686

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

.brigade/brigade.ts

+16-2
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ const buildJob = (event: Event, version?: string) => {
105105
let registryOrg: string
106106
let registryUsername: string
107107
let registryPassword: string
108+
let signingSetupCommands = ""
109+
let signingCommand = ""
108110
if (!version) { // This is where we'll push potentially unstable images
109111
registry = secrets.unstableImageRegistry
110112
registryOrg = secrets.unstableImageRegistryOrg
@@ -117,6 +119,16 @@ const buildJob = (event: Event, version?: string) => {
117119
registryPassword = secrets.stableImageRegistryPassword
118120
// Since it's defined, the make target will want this env var
119121
env["VERSION"] = version
122+
env["BASE64_IMAGE_SIGNING_KEY"] = secrets.base64ImageSigningKey
123+
// This env var is documented here:
124+
// https://docs.docker.com/engine/security/trust/trust_automation/
125+
env["DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE"] = secrets.imageSigningKeyPassphrase
126+
const keyDir = "~/.docker/trust/private"
127+
const keyFile = `${keyDir}/${secrets.imageSigningKeyHash}.key`
128+
signingSetupCommands = `mkdir -p ${keyDir} && chmod 700 ${keyDir} && ` +
129+
`printf $BASE64_IMAGE_SIGNING_KEY | base64 -d > ${keyFile} && chmod 600 ${keyFile} && ` +
130+
`docker trust key load --name ${registryUsername} ${keyFile} && `
131+
signingCommand = " && make sign"
120132
}
121133
if (registry) {
122134
// Since it's defined, the make target will want this env var
@@ -137,17 +149,19 @@ const buildJob = (event: Event, version?: string) => {
137149
env["IMAGE_REGISTRY_PASSWORD"] = registryPassword
138150
registriesLoginCmd = `${registriesLoginCmd} && docker login ${registry} -u ${registryUsername} -p $IMAGE_REGISTRY_PASSWORD`
139151
}
140-
const job = new JobWithSource("build", dockerClientImg, event, env)
152+
const job = new JobWithSource(buildJobName, dockerClientImg, event, env)
141153
job.primaryContainer.command = [ "sh" ]
142154
job.primaryContainer.arguments = [
143155
"-c",
144156
// The sleep is a grace period after which we assume the DinD sidecar is
145157
// probably up and running.
146158
"sleep 20 && " +
147159
`${registriesLoginCmd} && ` +
160+
signingSetupCommands +
148161
"docker buildx create --name builder --use && " +
149162
"docker info && " +
150-
"make push"
163+
"make push" +
164+
signingCommand
151165
]
152166
job.sidecarContainers.dind = new Container(dindImg)
153167
job.sidecarContainers.dind.privileged = true

Makefile

+9
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,15 @@ push:
167167
--push \
168168
.
169169

170+
.PHONY: sign
171+
sign:
172+
docker pull $(DOCKER_IMAGE_NAME):$(IMMUTABLE_DOCKER_TAG)
173+
docker pull $(DOCKER_IMAGE_NAME):$(MUTABLE_DOCKER_TAG)
174+
docker trust sign $(DOCKER_IMAGE_NAME):$(IMMUTABLE_DOCKER_TAG)
175+
docker trust sign $(DOCKER_IMAGE_NAME):$(MUTABLE_DOCKER_TAG)
176+
docker trust inspect --pretty $(DOCKER_IMAGE_NAME):$(IMMUTABLE_DOCKER_TAG)
177+
docker trust inspect --pretty $(DOCKER_IMAGE_NAME):$(MUTABLE_DOCKER_TAG)
178+
170179
.PHONY: publish-chart
171180
publish-chart:
172181
$(HELM_DOCKER_CMD) sh -c ' \

0 commit comments

Comments
 (0)