version: 2
jobs:
  dockerhubuploadrelease:
    machine: true
    steps:
      - checkout
      - run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:${CIRCLE_TAG}-py2 .
      - run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:${CIRCLE_TAG} -t matrixdotorg/synapse:${CIRCLE_TAG}-py3 --build-arg PYTHON_VERSION=3.6 .
      - run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
      - run: docker push matrixdotorg/synapse:${CIRCLE_TAG}
      - run: docker push matrixdotorg/synapse:${CIRCLE_TAG}-py2
      - run: docker push matrixdotorg/synapse:${CIRCLE_TAG}-py3
  dockerhubuploadlatest:
    machine: true
    steps:
      - checkout
      - run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:latest-py2 .
      - run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:latest -t matrixdotorg/synapse:latest-py3 --build-arg PYTHON_VERSION=3.6 .
      - run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
      - run: docker push matrixdotorg/synapse:latest
      - run: docker push matrixdotorg/synapse:latest-py2
      - run: docker push matrixdotorg/synapse:latest-py3
  sytestpy2:
    docker:
      - image: matrixdotorg/sytest-synapsepy2
    working_directory: /src
    steps:
      - checkout
      - run: /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs
  sytestpy2postgres:
    docker:
      - image: matrixdotorg/sytest-synapsepy2
    working_directory: /src
    steps:
      - checkout
      - run: POSTGRES=1 /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs
  sytestpy2merged:
    docker:
      - image: matrixdotorg/sytest-synapsepy2
    working_directory: /src
    steps:
      - checkout
      - run: bash .circleci/merge_base_branch.sh
      - run: /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs
  sytestpy2postgresmerged:
    docker:
      - image: matrixdotorg/sytest-synapsepy2
    working_directory: /src
    steps:
      - checkout
      - run: bash .circleci/merge_base_branch.sh
      - run: POSTGRES=1 /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs

  sytestpy3:
    docker:
      - image: matrixdotorg/sytest-synapsepy3
    working_directory: /src
    steps:
      - checkout
      - run: /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs
  sytestpy3postgres:
    docker:
      - image: matrixdotorg/sytest-synapsepy3
    working_directory: /src
    steps:
      - checkout
      - run: POSTGRES=1 /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs
  sytestpy3merged:
    docker:
      - image: matrixdotorg/sytest-synapsepy3
    working_directory: /src
    steps:
      - checkout
      - run: bash .circleci/merge_base_branch.sh
      - run: /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs
  sytestpy3postgresmerged:
    docker:
      - image: matrixdotorg/sytest-synapsepy3
    working_directory: /src
    steps:
      - checkout
      - run: bash .circleci/merge_base_branch.sh
      - run: POSTGRES=1 /synapse_sytest.sh
      - store_artifacts:
          path: /logs
          destination: logs
      - store_test_results:
          path: /logs

workflows:
  version: 2
  build:
    jobs:
      - sytestpy2:
          filters:
            branches:
              only: /develop|master|release-.*/
      - sytestpy2postgres:
          filters:
            branches:
              only: /develop|master|release-.*/
      - sytestpy3:
          filters:
            branches:
              only: /develop|master|release-.*/
      - sytestpy3postgres:
          filters:
            branches:
              only: /develop|master|release-.*/
      - sytestpy2merged:
          filters:
            branches:
              ignore: /develop|master|release-.*/
      - sytestpy2postgresmerged:
          filters:
            branches:
              ignore: /develop|master|release-.*/
      - sytestpy3merged:
          filters:
            branches:
              ignore: /develop|master|release-.*/
      - sytestpy3postgresmerged:
          filters:
            branches:
              ignore: /develop|master|release-.*/
      - dockerhubuploadrelease:
          filters:
            tags:
              only: /v[0-9].[0-9]+.[0-9]+.*/
            branches:
              ignore: /.*/
      - dockerhubuploadlatest:
          filters:
            branches:
              only: master