# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

stages:
  - prepare
  - test

build build-env image:
  stage: prepare
  script:
    - cd ci/build-env
    - docker build -t ${CI_REGISTRY_IMAGE}/build-env .
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
    - docker push $CI_REGISTRY_IMAGE/build-env
  tags:
    - docker-host
  only:
    - master@lukas/python-phoenixdb

.build-phoenix-image: &build_phoenix_image
  stage: prepare
  script:
    - JOB_NAME=($CI_JOB_NAME)
    - cd ci/phoenix
    - docker build -t ${CI_REGISTRY_IMAGE}/phoenix:${JOB_NAME[2]}
        --build-arg PHOENIX_VERSION=$PHOENIX_VERSION
        --build-arg HBASE_VERSION=$HBASE_VERSION
        --build-arg HBASE_DIR=$HBASE_DIR
        .
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
    - docker push $CI_REGISTRY_IMAGE/phoenix:${JOB_NAME[2]}
  tags:
    - docker-host

build phoenix 5.0.0-alpha-HBase-2.0 image:
  <<: *build_phoenix_image
  variables:
    PHOENIX_VERSION: 5.0.0-alpha-HBase-2.0
    HBASE_VERSION: 2.0.0-beta-1
    HBASE_DIR: hbase-2.0.0-beta-1

build phoenix 4.13 image:
  <<: *build_phoenix_image
  variables:
    PHOENIX_VERSION: 4.13.1-HBase-1.3
    HBASE_VERSION: 1.3.1
    HBASE_DIR: 1.3.1

build phoenix 4.12 image:
  <<: *build_phoenix_image
  variables:
    PHOENIX_VERSION: 4.12.0-HBase-1.3
    HBASE_VERSION: 1.3.1
    HBASE_DIR: 1.3.1

build phoenix 4.11 image:
  <<: *build_phoenix_image
  variables:
    PHOENIX_VERSION: 4.11.0-HBase-1.3
    HBASE_VERSION: 1.3.1
    HBASE_DIR: 1.3.1

build phoenix 4.10 image:
  <<: *build_phoenix_image
  variables:
    PHOENIX_VERSION: 4.10.0-HBase-1.2
    HBASE_VERSION: 1.2.6
    HBASE_DIR: 1.2.6

build phoenix 4.9 image:
  <<: *build_phoenix_image
  variables:
    PHOENIX_VERSION: 4.9.0-HBase-1.2
    HBASE_VERSION: 1.2.6
    HBASE_DIR: 1.2.6

build phoenix 4.8 image:
  <<: *build_phoenix_image
  variables:
    PHOENIX_VERSION: 4.8.2-HBase-1.2
    HBASE_VERSION: 1.2.6
    HBASE_DIR: 1.2.6

.test: &test
  image: $CI_REGISTRY_IMAGE/build-env
  variables:
    PHOENIXDB_TEST_DB_URL: http://phoenix:8765/
    PIP_CACHE_DIR: $CI_PROJECT_DIR/cache/
  script:
    - tox -e py27,py35
  cache:
    paths:
      - cache/
  tags:
    - docker

test phoenix 5.0.0-alpha-HBase-2.0:
  <<: *test
  services:
    - name: $CI_REGISTRY_IMAGE/phoenix:5.0.0-alpha-HBase-2.0
      alias: phoenix

test phoenix 4.13:
  <<: *test
  services:
    - name: $CI_REGISTRY_IMAGE/phoenix:4.13
      alias: phoenix

test phoenix 4.12:
  <<: *test
  services:
    - name: $CI_REGISTRY_IMAGE/phoenix:4.12
      alias: phoenix

test phoenix 4.11:
  <<: *test
  services:
    - name: $CI_REGISTRY_IMAGE/phoenix:4.11
      alias: phoenix

test phoenix 4.10:
  <<: *test
  services:
    - name: $CI_REGISTRY_IMAGE/phoenix:4.10
      alias: phoenix

test phoenix 4.9:
  <<: *test
  services:
    - name: $CI_REGISTRY_IMAGE/phoenix:4.9
      alias: phoenix

test phoenix 4.8:
  <<: *test
  services:
    - name: $CI_REGISTRY_IMAGE/phoenix:4.8
      alias: phoenix
