CI / changes (push) Successful in 8s
CI / openapi (push) Has been skipped
CI / go (push) Has been skipped
CI / docker-web (push) Successful in 1m20s
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Successful in 15s
CI / docker-go (push) Successful in 7m50s
- Removed the "web-deps" and "web-build" targets from the web-images group to streamline the build process. - Updated the configuration to focus on the primary targets "evobgp-web" and "evobgp-web-all".
247 lines
6.0 KiB
HCL
247 lines
6.0 KiB
HCL
# Единая сборка образов EvoBGP (buildx bake: -f deploy/docker/docker-bake.hcl).
|
||
# context = "../.." — корень репозитория (относительно этого файла).
|
||
# dockerfile — путь от корня репозитория (относительно context).
|
||
# Переменные: REGISTRY, IMAGE_TAG, CACHE_REF_GO, CACHE_REF_WEB
|
||
|
||
variable "REGISTRY" {
|
||
default = "git.shts.su/evobgp"
|
||
}
|
||
|
||
variable "IMAGE_TAG" {
|
||
default = "latest"
|
||
}
|
||
|
||
variable "SHORT_SHA" {
|
||
default = "dev"
|
||
}
|
||
|
||
variable "SHA_FULL" {
|
||
default = ""
|
||
}
|
||
|
||
variable "CACHE_REF_GO" {
|
||
default = ""
|
||
}
|
||
|
||
variable "CACHE_REF_WEB" {
|
||
default = ""
|
||
}
|
||
|
||
function "go-cache-from" {
|
||
params = []
|
||
result = notequal("", CACHE_REF_GO) ? ["type=registry,ref=${CACHE_REF_GO}"] : []
|
||
}
|
||
|
||
# Экспорт кэша — только go-build-all / web-build (один writer на ref).
|
||
# Несколько target с cache-to в один ref и mode=max дают гонку в registry
|
||
# (content descriptor not found при параллельном bake).
|
||
function "go-cache-to-export" {
|
||
params = []
|
||
result = notequal("", CACHE_REF_GO) ? ["type=registry,ref=${CACHE_REF_GO},mode=max"] : []
|
||
}
|
||
|
||
function "web-cache-from" {
|
||
params = []
|
||
result = notequal("", CACHE_REF_WEB) ? ["type=registry,ref=${CACHE_REF_WEB}"] : []
|
||
}
|
||
|
||
function "web-cache-to-export" {
|
||
params = []
|
||
result = notequal("", CACHE_REF_WEB) ? ["type=registry,ref=${CACHE_REF_WEB},mode=max"] : []
|
||
}
|
||
|
||
group "default" {
|
||
targets = ["go-images", "web-images", "evobgp-bird2"]
|
||
}
|
||
|
||
group "go-images" {
|
||
targets = [
|
||
"evobgp-api",
|
||
"evobgp-all",
|
||
"evobgp-scheduler",
|
||
"evobgp-ingest",
|
||
"evobgp-render",
|
||
"evobgp-deploy",
|
||
"evobgp-node",
|
||
"evobgp-agent",
|
||
]
|
||
}
|
||
|
||
# web-deps / web-build — только зависимости (contexts), без tags; при --push в группе не указывать.
|
||
group "web-images" {
|
||
targets = ["evobgp-web", "evobgp-web-all"]
|
||
}
|
||
|
||
# --- Go: go mod download → все cmd/* → birdc (один раз) → runtime-образы ---
|
||
|
||
target "go-deps" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/gobinary/Dockerfile"
|
||
target = "deps"
|
||
platforms = ["linux/amd64"]
|
||
cache-from = go-cache-from()
|
||
}
|
||
|
||
target "go-build-all" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/gobinary/Dockerfile"
|
||
target = "build-all"
|
||
platforms = ["linux/amd64"]
|
||
contexts = {
|
||
deps = "target:go-deps"
|
||
}
|
||
cache-from = go-cache-from()
|
||
cache-to = go-cache-to-export()
|
||
}
|
||
|
||
target "go-birdc" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/gobinary/Dockerfile"
|
||
target = "birdc"
|
||
platforms = ["linux/amd64"]
|
||
cache-from = go-cache-from()
|
||
}
|
||
|
||
target "_go-runtime" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/gobinary/Dockerfile"
|
||
target = "runtime"
|
||
platforms = ["linux/amd64"]
|
||
contexts = {
|
||
build-all = "target:go-build-all"
|
||
}
|
||
cache-from = go-cache-from()
|
||
}
|
||
|
||
target "_go-runtime-birdc" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/gobinary/Dockerfile"
|
||
target = "runtime-birdc"
|
||
platforms = ["linux/amd64"]
|
||
contexts = {
|
||
build-all = "target:go-build-all"
|
||
birdc = "target:go-birdc"
|
||
}
|
||
cache-from = go-cache-from()
|
||
}
|
||
|
||
function "image-tags" {
|
||
params = [name]
|
||
result = notequal("", SHA_FULL) ? [
|
||
"${REGISTRY}/${name}:${IMAGE_TAG}",
|
||
"${REGISTRY}/${name}:${SHORT_SHA}",
|
||
"${REGISTRY}/${name}:sha-${SHA_FULL}",
|
||
] : [
|
||
"${REGISTRY}/${name}:${IMAGE_TAG}",
|
||
"${REGISTRY}/${name}:${SHORT_SHA}",
|
||
]
|
||
}
|
||
|
||
target "evobgp-api" {
|
||
inherits = ["_go-runtime-birdc"]
|
||
args = { BIN = "evobgp-api" }
|
||
tags = image-tags("evobgp-api")
|
||
}
|
||
|
||
target "evobgp-all" {
|
||
inherits = ["_go-runtime-birdc"]
|
||
args = { BIN = "evobgp-all" }
|
||
tags = image-tags("evobgp-all")
|
||
}
|
||
|
||
target "evobgp-scheduler" {
|
||
inherits = ["_go-runtime"]
|
||
args = { BIN = "evobgp-scheduler" }
|
||
tags = image-tags("evobgp-scheduler")
|
||
}
|
||
|
||
target "evobgp-ingest" {
|
||
inherits = ["_go-runtime"]
|
||
args = { BIN = "evobgp-ingest" }
|
||
tags = image-tags("evobgp-ingest")
|
||
}
|
||
|
||
target "evobgp-render" {
|
||
inherits = ["_go-runtime"]
|
||
args = { BIN = "evobgp-render" }
|
||
tags = image-tags("evobgp-render")
|
||
}
|
||
|
||
target "evobgp-deploy" {
|
||
inherits = ["_go-runtime"]
|
||
args = { BIN = "evobgp-deploy" }
|
||
tags = image-tags("evobgp-deploy")
|
||
}
|
||
|
||
target "evobgp-node" {
|
||
inherits = ["_go-runtime"]
|
||
args = { BIN = "evobgp-node" }
|
||
tags = image-tags("evobgp-node")
|
||
}
|
||
|
||
target "evobgp-agent" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/evobgp-agent/Dockerfile"
|
||
platforms = ["linux/amd64"]
|
||
contexts = {
|
||
build-all = "target:go-build-all"
|
||
}
|
||
cache-from = go-cache-from()
|
||
tags = image-tags("evobgp-agent")
|
||
}
|
||
|
||
# --- Web: npm ci (кэш) → build → nginx ---
|
||
|
||
target "web-deps" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/evobgp-web/Dockerfile"
|
||
target = "deps"
|
||
platforms = ["linux/amd64"]
|
||
cache-from = web-cache-from()
|
||
}
|
||
|
||
target "web-build" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/evobgp-web/Dockerfile"
|
||
target = "build"
|
||
platforms = ["linux/amd64"]
|
||
contexts = {
|
||
deps = "target:web-deps"
|
||
}
|
||
cache-from = web-cache-from()
|
||
cache-to = web-cache-to-export()
|
||
}
|
||
|
||
target "evobgp-web" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/evobgp-web/Dockerfile"
|
||
target = "web"
|
||
platforms = ["linux/amd64"]
|
||
contexts = {
|
||
web-artifacts = "target:web-build"
|
||
}
|
||
args = { EVOBGP_UPSTREAM = "evobgp-api" }
|
||
cache-from = web-cache-from()
|
||
tags = image-tags("evobgp-web")
|
||
}
|
||
|
||
target "evobgp-web-all" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/evobgp-web/Dockerfile"
|
||
target = "web"
|
||
platforms = ["linux/amd64"]
|
||
contexts = {
|
||
web-artifacts = "target:web-build"
|
||
}
|
||
args = { EVOBGP_UPSTREAM = "evobgp-all" }
|
||
cache-from = web-cache-from()
|
||
tags = image-tags("evobgp-web-all")
|
||
}
|
||
|
||
target "evobgp-bird2" {
|
||
context = "../.."
|
||
dockerfile = "deploy/docker/bird2/Dockerfile"
|
||
platforms = ["linux/amd64"]
|
||
tags = image-tags("evobgp-bird2")
|
||
}
|