Skip to content

Commit d2cb9dc

Browse files
authored
Merge pull request #51 from krancour/image-signing
release: sign image
2 parents 92364bf + dda595c commit d2cb9dc

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

.brigade/brigade.ts

Lines changed: 16 additions & 2 deletions
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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,15 @@ push:
165165
--push \
166166
.
167167

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

0 commit comments

Comments
 (0)