From 088ad72f01d210de111ad1b87c2823c378625be7 Mon Sep 17 00:00:00 2001 From: Rob Brackett Date: Tue, 27 Oct 2020 00:51:51 -0700 Subject: [PATCH] Only push `:latest` docker tag on final releases When we publish alpha/beta releases (e.g. "v1.0.0a1") we should push the image tagged with the version to Docker Hub, but we should *not* update the `:latest` tag. That one should always point to a stable release for now. --- .circleci/config.yml | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 292fd22..c6df1c0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -75,22 +75,45 @@ jobs: name: Load Built Docker Image command: docker load --input /tmp/workspace/docker-image - run: - name: Re-tag Image + name: Docker Login + command: docker login -u $DOCKER_USER -p $DOCKER_PASS + # TODO: Drop these SHA-tagged builds in favor of just release numbers. + # We maintain them for now for compatibility w/ a previous release style. + - run: + name: Publish Commit-SHA-Tagged Image + command: docker push envirodgi/web-monitoring-diff:${CIRCLE_SHA1} + - run: + name: Publish Version-Tagged Image command: | - if [ -n "${CIRCLE_TAG}" ]; then - docker image tag envirodgi/web-monitoring-diff:${CIRCLE_SHA1} envirodgi/web-monitoring-diff:${CIRCLE_TAG:1} - docker image tag envirodgi/web-monitoring-diff:${CIRCLE_SHA1} envirodgi/web-monitoring-diff:latest + # Sanity-check that we are dealing with an actual release tag. + if [ -z "${CIRCLE_TAG}" ]; then + echo 'There is no git tag to use!' + else + # Re-tag the Docker image with the current version number, which + # is based on the current git tag ($CIRCLE_TAG). + docker image tag \ + envirodgi/web-monitoring-diff:${CIRCLE_SHA1} \ + envirodgi/web-monitoring-diff:${CIRCLE_TAG:1} + docker push envirodgi/web-monitoring-diff:${CIRCLE_TAG:1} fi - run: - name: Publish to Docker Hub + name: Publish :latest Tag If Final Release command: | - docker login -u $DOCKER_USER -p $DOCKER_PASS - docker push envirodgi/web-monitoring-diff:${CIRCLE_SHA1} - if [ -n "${CIRCLE_TAG}" ]; then - docker push envirodgi/web-monitoring-diff:${CIRCLE_TAG:1} - docker push envirodgi/web-monitoring-diff:latest + # Skip tags with additional info after "v0.0.0", e.g. "v1.0.0a1" + FINAL_VERSION="$(echo "${CIRCLE_TAG}" | grep -E '^v\d+(\.\d+)+$')" + if [ -z "${FINAL_VERSION}" ]; then + echo 'The current tag does not represent a final release!' + echo 'Not publishing a ":latest" tag.' + else + docker image tag \ + envirodgi/web-monitoring-diff:${CIRCLE_SHA1} \ + envirodgi/web-monitoring-diff:latest + docker push envirodgi/web-monitoring-diff:latest fi + # TODO: Publish to PyPI from CircleCI for version tags, similar to Docker. + # publish_pypi: + workflows: build: jobs: