---
version: 2.1

executors:
  # Whenever the Go version is updated here, .travis.yml and .promu.yml
  # should also be updated.
  golang:
    docker:
    - image: circleci/golang:1.11

jobs:
  test:
    executor: golang

    steps:
    - checkout
    - run: make promu
    - run: make check_license style unused staticcheck build check_assets
    - run:
       command: |
         curl -s -L https://github.com/protocolbuffers/protobuf/releases/download/v3.5.1/protoc-3.5.1-linux-x86_64.zip > /tmp/protoc.zip
         unzip -d /tmp /tmp/protoc.zip
         chmod +x /tmp/bin/protoc
         echo 'export PATH=/tmp/bin:$PATH' >> $BASH_ENV
         source $BASH_ENV
         make proto
    - run: git diff --exit-code
    - store_artifacts:
        path: prometheus
        destination: /build/prometheus
    - store_artifacts:
        path: promtool
        destination: /build/promtool
    - run: rm -v prometheus promtool

  build:
    machine: true

    steps:
    - checkout
    - run: make promu
    - run: promu crossbuild -v
    - persist_to_workspace:
        root: .
        paths:
        - .build
    - store_artifacts:
        path: .build
        destination: /build

  docker_hub_master:
    executor: golang

    steps:
    - checkout
    - setup_remote_docker
    - attach_workspace:
        at: .
    - run: ln -s .build/linux-amd64/prometheus prometheus
    - run: ln -s .build/linux-amd64/promtool promtool
    - run: make docker
    - run: make docker DOCKER_REPO=quay.io/prometheus
    - run: docker images
    - run: docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
    - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io
    - run: make docker-publish
    - run: make docker-publish DOCKER_REPO=quay.io/prometheus

  docker_hub_release_tags:
    executor: golang

    steps:
    - checkout
    - setup_remote_docker
    - run: mkdir -v -p ${HOME}/bin
    - run: curl -L 'https://github.com/aktau/github-release/releases/download/v0.7.2/linux-amd64-github-release.tar.bz2' | tar xvjf - --strip-components 3 -C ${HOME}/bin
    - run: echo 'export PATH=${HOME}/bin:${PATH}' >> ${BASH_ENV}
    - attach_workspace:
        at: .
    - run: make promu
    - run: promu crossbuild tarballs
    - run: promu checksum .tarballs
    - run: promu release .tarballs
    - store_artifacts:
        path: .tarballs
        destination: releases
    - run: ln -s .build/linux-amd64/prometheus prometheus
    - run: ln -s .build/linux-amd64/promtool promtool
    - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG
    - run: make docker DOCKER_IMAGE_TAG=$CIRCLE_TAG DOCKER_REPO=quay.io/prometheus
    - run: docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
    - run: docker login -u $QUAY_LOGIN -p $QUAY_PASSWORD quay.io
    - run: |
        if [[ "$CIRCLE_TAG" =~ ^v[0-9]+(\.[0-9]+){2}$ ]]; then
          make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG"
          make docker-tag-latest DOCKER_IMAGE_TAG="$CIRCLE_TAG" DOCKER_REPO=quay.io/prometheus
        fi
    - run: make docker-publish
    - run: make docker-publish DOCKER_REPO=quay.io/prometheus

workflows:
  version: 2
  prometheus:
    jobs:
    - test:
        filters:
          tags:
            only: /.*/
    - build:
        filters:
          tags:
            only: /.*/
    - docker_hub_master:
        requires:
        - test
        - build
        filters:
          branches:
            only: master
    - docker_hub_release_tags:
        requires:
        - test
        - build
        filters:
          tags:
            only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
          branches:
            ignore: /.*/
