version: 2 jobs: # Define in CircleCi Project Variables: $DOCKERHUB_REPO, $DOCKERHUB_USER, $DOCKERHUB_PASS # Publish jobs require those variables publish_docker_linuxamd64: machine: docker_layer_caching: false steps: - checkout - run: command: | LATEST_TAG="${CIRCLE_TAG:1}" DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-amd64" DOCKERHUB_DOCKERFILE="dockerfiles/Dockerfile" sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS sudo docker build --pull -t "$DOCKERHUB_DESTINATION" -f "$DOCKERHUB_DOCKERFILE" . sudo docker push "$DOCKERHUB_DESTINATION" no_output_timeout: 25m publish_docker_linuxarm32v7: machine: docker_layer_caching: false steps: - checkout - run: command: | sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset LATEST_TAG="${CIRCLE_TAG:1}" DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-arm32v7" DOCKERHUB_DOCKERFILE="dockerfiles/Dockerfile.arm32v7" sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS sudo docker build --pull -t "$DOCKERHUB_DESTINATION" -f "$DOCKERHUB_DOCKERFILE" . sudo docker push "$DOCKERHUB_DESTINATION" no_output_timeout: 25m publish_docker_linuxarm64v8: machine: docker_layer_caching: false steps: - checkout - run: command: | sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset LATEST_TAG="${CIRCLE_TAG:1}" DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-arm64v8" DOCKERHUB_DOCKERFILE="dockerfiles/Dockerfile.arm64v8" sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS sudo docker build --pull -t "$DOCKERHUB_DESTINATION" -f "$DOCKERHUB_DOCKERFILE" . sudo docker push "$DOCKERHUB_DESTINATION" no_output_timeout: 25m publish_docker_multiarch: machine: enabled: true image: circleci/classic:201808-01 steps: - run: command: | # Turn on Experimental features LATEST_TAG="${CIRCLE_TAG:1}" sudo mkdir $HOME/.docker sudo sh -c 'echo "{ \"experimental\": \"enabled\" }" >> $HOME/.docker/config.json' # sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS # sudo docker manifest create --amend "$DOCKERHUB_REPO:$LATEST_TAG" "$DOCKERHUB_REPO:$LATEST_TAG-amd64" "$DOCKERHUB_REPO:$LATEST_TAG-arm32v7" "$DOCKERHUB_REPO:$LATEST_TAG-arm64v8" sudo docker manifest annotate "$DOCKERHUB_REPO:$LATEST_TAG" "$DOCKERHUB_REPO:$LATEST_TAG-amd64" --os linux --arch amd64 sudo docker manifest annotate "$DOCKERHUB_REPO:$LATEST_TAG" "$DOCKERHUB_REPO:$LATEST_TAG-arm32v7" --os linux --arch arm --variant v7 sudo docker manifest annotate "$DOCKERHUB_REPO:$LATEST_TAG" "$DOCKERHUB_REPO:$LATEST_TAG-arm64v8" --os linux --arch arm64 --variant v8 sudo docker manifest push "$DOCKERHUB_REPO:$LATEST_TAG" -p no_output_timeout: 25m workflows: version: 2 publish: jobs: - publish_docker_linuxamd64: filters: branches: ignore: /.*/ tags: only: /v(?:(?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))(?:-(?:([A-Za-z1-9])*))?)$/ - publish_docker_linuxarm32v7: filters: branches: ignore: /.*/ tags: only: /v(?:(?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))(?:-(?:([A-Za-z1-9])*))?)$/ - publish_docker_linuxarm64v8: filters: branches: ignore: /.*/ tags: only: /v(?:(?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))(?:-(?:([A-Za-z1-9])*))?)$/ - publish_docker_multiarch: requires: - publish_docker_linuxamd64 - publish_docker_linuxarm32v7 - publish_docker_linuxarm64v8 filters: branches: ignore: /.*/ tags: only: /v(?:(?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))[.](?(?:0|[1-9](?:(?:0|[1-9])+)*))(?:-(?:([A-Za-z1-9])*))?)$/