Automate Gitpod Docker image testing and promotion

Overview

Our Gitpod integration uses GDK under the hood which is built into a Docker image called registry.gitlab.com/gitlab-org/gitlab-development-kit/gitpod-workspace:stable (note the stable tag. The stable tag is created via a manual process that begins with !60384 (closed) where we manually test the nightly built registry.gitlab.com/gitlab-org/gitlab-development-kit/gitpod-workspace:main (note the main tag) image and promote to stable if the manual tests pass.

Here's the steps we currently issue to make this happen:

  1. Visit !60384 (closed)
  2. Rebase gdk-gitpod-integration-branch branch that's associated with !60384 (closed)
  3. Open https://gitlab.com/gitlab-org/gitlab/-/tree/gdk-gitpod-integration-branch in a new tab to bring up the tree view for the gdk-gitpod-integration-branch branch which then displays the 'Gitpod' button.
  4. Click the 'Gitpod' button which will create a new instance using registry.gitlab.com/gitlab-org/gitlab-development-kit/gitpod-workspace:main (note the main tag).
  5. After a few moments, the Gitpod interface will appear as will some familiar GDK output in the log window at the bottom of the page.
  6. Back on !60384 (closed), we create a new comment using the template provided in step 3 at !60384 (closed).
  7. We then perform each test.
  8. If all tests pass, we visit the most recently ' Rebuild Gitpod workspace image ' pipeline execution at https://gitlab.com/gitlab-org/gitlab-development-kit/-/pipeline_schedules and then press 'Play' on the manual deploy-gitpod-workspace-image job which updates registry.gitlab.com/gitlab-org/gitlab-development-kit/gitpod-workspace:stable to be the same ref as registry.gitlab.com/gitlab-org/gitlab-development-kit/gitpod-workspace:main.

New Gitpod instances created from now on will use the updated registry.gitlab.com/gitlab-org/gitlab-development-kit/gitpod-workspace:stable Docker image.

Challenge

As you can see, there's quite a few steps that are a little burdensome so we'd love to automate it as much as possible so:

  1. As many steps as possible are run automatically.
  2. The entire process is run regularly without intervention.
  3. Any failures result in a new Issue or Slack error being generated and the stable tag remains untouched.

Thoughts @gl-quality/eng-prod ?

Edited by Ash McKenzie