diff --git a/.circleci/config.yml b/.circleci/config.yml index 8c43f5c..c0c6c0e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,25 +20,9 @@ jobs: - 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 + source ".circleci/parse-tag.sh" + DOCKERHUB_DOCKEFILE="$DOCKERHUB_DOCKEFILE_AMD64" + source ".circleci/push-image.sh" publish_linuxarm64v8: machine: @@ -47,20 +31,8 @@ jobs: - 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-arm64v8" - DOCKERHUB_DOCKEFILE="$NODE_NAME/$NODE_VERSION/linuxarm64v8.Dockerfile" + source ".circleci/parse-tag.sh" + DOCKERHUB_DOCKEFILE="$DOCKERHUB_DOCKEFILE_ARM64" if [ -f $DOCKERHUB_DOCKEFILE ]; then # # Make sure the builder is copy the arm emulator @@ -70,10 +42,7 @@ jobs: sudo cp /usr/bin/qemu-aarch64-static "$(dirname "$DOCKERHUB_DOCKEFILE")/qemu-aarch64-static" 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 + source ".circleci/push-image.sh" else echo "Skipping linuxarm64v8 because $DOCKERHUB_DOCKEFILE is not found" fi @@ -84,20 +53,8 @@ jobs: - 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-arm32v7" - DOCKERHUB_DOCKEFILE="$NODE_NAME/$NODE_VERSION/linuxarm32v7.Dockerfile" + source ".circleci/parse-tag.sh" + DOCKERHUB_DOCKEFILE="$DOCKERHUB_DOCKEFILE_ARM32" # # Make sure the builder is copy the arm emulator sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset @@ -108,10 +65,7 @@ jobs: sed -i -e 's/#EnableQEMU //g' "$DOCKERHUB_DOCKEFILE" fi # - 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 + source ".circleci/push-image.sh" publish_multiarch: machine: enabled: true @@ -122,20 +76,7 @@ jobs: # 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" - DOCKERHUB_DOCKEFILE_ARM64="$NODE_NAME/$NODE_VERSION/linuxarm64v8.Dockerfile" + source ".circleci/parse-tag.sh" # sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS IMAGES="$DOCKERHUB_DESTINATION-amd64 $DOCKERHUB_DESTINATION-arm32v7" @@ -158,23 +99,23 @@ workflows: filters: branches: ignore: /.*/ - # Example: BitcoinCore/0.17.0 + # Example: BitcoinCore/0.17.0 or BitcoinCore/0.17.0-1 tags: - only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ + only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[0-9]+)?/ - publish_linuxarm32v7: filters: branches: ignore: /.*/ tags: # Example: BitcoinCore/0.17.0 - only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ + only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[0-9]+)?/ - publish_linuxarm64v8: filters: branches: ignore: /.*/ tags: # Example: BitcoinCore/0.17.0 - only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ + only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[0-9]+)?/ - publish_multiarch: requires: - publish_linuxamd64 @@ -185,4 +126,4 @@ workflows: ignore: /.*/ tags: # Example: BitcoinCore/0.17.0 - only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ + only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[0-9]+)?/ diff --git a/.circleci/parse-tag.sh b/.circleci/parse-tag.sh new file mode 100755 index 0000000..be846a2 --- /dev/null +++ b/.circleci/parse-tag.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# If Input CIRCLE_TAG="Bitcoin/0.17.0-1" +# Then Output: +# NODE_NAME:Bitcoin +# LATEST_TAG:0.17.0-1 +# NODE_VERSION:0.17.0 +# DOCKERHUB_REPO:btcpayserver/bitcoin +# DOCKERHUB_DESTINATION:btcpayserver/bitcoin:0.17.0-1 +# DOCKERHUB_DOCKEFILE_ARM64:Bitcoin/0.17.0/linuxarm64v8.Dockerfile +# DOCKERHUB_DOCKEFILE_ARM32:Bitcoin/0.17.0/linuxarm32v7.Dockerfile +# DOCKERHUB_DOCKEFILE_AMD64:Bitcoin/0.17.0/linuxamd64.Dockerfile + +SEPARATOR=$(expr index "$CIRCLE_TAG" "/") +SEPARATOR_REVISION=$(expr index "$CIRCLE_TAG" "-") +NODE_NAME=${CIRCLE_TAG:0:$SEPARATOR-1} +if [ "$SEPARATOR_REVISION" -gt "$SEPARATOR" ]; then +NODE_VERSION="${CIRCLE_TAG:$SEPARATOR:$SEPARATOR_REVISION-$SEPARATOR-1}" +else +NODE_VERSION="${CIRCLE_TAG:$SEPARATOR}" +fi +LATEST_TAG="${CIRCLE_TAG:$SEPARATOR}" +DOCKERHUB_REPO="btcpayserver/$NODE_NAME" +DOCKERHUB_REPO="${DOCKERHUB_REPO,,}" +DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG" +DOCKERHUB_DOCKEFILE_ARM64="$NODE_NAME/$NODE_VERSION/linuxarm64v8.Dockerfile" +DOCKERHUB_DOCKEFILE_ARM32="$NODE_NAME/$NODE_VERSION/linuxarm32v7.Dockerfile" +DOCKERHUB_DOCKEFILE_AMD64="$NODE_NAME/$NODE_VERSION/linuxamd64.Dockerfile" diff --git a/.circleci/push-image.sh b/.circleci/push-image.sh new file mode 100755 index 0000000..191f817 --- /dev/null +++ b/.circleci/push-image.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +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 \ No newline at end of file