[satlab]: Cloud build config to tag containers with release labels


Bug:202019867
Test: Manually run gcloud builds
Change-Id: Idb836ffc06922e4687353048b2cabe4963ac8f71
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/satlab/+/3270599
Reviewed-by: Ivan Brovkovich <ivanbrovkovich@chromium.org>
Reviewed-by: Anh Le <anhdle@chromium.org>
Commit-Queue: Prasad Vuppalapu <prasadv@chromium.org>
Tested-by: Prasad Vuppalapu <prasadv@chromium.org>
diff --git a/.gitignore b/.gitignore
index 9945326..b9a89be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,5 @@
 *pb*.ts
 *pb*.js
 .vscode/*
-.env
 *dist/
 
diff --git a/src/cloudbuild_release.yaml b/src/cloudbuild_release.yaml
new file mode 100644
index 0000000..070c2b0
--- /dev/null
+++ b/src/cloudbuild_release.yaml
@@ -0,0 +1,217 @@
+substitutions:
+  _BASE_REGISTRY_URI: us-docker.pkg.dev/chromeos-partner-moblab/base-containers
+  _COMMON_CORE_URI: gcr.io/chromeos-partner-moblab
+  _REGISTRY_URI: us-docker.pkg.dev/chromeos-partner-moblab/satlab
+  _SATLAB_REGISTRY_URI: gcr.io/satlab-images
+  _SSH_PORT: "22"
+  _COMMON_CORE_LABEL: ""
+  # Satlab drone, cache server images to use
+  _SATLAB_STABLE_IMAGE: ""
+  __LABEL: ""
+  __BUILD_VERSION: ""
+
+  # These labels/tags are part of satlab-compose
+  _CONF_CREATOR: "${__BUILD_VERSION}"
+  _GSA_SERVER: "${__BUILD_VERSION}"
+  _OPENSSH_SERVER: "${__BUILD_VERSION}"
+  _NGINX: "${__BUILD_VERSION}"
+  _SATLAB_DRONE: "${__BUILD_VERSION}"
+  _SATLAB_SECRETS: "${__BUILD_VERSION}"
+  _WATCHTOWER_CMD: --enable-lifecycle-hooks --interval 60 --include-restarting
+steps:
+  - id: docker-compose
+    name: "gcr.io/cloud-builders/docker"
+    args: ["pull", "${_BASE_REGISTRY_URI}/docker/compose:alpine-1.27.4"]
+    waitFor: ['-']
+  - id: moblab-common
+    name: "gcr.io/cloud-builders/docker"
+    args: ["pull", "${_COMMON_CORE_URI}/moblab_common:${_COMMON_CORE_LABEL}"]
+    waitFor: ['-']
+  - id: remote-access
+    name: "gcr.io/cloud-builders/docker"
+    args: ["pull", "${_COMMON_CORE_URI}/remote_access:${_COMMON_CORE_LABEL}"]
+    waitFor: ['-']
+
+  - id: drone-pull
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "pull",
+        "${_SATLAB_REGISTRY_URI}/drone:${_SATLAB_STABLE_IMAGE}",
+      ]
+    waitFor: ['-']
+  - id: drone
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "tag",
+        "${_SATLAB_REGISTRY_URI}/drone:${_SATLAB_STABLE_IMAGE}",
+        "${_SATLAB_REGISTRY_URI}/drone:${__BUILD_VERSION}"
+      ]
+    waitFor:
+      - "drone-pull"
+  - id: gsa-server-pull
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "pull",
+        "${_SATLAB_REGISTRY_URI}/gsa_server:${_SATLAB_STABLE_IMAGE}",
+      ]
+    waitFor: ['-']
+  - id: gsa-server
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "tag",
+        "${_SATLAB_REGISTRY_URI}/gsa_server:${_SATLAB_STABLE_IMAGE}",
+        "${_SATLAB_REGISTRY_URI}/gsa_server:${__BUILD_VERSION}"
+      ]
+    waitFor:
+      - "gsa-server-pull"
+  - id: nginx-pull
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "pull",
+        "${_SATLAB_REGISTRY_URI}/nginx:${_SATLAB_STABLE_IMAGE}",
+      ]
+    waitFor: ['-']
+  - id: nginx
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "tag",
+        "${_SATLAB_REGISTRY_URI}/nginx:${_SATLAB_STABLE_IMAGE}",
+        "${_SATLAB_REGISTRY_URI}/nginx:${__BUILD_VERSION}"
+      ]
+    waitFor:
+      - nginx-pull
+  - id: conf-creator-pull
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "pull",
+        "${_SATLAB_REGISTRY_URI}/conf_creator:${_SATLAB_STABLE_IMAGE}",
+      ]
+    waitFor: ['-']
+  - id: conf-creator
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "tag",
+        "${_SATLAB_REGISTRY_URI}/conf_creator:${_SATLAB_STABLE_IMAGE}",
+        "${_SATLAB_REGISTRY_URI}/conf_creator:${__BUILD_VERSION}"
+      ]
+    waitFor:
+      - conf-creator-pull
+  - id: satlab-secrets-pull
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "pull",
+        "${_SATLAB_REGISTRY_URI}/satlab_secrets:${_SATLAB_STABLE_IMAGE}",
+      ]
+    waitFor: ['-']
+  - id: satlab-secrets
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "tag",
+        "${_SATLAB_REGISTRY_URI}/satlab_secrets:${_SATLAB_STABLE_IMAGE}",
+        "${_SATLAB_REGISTRY_URI}/satlab_secrets:${__BUILD_VERSION}"
+      ]
+    waitFor:
+      - satlab-secrets-pull
+  - id: openssh-server-pull
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "pull",
+        "${_SATLAB_REGISTRY_URI}/openssh_server:${_SATLAB_STABLE_IMAGE}",
+      ]
+  - id: openssh-server
+    name: "gcr.io/cloud-builders/docker"
+    args:
+      [
+        "tag",
+        "${_SATLAB_REGISTRY_URI}/openssh_server:${_SATLAB_STABLE_IMAGE}",
+        "${_SATLAB_REGISTRY_URI}/openssh_server:${__BUILD_VERSION}"
+      ]
+    waitFor:
+      - openssh-server-pull
+  - id: compose
+    name: "gcr.io/cloud-builders/docker"
+    dir: src
+    args:
+      [
+        "build",
+        "--build-arg", "CONF_CREATOR_VER=${_CONF_CREATOR}",
+        "--build-arg", "GSA_SERVER_VER=${_GSA_SERVER}",
+        "--build-arg", "NGINX_VER=${_NGINX}",
+        "--build-arg", "SATLAB_DRONE_VER=${_SATLAB_DRONE}",
+        "--build-arg", "SATLAB_SECRETS_VER=${_SATLAB_SECRETS}",
+        "--build-arg", "REGISTRY_URI=${_REGISTRY_URI}",
+        "--build-arg", "SATLAB_REGISTRY_URI=${_SATLAB_REGISTRY_URI}",
+        "--build-arg", "LABEL=${__LABEL}",
+        "--build-arg", "COMMON_CORE_LABEL=${_COMMON_CORE_LABEL}",
+        "--build-arg", "COMMON_CORE_URI=${_COMMON_CORE_URI}",
+        "--build-arg", "BASE_REGISTRY_URI=${_BASE_REGISTRY_URI}",
+        "--build-arg", "BUILD_VERSION=${__BUILD_VERSION}",
+        "--label=version=${__BUILD_VERSION}",
+        "-t", "${_REGISTRY_URI}/satlab-compose:${__LABEL}",
+        "-f", "dockerfiles/compose/Dockerfile",
+        "."
+      ]
+    env:
+      - "DOCKER_BUILDKIT=1"
+      - "WATCHTOWER_CMD=${_WATCHTOWER_CMD}"
+    waitFor:
+     - "docker-compose"
+     - "moblab-common"
+     - drone
+     - gsa-server
+     - nginx
+     - conf-creator
+     - satlab-secrets
+  - id: satlab-remote-access
+    name: "gcr.io/cloud-builders/docker"
+    dir: src
+    args:
+      [
+        "build",
+        "--build-arg", "REGISTRY_URI=${_REGISTRY_URI}",
+        "--build-arg", "SATLAB_REGISTRY_URI=${_SATLAB_REGISTRY_URI}",
+        "--build-arg", "LABEL=${__LABEL}",
+        "--build-arg", "COMMON_CORE_LABEL=${_COMMON_CORE_LABEL}",
+        "--build-arg", "COMMON_CORE_URI=${_COMMON_CORE_URI}",
+        "--build-arg", "BASE_REGISTRY_URI=${_BASE_REGISTRY_URI}",
+        "--build-arg", "BUILD_VERSION=${__BUILD_VERSION}",
+        "-t", "${_REGISTRY_URI}/satlab_remote_access:${__LABEL}",
+        "-f", "dockerfiles/satlab_remote_access/Dockerfile",
+        "."
+      ]
+    env:
+      - "DOCKER_BUILDKIT=1"
+      - "SSH_PORT=${_SSH_PORT}"
+    waitFor:
+      - "remote-access"
+
+images:
+  [
+    "${_REGISTRY_URI}/satlab-compose:${__LABEL}",
+    "${_REGISTRY_URI}/satlab_remote_access:${__LABEL}",
+    "${_SATLAB_REGISTRY_URI}/drone:${__BUILD_VERSION}",
+    "${_SATLAB_REGISTRY_URI}/gsa_server:${__BUILD_VERSION}",
+    "${_SATLAB_REGISTRY_URI}/nginx:${__BUILD_VERSION}",
+    "${_SATLAB_REGISTRY_URI}/conf_creator:${__BUILD_VERSION}",
+    "${_SATLAB_REGISTRY_URI}/satlab_secrets:${__BUILD_VERSION}",
+    "${_SATLAB_REGISTRY_URI}/openssh_server:${__BUILD_VERSION}",
+  ]
+
+options:
+  # Use higher CPU machines so the caching and build steps are faster.
+  machineType: "N1_HIGHCPU_32"
+  dynamic_substitutions: true
+  substitution_option: "ALLOW_LOOSE"
+
+timeout: 18000s
\ No newline at end of file
diff --git a/src/dockerfiles/compose/.env b/src/dockerfiles/compose/.env
index 5faeb3b..d888cdf 100644
--- a/src/dockerfiles/compose/.env
+++ b/src/dockerfiles/compose/.env
@@ -5,4 +5,4 @@
 SATLAB_DRONE=stable
 SATLAB_SECRETS=stable
 DNS=${COMMON_CORE_LABEL}
-WATCHTOWER=${COMMON_CORE_LABEL}
\ No newline at end of file
+WATCHTOWER=release
\ No newline at end of file
diff --git a/src/dockerfiles/compose/Dockerfile b/src/dockerfiles/compose/Dockerfile
index 58598d5..615b731 100644
--- a/src/dockerfiles/compose/Dockerfile
+++ b/src/dockerfiles/compose/Dockerfile
@@ -36,6 +36,7 @@
 ARG GSA_SERVER_VER
 ARG NGINX_VER
 ARG SATLAB_SECRETS_VER
+ARG OPENSSH_SERVER_VER
 
 # These are re-defined because ARG has a different scope
 # before and after the FROM instruction.
@@ -84,6 +85,7 @@
 RUN ./override_service_version.sh NGINX ${NGINX_VER:-${BUILD_VERSION}}
 RUN ./override_service_version.sh SATLAB_DRONE ${SATLAB_DRONE_VER:-${BUILD_VERSION}}
 RUN ./override_service_version.sh SATLAB_SECRETS ${SATLAB_SECRETS_VER:-${BUILD_VERSION}}
+RUN ./override_service_version.sh OPENSSH_SERVER ${OPENSSH_SERVER_VER:-${BUILD_VERSION}}
 
 ENTRYPOINT ["/compose_startup.sh"]