version: 2
jobs:
  build:
    machine: 
      docker_layer_caching: true
    steps: 
      - checkout

  test:
    machine:
        docker_layer_caching: true
    steps:
      - checkout
      - run:
          command: |
            cd BTCPayServer.Tests
            docker-compose down --v
            docker-compose build
            docker-compose run tests

  # publish jobs require $DOCKERHUB_REPO, $DOCKERHUB_USER, $DOCKERHUB_PASS defined
  publish_docker_linuxamd64:
    machine:
      docker_layer_caching: true
    steps:
      - checkout  
      - run:
          command: |
            LATEST_TAG=${CIRCLE_TAG:1} #trim v from tag
            #
            sudo docker build --pull -t $DOCKERHUB_REPO:$LATEST_TAG-amd64 -f Dockerfile.linuxamd64 .
            sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
            sudo docker push $DOCKERHUB_REPO:$LATEST_TAG-amd64

  publish_docker_linuxarm:
    machine:
      docker_layer_caching: true
    steps:
      - checkout  
      - run:
          command: |
            sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset
            LATEST_TAG=${CIRCLE_TAG:1} #trim v from tag
            #
            sudo docker build --pull -t $DOCKERHUB_REPO:$LATEST_TAG-arm32v7 -f Dockerfile.linuxarm32v7 .
            sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
            sudo docker push $DOCKERHUB_REPO:$LATEST_TAG-arm32v7

  publish_docker_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'
            #
            sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
            #
            LATEST_TAG=${CIRCLE_TAG:1} #trim v from tag
            sudo docker manifest create --amend $DOCKERHUB_REPO:$LATEST_TAG $DOCKERHUB_REPO:$LATEST_TAG-amd64 $DOCKERHUB_REPO:$LATEST_TAG-arm32v7
            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 push $DOCKERHUB_REPO:$LATEST_TAG -p

workflows:
  version: 2
  build_and_test:
    jobs:
      - test

  publish:
    jobs:
      - publish_docker_linuxamd64:
          filters:
            # ignore any commit on any branch by default
            branches:
              ignore: /.*/
            # only act on version tags
            tags:
              only: /v[1-9]+(\.[0-9]+)*/
      - publish_docker_linuxarm:
          filters:
            branches:
              ignore: /.*/
            tags:
              only: /v[1-9]+(\.[0-9]+)*/
      - publish_docker_multiarch:
          requires:
            - publish_docker_linuxamd64
            - publish_docker_linuxarm
          filters:
            branches:
              ignore: /.*/
            tags:
              only: /v[1-9]+(\.[0-9]+)*/
