version: 2
jobs:
  fast_tests:
    machine:
        docker_layer_caching: true
    steps:
      - checkout
      - run:
          command: |
            cd .circleci && ./run-tests.sh "Fast=Fast"
  selenium_tests:
    machine:
        docker_layer_caching: true
    steps:
      - checkout
      - run:
          command: |
            cd .circleci && ./run-tests.sh "Selenium=Selenium"
  integration_tests:
    machine:
        docker_layer_caching: true
    steps:
      - checkout
      - run:
          command: |
            cd .circleci && ./run-tests.sh "Integration=Integration"
  external_tests:
    machine:
        docker_layer_caching: true
    steps:
      - checkout
      - run:
          command: |
            cd .circleci && ./run-tests.sh "ExternalIntegration=ExternalIntegration"


  # publish jobs require $DOCKERHUB_REPO, $DOCKERHUB_USER, $DOCKERHUB_PASS defined
  amd64:
    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 amd64.Dockerfile .
            sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
            sudo docker push $DOCKERHUB_REPO:$LATEST_TAG-amd64

  arm32v7:
    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 arm32v7.Dockerfile .
            sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
            sudo docker push $DOCKERHUB_REPO:$LATEST_TAG-arm32v7

  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:
      - fast_tests
      - selenium_tests
      - integration_tests
      - external_tests:
          filters:
            branches:
                only: master

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