From b201697e7fe7b729d5ce7fc4b56003f094c6957c Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Sun, 25 Nov 2018 22:38:22 +0900 Subject: [PATCH] Setup circleci config --- .circleci/config.yml | 134 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..21b6041 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,134 @@ +# This configuration will automatically create docker images based on conventions +# For example, if a tag BitcoinCore/0.17.0 is pushed +# Then on docker hub "btcpayserver/BitcoinCore" will be pushed: +# - 0.17.0-arm32v7 from BitcoinCore/0.17.0/linuxarm32v7.Dockerfile +# - 0.17.0-amd64 from BitcoinCore/0.17.0/linuxamd64.Dockerfile +# - 0.17.0 multi arch image +version: 2 +jobs: + build: + machine: + docker_layer_caching: true + steps: + - checkout + + # publish jobs require $DOCKERHUB_USER, $DOCKERHUB_PASS defined + publish_linuxamd64: + machine: + docker_layer_caching: true + steps: + - checkout + - run: + command: | + # If CIRCLE_TAG is "BitcoinCore/0.17.0" + # Then: + # $SEPARATOR=12 + # $NODE_NAME=BitcoinCore + # $NODE_VERSION=0.17.0 + # $LATEST_TAG=0.17.0 + SEPARATOR=$(expr index "$CIRCLE_TAG" "/") + NODE_NAME=${CIRCLE_TAG:0:$SEPARATOR-1} + LATEST_TAG="${CIRCLE_TAG:$SEPARATOR}" + NODE_VERSION="$LATEST_TAG" + DOCKERHUB_REPO="btcpayserver/$NODE_NAME" + DOCKERHUB_REPO="${DOCKERHUB_REPO,,}" + DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-amd64" + DOCKERHUB_DOCKEFILE="$NODE_NAME/$NODE_VERSION/linuxamd64.Dockerfile" + # + echo "Pushing $DOCKERHUB_DOCKEFILE to dockerhub repository $DOCKERHUB_DESTINATION" + sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS + sudo docker build --pull -t $DOCKERHUB_DESTINATION -f "$DOCKERHUB_DOCKEFILE" "$NODE_NAME/$NODE_VERSION" + sudo docker push $DOCKERHUB_DESTINATION + + publish_linuxarm32v7: + machine: + docker_layer_caching: true + steps: + - checkout + - run: + command: | + sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset + sudo apt update + sudo apt install -y qemu qemu-user-static qemu-user binfmt-support + sudo cp /usr/bin/qemu-arm-static qemu-arm-static + # If CIRCLE_TAG is "BitcoinCore/0.17.0" + # Then: + # $SEPARATOR=12 + # $NODE_NAME=BitcoinCore + # $NODE_VERSION=0.17.0 + # $LATEST_TAG=0.17.0 + SEPARATOR=$(expr index "$CIRCLE_TAG" "/") + NODE_NAME=${CIRCLE_TAG:0:$SEPARATOR-1} + LATEST_TAG="${CIRCLE_TAG:$SEPARATOR}" + NODE_VERSION="$LATEST_TAG" + DOCKERHUB_REPO="btcpayserver/$NODE_NAME" + DOCKERHUB_REPO="${DOCKERHUB_REPO,,}" + DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-arm32v7" + DOCKERHUB_DOCKEFILE="$NODE_NAME/$NODE_VERSION/linuxarm32v7.Dockerfile" + # + # Make sure the builder is copy the arm emulator + sed -i -e 's/#EnableQEMU //g' "$DOCKERHUB_DOCKEFILE" + # + echo "Pushing $DOCKERHUB_DOCKEFILE to dockerhub repository $DOCKERHUB_DESTINATION" + sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS + sudo docker build --pull -t $DOCKERHUB_DESTINATION -f "$DOCKERHUB_DOCKEFILE" "$NODE_NAME/$NODE_VERSION" + sudo docker push $DOCKERHUB_DESTINATION + + publish_multiarch: + machine: + enabled: true + image: circleci/classic:201808-01 + steps: + - run: + command: | + # Turn on Experimental features + sudo mkdir $HOME/.docker + sudo sh -c 'echo "{ \"experimental\": \"enabled\" }" >> $HOME/.docker/config.json' + # If CIRCLE_TAG is "BitcoinCore/0.17.0" + # Then: + # $SEPARATOR=12 + # $NODE_NAME=BitcoinCore + # $NODE_VERSION=0.17.0 + # $LATEST_TAG=0.17.0 + SEPARATOR=$(expr index "$CIRCLE_TAG" "/") + NODE_NAME=${CIRCLE_TAG:0:$SEPARATOR-1} + LATEST_TAG="${CIRCLE_TAG:$SEPARATOR}" + NODE_VERSION="$LATEST_TAG" + DOCKERHUB_REPO="btcpayserver/$NODE_NAME" + DOCKERHUB_REPO="${DOCKERHUB_REPO,,}" + DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG" + # + sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS + sudo docker manifest create --amend $DOCKERHUB_DESTINATION $DOCKERHUB_DESTINATION-amd64 $DOCKERHUB_DESTINATION-arm32v7 + sudo docker manifest annotate $DOCKERHUB_DESTINATION $DOCKERHUB_DESTINATION-amd64 --os linux --arch amd64 + sudo docker manifest annotate $DOCKERHUB_DESTINATION $DOCKERHUB_DESTINATION-arm32v7 --os linux --arch arm --variant v7 + sudo docker manifest push $DOCKERHUB_DESTINATION -p + +workflows: + version: 2 + publish: + jobs: + - publish_linuxamd64: + filters: + branches: + ignore: /.*/ + # Example: BitcoinCore/0.17.0 + tags: + only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ + - publish_linuxarm32v7: + filters: + branches: + ignore: /.*/ + tags: + # Example: BitcoinCore/0.17.0 + only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ + - publish_multiarch: + requires: + - publish_linuxamd64 + - publish_linuxarm32v7 + filters: + branches: + ignore: /.*/ + tags: + # Example: BitcoinCore/0.17.0 + only: /^[^/]+[/][0-9]+(\.[0-9]+)*/