local jobs = [
  { name: 'pggat', merge: {} },
];
local param_job(image, tag_var, merge={}) = std.mergePatch({
  stage: 'build',
  image: {
    name: 'gcr.io/kaniko-project/executor:debug',
    entrypoint: [''],
  },
  script: [
    'mkdir -p /kaniko/.docker',
    @'echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64)\"}}}" > /kaniko/.docker/config.json',
    std.strReplace(|||
      /kaniko/executor
      --context ${CI_PROJECT_DIR}
      --cache=true
      --cache-repo="${CI_REGISTRY_IMAGE}/kaniko/cache"
      --compressed-caching=false
      --build-arg GOPROXY
      --registry-mirror=mirror.gfx.cafe
      --registry-mirror=mirror.gcr.io
      --registry-mirror=index.docker.io
      --dockerfile "${CI_PROJECT_DIR}/%(img)s.Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}/%(img)s:%(tag_var)s"
      --destination "${CI_REGISTRY_IMAGE}/%(img)s:${CI_COMMIT_SHORT_SHA}"
      --snapshotMode=redo
    ||| % { img: image, tag_var: tag_var }, '\n', ' '),
  ],
}, merge);
{
  [job.name + '-tag']: param_job(job.name, '${CI_COMMIT_TAG}', std.mergePatch(job.merge, { only: ['tags'] }))
  for job in jobs
} + {
  [job.name]: param_job(job.name, '${CI_COMMIT_BRANCH}', job.merge)
  for job in jobs
}