diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a8260308b30f51b5f6f7f6ad8c3c224c96c832a6..0a2cb932f7513e0a102d8fd568d89982f012a4cb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,6 @@
 variables:
+  STABLE_VERSION: "0.12"
+  STABLE_IMAGE_NAME: "$CI_REGISTRY_IMAGE/stable:latest"
   BUILD_IMAGE_NAME: "$CI_REGISTRY_IMAGE/branches/$CI_COMMIT_REF_SLUG-$TERRAFORM_VERSION:$CI_COMMIT_SHA"
   RELEASE_IMAGE_NAME: "$CI_REGISTRY_IMAGE/releases/$TERRAFORM_VERSION"
   TF_ADDRESS: "$CI_API_V4_URL/projects/$CI_PROJECT_ID/terraform/state/$CI_JOB_ID"
@@ -48,6 +50,8 @@ stages:
     - docker image tag "$BUILD_IMAGE_NAME" "$RELEASE_IMAGE_NAME:$CI_COMMIT_TAG"
     - docker image push "$RELEASE_IMAGE_NAME:latest"
     - docker image push "$RELEASE_IMAGE_NAME:$CI_COMMIT_TAG"
+    - if [ "$TERRAFORM_VERSION" = "$STABLE_VERSION" ]; then docker image tag "$BUILD_IMAGE_NAME" "$STABLE_IMAGE_NAME"; fi
+    - if [ "$TERRAFORM_VERSION" = "$STABLE_VERSION" ]; then docker image push "$STABLE_IMAGE_NAME"; fi
 
   only:
     - tags
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9a485480874947f036ec5f7ddf3a7d1ddb93ec70..040eee14546605d96ac276e3720a1ca892fadc33 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -22,3 +22,11 @@ an empty commit sumarizing your changes like so:
 
 ```
 git commit --allow-empty -m '[BREAKING CHANGE|feat|fix]: <changelog summary message
+
+### Stable tag
+
+This project updates a `stable:latest` tag in the container registry which
+tracks the latest build of the image specified in `STABLE_VERSION` in
+`.gitlab-ci.yml`. Simply update this to reflect what version series is
+considered stable by upstream and the `stable:latest` tag will be updated
+automatically.