@@ -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
0 commit comments