# 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.

version: '3'
services:
  phoenix:
    image: boostport/hbase-phoenix-all-in-one:${PHOENIX_VERSION:-2.0-5.0}

  hsqldb:
    image: apache/calcite-avatica-hypersql:${HSQLDB_VERSION:-1.22.0}
    command: -u jdbc:hsqldb:mem:public

  test:
    image: golang:${GO_VERSION:-1.19}
    command: sh -c "export AVATICA_FLAVOR=HSQLDB && go test -v ./...; export AVATICA_FLAVOR=PHOENIX && go test -v ./..."
    working_dir: /source
    environment:
      PHOENIX_HOST: http://phoenix:8765
      HSQLDB_HOST: http://hsqldb:8765
    volumes:
      - .:/source
      - $GOPATH/pkg/mod/cache:/go/pkg/mod/cache
    depends_on:
      - phoenix
      - hsqldb

  test-phoenix:
    image: golang:${GO_VERSION:-1.19}
    command: go test -v ./...
    working_dir: /source
    environment:
      PHOENIX_HOST: http://phoenix:8765
      AVATICA_FLAVOR: PHOENIX
    volumes:
      - .:/source
      - $GOPATH/pkg/mod/cache:/go/pkg/mod/cache
    depends_on:
      - phoenix

  test-hsqldb:
    image: golang:${GO_VERSION:-1.19}
    command: go test -v ./...
    working_dir: /source
    environment:
      HSQLDB_HOST: http://hsqldb:8765
      AVATICA_FLAVOR: HSQLDB
    volumes:
      - .:/source
      - $GOPATH/pkg/mod/cache:/go/pkg/mod/cache
    depends_on:
      - hsqldb

  dry-run:
    image: alpine
    working_dir: /source
    command: sh -c "apk --no-cache --no-progress add bash; ./docker.sh dry-run"
    volumes:
      - .:/source
      - $GOPATH/pkg/mod/cache:/go/pkg/mod/cache

  release:
    image: alpine
    working_dir: /source
    command: sh -c "apk --no-cache --no-progress add bash; ./docker.sh release"
    volumes:
      - .:/source
      - $GOPATH/pkg/mod/cache:/go/pkg/mod/cache

  clean:
    image: alpine
    working_dir: /source
    command: sh -c "apk --no-cache --no-progress add bash; ./docker.sh clean"
    volumes:
      - .:/source

  publish-release-for-voting:
    image: alpine
    working_dir: /source
    command: sh -c "apk --no-cache --no-progress add bash; ./docker.sh publish-release-for-voting"
    volumes:
      - .:/source

  promote-release:
    image: alpine
    working_dir: /source
    command: sh -c "apk --no-cache --no-progress add bash; ./docker.sh promote-release"
    volumes:
      - .:/source

  compile-protobuf:
    image: golang:1.19
    working_dir: /source
    command: sh -c "./docker.sh compile-protobuf"
    environment:
      AVATICA_VERSION: 1.22.0
      PROTOBUF_VERSION: 21.5
    volumes:
      - .:/source
      - $GOPATH/pkg/mod/cache:/go/pkg/mod/cache