diff --git a/Makefile b/Makefile index 3988e40b0..a8d17492a 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,13 @@ -TAG ?= $(shell git describe --tags || git rev-parse --short HEAD) +BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD | sed 's/[^a-zA-Z0-9._-]/-/g') +COMMIT ?= $(shell git rev-parse --short HEAD) +TAG ?= $(BRANCH)-$(COMMIT) +REGISTRY ?= ghcr.io/primev .PHONY: docker docker: - cd infrastructure/docker && TAG=$(TAG) docker buildx bake + cd infrastructure/docker && \ + TAG=$(TAG) \ + REGISTRY=$(REGISTRY) \ + GIT_BRANCH=$(BRANCH) \ + GIT_COMMIT=$(COMMIT) \ + docker buildx bake diff --git a/infrastructure/docker/Dockerfile.builder b/infrastructure/docker/Dockerfile.builder index 59506dd04..d6bcf61c7 100644 --- a/infrastructure/docker/Dockerfile.builder +++ b/infrastructure/docker/Dockerfile.builder @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS build +FROM golang:1.24-alpine AS build WORKDIR /ws diff --git a/infrastructure/docker/docker-bake.hcl b/infrastructure/docker/docker-bake.hcl index 80b06ec8d..7c11b322a 100644 --- a/infrastructure/docker/docker-bake.hcl +++ b/infrastructure/docker/docker-bake.hcl @@ -1,83 +1,132 @@ variable "TAG" { default = "dev" } +variable "PLATFORM" { default = ["linux/amd64"] } +variable "REGISTRY" { default = "ghcr.io/primev" } +variable "REPO_NAME" { default = "" } + +# Git variables - these will be passed from Makefile +variable "GIT_BRANCH" { + default = null +} + +variable "GIT_COMMIT" { + default = null +} + +function "get_labels" { + params = [component] + result = { + "branch" = GIT_BRANCH != null ? GIT_BRANCH : "unknown" + "commit" = GIT_COMMIT != null ? GIT_COMMIT : "unknown" + "component" = component + "build.timestamp" = timestamp() + "build.tag" = TAG + } +} target "mev-commit-builder" { + inherits = ["_common"] context = "../../" dockerfile = "infrastructure/docker/Dockerfile.builder" + labels = get_labels("builder") } target "mev-commit-oracle" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.oracle" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/mev-commit-oracle:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-mev-commit-oracle" : "${REGISTRY}/mev-commit-oracle:${TAG}"] + labels = get_labels("oracle") } target "mev-commit" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.p2p" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/mev-commit:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-mev-commit" : "${REGISTRY}/mev-commit:${TAG}"] + labels = get_labels("p2p") } target "mev-commit-bridge" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.bridge" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/mev-commit-bridge:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-mev-commit-bridge" : "${REGISTRY}/mev-commit-bridge:${TAG}"] + labels = get_labels("bridge") } target "mev-commit-dashboard" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.dashboard" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/mev-commit-dashboard:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-mev-commit-dashboard" : "${REGISTRY}/mev-commit-dashboard:${TAG}"] + labels = get_labels("dashboard") } target "preconf-rpc" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.rpc" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/preconf-rpc:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-preconf-rpc" : "${REGISTRY}/preconf-rpc:${TAG}"] + labels = get_labels("preconf-rpc") } target "bidder-emulator" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.bidderemulator" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/bidder-emulator:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-bidder-emulator" : "${REGISTRY}/bidder-emulator:${TAG}"] + labels = get_labels("bidder-emulator") } target "provider-emulator" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.provideremulator" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/provider-emulator:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-provider-emulator" : "${REGISTRY}/provider-emulator:${TAG}"] + labels = get_labels("provider-emulator") } target "relay-emulator" { + inherits = ["_common"] context = "./" dockerfile = "Dockerfile.relayemulator" contexts = { builder_ctx = "target:mev-commit-builder" } - tags = ["ghcr.io/primev/relay-emulator:${TAG}"] + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-relay-emulator" : "${REGISTRY}/relay-emulator:${TAG}"] + labels = get_labels("relay-emulator") } -group "default" { +group "all" { targets = ["mev-commit-builder", "mev-commit-oracle", "mev-commit", "mev-commit-bridge", "mev-commit-dashboard", "preconf-rpc", "bidder-emulator", "provider-emulator", "relay-emulator"] } +group "default" { + targets = ["all"] +} + +target "_common" { + platforms = PLATFORM + output = ["type=docker"] +}