---
# Based on https://gitlab.com/hassio-addons/addon-node-red/blob/master/.gitlab-ci.yml
variables:
  DOCKER_DRIVER: overlay2

stages:
  - lint
  - test
  - build
  - deploy

.lint: &lint
  stage: lint
  before_script:
    - pip install -e .
  tags:
    - python2.7
    - esphomeyaml-lint

.test: &test
  stage: test
  before_script:
    - pip install -e .
  tags:
    - python2.7
    - esphomeyaml-test
  variables:
    TZ: UTC

.docker-builder: &docker-builder
  before_script:
    - docker info
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
  services:
    - docker:dind
  tags:
    - hassio-builder

flake8:
  <<: *lint
  script:
    - flake8 esphomeyaml

pylint:
  <<: *lint
  script:
    - pylint esphomeyaml

test1:
  <<: *test
  script:
    - esphomeyaml tests/test1.yaml compile

test2:
  <<: *test
  script:
    - esphomeyaml tests/test2.yaml compile

.build-hassio: &build-hassio
  <<: *docker-builder
  stage: build
  script:
    - docker run --rm --privileged hassioaddons/qemu-user-static:latest
    - BUILD_FROM=hassioaddons/ubuntu-base-${ADDON_ARCH}:2.2.0
    - ADDON_VERSION="${CI_COMMIT_TAG#v}"
    - ADDON_VERSION="${ADDON_VERSION:-${CI_COMMIT_SHA:0:7}}"
    - echo "Build from ${BUILD_FROM}"
    - echo "Add-on version ${ADDON_VERSION}"
    - echo "Tag ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:dev"
    - echo "Tag ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
    - |
      docker build \
        --build-arg "BUILD_FROM=${BUILD_FROM}" \
        --build-arg "BUILD_DATE=$(date +"%Y-%m-%dT%H:%M:%SZ")" \
        --build-arg "BUILD_ARCH=${ADDON_ARCH}" \
        --build-arg "BUILD_REF=${CI_COMMIT_SHA}" \
        --build-arg "BUILD_VERSION=${ADDON_VERSION}" \
        --tag "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev" \
        --tag "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        --file "docker/Dockerfile.hassio" \
        .
    - |
      if [ "${DO_PUSH:-true}" = true ]; then
        echo "Pushing to CI registry"
        docker push ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}
        docker push ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev
      fi

# Generic deploy template
.deploy-release: &deploy-release
  <<: *docker-builder
  stage: deploy
  script:
    - version="${CI_COMMIT_TAG#v}"
    - echo "Publishing release version ${version}"
    - docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
    - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"

    - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"

    - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"

    - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"

    - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"

    - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
    - |
      docker tag \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"

    - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - |
      docker tag \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
  only:
  - /^v\d+\.\d+\.\d+$/
  except:
  - /^(?!master).+@/

.deploy-beta: &deploy-beta
  <<: *docker-builder
  stage: deploy
  script:
    - version="${CI_COMMIT_TAG#v}"
    - echo "Publishing beta version ${version}"
    - docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
    - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"

    - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"

    - echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"

    - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"

    - echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - |
      docker tag \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
  only:
  - /^v\d+\.\d+\.\d+b\d+$/
  except:
  - /^(?!rc).+@/

# Build jobs
build:normal:
  <<: *docker-builder
  stage: build
  script:
    - docker build -t "${CI_REGISTRY}/ottowinter/esphomeyaml:dev" .

.build-hassio-edge: &build-hassio-edge
  <<: *build-hassio
  except:
    - /^v\d+\.\d+\.\d+$/
    - /^v\d+\.\d+\.\d+b\d+$/

.build-hassio-release: &build-hassio-release
  <<: *build-hassio
  only:
    - /^v\d+\.\d+\.\d+$/
    - /^v\d+\.\d+\.\d+b\d+$/

build:hassio-armhf-edge:
  <<: *build-hassio-edge
  variables:
    ADDON_ARCH: armhf
    DO_PUSH: "false"

build:hassio-armhf:
  <<: *build-hassio-release
  variables:
    ADDON_ARCH: armhf

#build:hassio-aarch64-edge:
#  <<: *build-hassio-edge
#  variables:
#    ADDON_ARCH: aarch64
#    DO_PUSH: "false"

#build:hassio-aarch64:
#  <<: *build-hassio-release
#  variables:
#    ADDON_ARCH: aarch64

build:hassio-i386-edge:
  <<: *build-hassio-edge
  variables:
    ADDON_ARCH: i386
    DO_PUSH: "false"

build:hassio-i386:
  <<: *build-hassio-release
  variables:
    ADDON_ARCH: i386

build:hassio-amd64-edge:
  <<: *build-hassio-edge
  variables:
    ADDON_ARCH: amd64
    DO_PUSH: "false"

build:hassio-amd64:
  <<: *build-hassio-release
  variables:
    ADDON_ARCH: amd64

# Deploy jobs
deploy-release:armhf:
  <<: *deploy-release
  variables:
    ADDON_ARCH: armhf

deploy-beta:armhf:
  <<: *deploy-beta
  variables:
    ADDON_ARCH: armhf

#deploy-release:aarch64:
#  <<: *deploy-release
#  variables:
#    ADDON_ARCH: aarch64

#deploy-beta:aarch64:
#  <<: *deploy-beta
#  variables:
#    ADDON_ARCH: aarch64

deploy-release:i386:
  <<: *deploy-release
  variables:
    ADDON_ARCH: i386

deploy-beta:i386:
  <<: *deploy-beta
  variables:
    ADDON_ARCH: i386

deploy-release:amd64:
  <<: *deploy-release
  variables:
    ADDON_ARCH: amd64

deploy-beta:amd64:
  <<: *deploy-beta
  variables:
    ADDON_ARCH: amd64

.deploy-pypi: &deploy-pypi
  stage: deploy
  before_script:
  - pip install -e .
  - pip install twine
  script:
  - python setup.py sdist
  - twine upload dist/*
  tags:
  - python2.7
  - esphomeyaml-test

deploy-release:pypi:
  <<: *deploy-pypi
  only:
    - /^v\d+\.\d+\.\d+$/
  except:
    - /^(?!master).+@/

deploy-beta:pypi:
  <<: *deploy-pypi
  only:
    - /^v\d+\.\d+\.\d+b\d+$/
  except:
    - /^(?!rc).+@/