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

variable "MAVEN_ARGS" {
  default = ""
}

variable "MAVEN_PROJECTS" {
  default = null
}

variable "RUNTIME_DEPS_EPOCH" {
  default = null
}

variable "SOURCE_REVISION" {
  default = "local"
}

variable "IMAGE_TAG" {
  default = "local"
}

variable "CACHE_CHANNEL" {
  default = "latest"
}

variable "EXPORT_CACHE" {
  default = false
}

target "_common" {
  context = "."
  args = {
    MAVEN_ARGS         = MAVEN_ARGS
    MAVEN_PROJECTS     = MAVEN_PROJECTS
    RUNTIME_DEPS_EPOCH = RUNTIME_DEPS_EPOCH
    SOURCE_REVISION    = SOURCE_REVISION
  }
  platforms = [
    "linux/amd64",
    "linux/arm64",
  ]
}

target "build-cache" {
  inherits   = ["_common"]
  dockerfile = "hugegraph-pd/Dockerfile"
  target     = "build"
  output     = ["type=cacheonly"]
  cache-from = [
    "type=registry,ref=hugegraph/hugegraph:shared-${CACHE_CHANNEL}",
    "type=registry,ref=hugegraph/pd:buildcache-${CACHE_CHANNEL}",
  ]
  cache-to = EXPORT_CACHE ? [
    "type=registry,ref=hugegraph/hugegraph:shared-${CACHE_CHANNEL},mode=max",
  ] : []
}

# Runtime targets intentionally use Docker's local exporter. The publishing
# workflow enables the containerd image store, verifies both loaded platforms,
# runs functional checks against these exact tags, and only then pushes them.
target "pd" {
  inherits   = ["_common"]
  dockerfile = "hugegraph-pd/Dockerfile"
  tags       = ["hugegraph/pd:${IMAGE_TAG}"]
  output     = ["type=docker"]
  cache-from = [
    "type=registry,ref=hugegraph/hugegraph:shared-${CACHE_CHANNEL}",
    "type=registry,ref=hugegraph/pd:buildcache-${CACHE_CHANNEL}",
  ]
  cache-to = EXPORT_CACHE ? [
    "type=registry,ref=hugegraph/pd:buildcache-${CACHE_CHANNEL},mode=min",
  ] : []
}

target "store" {
  inherits   = ["_common"]
  dockerfile = "hugegraph-store/Dockerfile"
  tags       = ["hugegraph/store:${IMAGE_TAG}"]
  output     = ["type=docker"]
  cache-from = [
    "type=registry,ref=hugegraph/hugegraph:shared-${CACHE_CHANNEL}",
    "type=registry,ref=hugegraph/store:buildcache-${CACHE_CHANNEL}",
  ]
  cache-to = EXPORT_CACHE ? [
    "type=registry,ref=hugegraph/store:buildcache-${CACHE_CHANNEL},mode=min",
  ] : []
}

target "server-hstore" {
  inherits   = ["_common"]
  dockerfile = "hugegraph-server/Dockerfile-hstore"
  tags       = ["hugegraph/server:${IMAGE_TAG}"]
  output     = ["type=docker"]
  cache-from = [
    "type=registry,ref=hugegraph/hugegraph:shared-${CACHE_CHANNEL}",
    "type=registry,ref=hugegraph/server:buildcache-${CACHE_CHANNEL}",
  ]
  cache-to = EXPORT_CACHE ? [
    "type=registry,ref=hugegraph/server:buildcache-${CACHE_CHANNEL},mode=min",
  ] : []
}

target "server-standalone" {
  inherits   = ["_common"]
  dockerfile = "hugegraph-server/Dockerfile"
  tags       = ["hugegraph/hugegraph:${IMAGE_TAG}"]
  output     = ["type=docker"]
  cache-from = [
    "type=registry,ref=hugegraph/hugegraph:shared-${CACHE_CHANNEL}",
    "type=registry,ref=hugegraph/hugegraph:buildcache-${CACHE_CHANNEL}",
  ]
  cache-to = EXPORT_CACHE ? [
    "type=registry,ref=hugegraph/hugegraph:buildcache-${CACHE_CHANNEL},mode=min",
  ] : []
}

group "default" {
  targets = [
    "build-cache",
    "pd",
    "store",
    "server-hstore",
    "server-standalone",
  ]
}
