dockerfile-deps/.circleci/config.yml
2021-10-21 13:31:44 +09:00

167 lines
6.4 KiB
YAML

# 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:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
# publish jobs require $DOCKERHUB_USER, $DOCKERHUB_PASS defined
publish_linuxamd64:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
- run:
command: |
source ".circleci/parse-tag.sh"
DOCKERHUB_DOCKEFILE="$DOCKERHUB_DOCKEFILE_AMD64"
DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-amd64"
if [ -f $DOCKERHUB_DOCKEFILE ]; then
source ".circleci/push-image.sh"
else
echo "Skipping linuxamd64 because $DOCKERHUB_DOCKEFILE is not found"
fi
publish_linuxarm64v8:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
- run:
command: |
source ".circleci/parse-tag.sh"
DOCKERHUB_DOCKEFILE="$DOCKERHUB_DOCKEFILE_ARM64"
DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-arm64v8"
if [ -f $DOCKERHUB_DOCKEFILE ]; then
#
# Make sure the builder is copy the arm emulator
sudo docker $DOCKER_OPTIONS 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-aarch64-static "$(dirname "$DOCKERHUB_DOCKEFILE")/qemu-aarch64-static"
sed -i -e 's/#EnableQEMU //g' "$DOCKERHUB_DOCKEFILE"
#
source ".circleci/push-image.sh"
else
echo "Skipping linuxarm64v8 because $DOCKERHUB_DOCKEFILE is not found"
fi
publish_linuxarm32v7:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
- run:
command: |
source ".circleci/parse-tag.sh"
DOCKERHUB_DOCKEFILE="$DOCKERHUB_DOCKEFILE_ARM32"
DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-arm32v7"
if [ -f $DOCKERHUB_DOCKEFILE ]; then
#
# Make sure the builder is copy the arm emulator
sudo docker $DOCKER_OPTIONS run --rm --privileged multiarch/qemu-user-static:register --reset
if grep "#EnableQEMU" $DOCKERHUB_DOCKEFILE; then
sudo apt update
sudo apt install -y qemu qemu-user-static qemu-user binfmt-support
sudo cp /usr/bin/qemu-arm-static "$(dirname "$DOCKERHUB_DOCKEFILE")/qemu-arm-static"
sed -i -e 's/#EnableQEMU //g' "$DOCKERHUB_DOCKEFILE"
fi
#
source ".circleci/push-image.sh"
else
echo "Skipping linuxarm32v7 because $DOCKERHUB_DOCKEFILE is not found"
fi
publish_multiarch:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
- run:
command: |
# Turn on Experimental features
ssh remote-docker <<EOF
sudo bash -c 'echo "{\"experimental\": true}" > /etc/docker/daemon.json'
sudo systemctl restart docker
EOF
source ".circleci/parse-tag.sh"
#
sudo docker $DOCKER_OPTIONS login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
IMAGES=""
if [ -f $DOCKERHUB_DOCKEFILE_AMD64 ]; then
IMAGES="$IMAGES $DOCKERHUB_DESTINATION-amd64"
fi
if [ -f $DOCKERHUB_DOCKEFILE_ARM64 ]; then
IMAGES="$IMAGES $DOCKERHUB_DESTINATION-arm64v8"
fi
if [ -f $DOCKERHUB_DOCKEFILE_ARM32 ]; then
IMAGES="$IMAGES $DOCKERHUB_DESTINATION-arm32v7"
fi
if [ -z "$IMAGES" ]; then
echo "Skipping $DOCKERHUB_DESTINATION as there were no supported platforms to build for"
else
sudo docker manifest create --amend $DOCKERHUB_DESTINATION $IMAGES
if [ -f $DOCKERHUB_DOCKEFILE_AMD64 ]; then
sudo docker $DOCKER_OPTIONS manifest annotate $DOCKERHUB_DESTINATION $DOCKERHUB_DESTINATION-amd64 --os linux --arch amd64
fi
if [ -f $DOCKERHUB_DOCKEFILE_ARM32 ]; then
sudo docker $DOCKER_OPTIONS manifest annotate $DOCKERHUB_DESTINATION $DOCKERHUB_DESTINATION-arm32v7 --os linux --arch arm --variant v7
fi
if [ -f $DOCKERHUB_DOCKEFILE_ARM64 ]; then
sudo docker $DOCKER_OPTIONS manifest annotate $DOCKERHUB_DESTINATION $DOCKERHUB_DESTINATION-arm64v8 --os linux --arch arm64 --variant v8
fi
sudo docker $DOCKER_OPTIONS manifest push $DOCKERHUB_DESTINATION -p
fi
workflows:
version: 2
publish:
jobs:
- publish_linuxamd64:
filters:
branches:
ignore: /.*/
# Example: BitcoinCore/0.17.0 or BitcoinCore/0.17.0-1 or Bitcoin/0.21.0-based-taproot0.1
tags:
only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[a-z0-9\.-]+)?/
- publish_linuxarm32v7:
filters:
branches:
ignore: /.*/
tags:
# Example: BitcoinCore/0.17.0
only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[a-z0-9\.-]+)?/
- publish_linuxarm64v8:
filters:
branches:
ignore: /.*/
tags:
# Example: BitcoinCore/0.17.0
only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[a-z0-9\.-]+)?/
- publish_multiarch:
requires:
- publish_linuxamd64
- publish_linuxarm32v7
- publish_linuxarm64v8
filters:
branches:
ignore: /.*/
tags:
# Example: BitcoinCore/0.17.0
only: /^[^/]+[/][0-9]+(\.[0-9]+)*(-[a-z0-9\.-]+)?/