diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..8aeea9df --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,12 @@ +version: 2 +jobs: + build: + working_directory: /app + docker: + - image: docker:17.05.0-ce-git + steps: + - checkout + - setup_remote_docker + - run: + name: Build and push image to Docker Hub + command: sh .circleci/docker.sh diff --git a/.circleci/docker.sh b/.circleci/docker.sh new file mode 100644 index 00000000..562de3db --- /dev/null +++ b/.circleci/docker.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -u + +# collect params from ENV vars +DATE=`date +%Y-%m-%d` +DOCKER_REPOSITORY="pelias" +DOCKER_PROJECT="${DOCKER_REPOSITORY}/${CIRCLE_PROJECT_REPONAME}" + +# the name of the image that represents the "branch", that is an image that will be updated over time with the git branch +# the production branch is changed to "latest", otherwise the git branch becomes the name of the version +if [[ "${CIRCLE_BRANCH}" == "production" ]]; then + DOCKER_BRANCH_IMAGE_VERSION="latest" +else + DOCKER_BRANCH_IMAGE_VERSION="${CIRCLE_BRANCH}" +fi +DOCKER_BRANCH_IMAGE_NAME="${DOCKER_PROJECT}:${DOCKER_BRANCH_IMAGE_VERSION}" + +# the name of the image that represents the "tag", that is an image that is named with the date and git commit and will never be changed +DOCKER_TAG_IMAGE_VERSION="${CIRCLE_BRANCH}-${DATE}-${CIRCLE_SHA1}" +DOCKER_TAG_IMAGE_NAME="${DOCKER_PROJECT}:${DOCKER_TAG_IMAGE_VERSION}" + +# build image and login to docker hub +docker build -t $DOCKER_PROJECT . +docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" + +# copy the image to each of the two tags, and push +docker tag $DOCKER_PROJECT $DOCKER_BRANCH_IMAGE_NAME +docker tag $DOCKER_PROJECT $DOCKER_TAG_IMAGE_NAME +docker push $DOCKER_BRANCH_IMAGE_NAME +docker push $DOCKER_TAG_IMAGE_NAME