---
# 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
  tags:
    - python2.7
    - esphomeyaml-lint

.test: &test
  stage: test
  before_script:
    - pip install -e .
  tags:
    - python2.7
    - esphomeyaml-test
  variables:
    TZ: UTC
  cache:
    paths:
      - tests/build

.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:
    - |
      hassio-builder.sh \
           -t . \
           -i ottowinter/esphomeyaml-hassio-${ADDON_ARCH} \
           -d "$CI_REGISTRY" \
           --${ADDON_ARCH}
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev"
  retry: 2

# Generic deploy template
.deploy-release: &deploy-release
  <<: *docker-builder
  stage: deploy
  script:
    - version=${CI_COMMIT_TAG:1}
    - echo "Publishing release version ${version}"
    - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
    - docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - |
      docker tag \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
  only:
  - /^v\d+\.\d+\.\d+$/
  except:
  - /^(?!master).+@/

.deploy-beta: &deploy-beta
  <<: *docker-builder
  stage: deploy
  script:
    - version=${CI_COMMIT_TAG:1}
    - echo "Publishing beta version ${version}"
    - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
    - docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:beta"
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - |
      docker tag \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
        "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:beta"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:beta"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
    - docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:beta"
  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" .
    - |
      docker tag \
        "${CI_REGISTRY}/ottowinter/esphomeyaml:dev" \
        "${CI_REGISTRY}/ottowinter/esphomeyaml:${CI_COMMIT_SHA}"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml:${CI_COMMIT_SHA}"
    - docker push "${CI_REGISTRY}/ottowinter/esphomeyaml:dev"

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

#build:aarch64:
#   <<: *build
#   variables:
#     ADDON_ARCH: aarch64

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

build:amd64:
  <<: *build-hassio
  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).+@/