diff --git a/buildkite/src/Command/DockerImage.dhall b/buildkite/src/Command/DockerImage.dhall index 319885bd838a..3b04c7f663f3 100644 --- a/buildkite/src/Command/DockerImage.dhall +++ b/buildkite/src/Command/DockerImage.dhall @@ -100,9 +100,7 @@ let stepLabel = let generateStep = \(spec : ReleaseSpec.Type) - -> let installBuildx = "./scripts/docker/setup_buildx.sh" - - let exportMinaDebCmd = + -> let exportMinaDebCmd = "export MINA_DEB_CODENAME=${DebianVersions.lowerName spec.deb_codename}" @@ -228,9 +226,7 @@ let generateStep = , Stable = remoteRepoCmds , Local = [ Cmd.run - ( installBuildx - ++ " && " - ++ exportMinaDebCmd + ( exportMinaDebCmd ++ " && " ++ pruneDockerImages ++ maybeStartDebianRepo diff --git a/buildkite/src/Command/FixPermissions.dhall b/buildkite/src/Command/FixPermissions.dhall new file mode 100644 index 000000000000..7b750bebc0f3 --- /dev/null +++ b/buildkite/src/Command/FixPermissions.dhall @@ -0,0 +1,23 @@ +let Cmd = ../Lib/Cmds.dhall + +let Arch = ../Constants/Arch.dhall + +let ContainerImages = ../Constants/ContainerImages.dhall + +let fixPermissionsScript = "sudo chown -R opam ." + +let command + : Arch.Type -> Cmd.Type + = \(arch : Arch.Type) + -> let image = + merge + { Amd64 = ContainerImages.minaToolchainBullseye.amd64 + , Arm64 = ContainerImages.minaToolchainBullseye.arm64 + } + arch + + in Cmd.runInDocker + Cmd.Docker::{ image = image, platform = Arch.platform arch } + fixPermissionsScript + +in { command = command } diff --git a/buildkite/src/Command/Mina.dhall b/buildkite/src/Command/Mina.dhall deleted file mode 100644 index e732222496de..000000000000 --- a/buildkite/src/Command/Mina.dhall +++ /dev/null @@ -1,35 +0,0 @@ -let Cmd = ../Lib/Cmds.dhall - -let Docker = ./Docker/Type.dhall - -let Base = ./Base.dhall - -let Size = ./Size.dhall - -let dockerImage = (../Constants/ContainerImages.dhall).minaToolchain - -let fixPermissionsScript = "sudo chown -R opam ." - -let Config = - { Type = { commands : List Cmd.Type, label : Text, key : Text } - , default = {=} - } - -let build - : Config.Type -> Base.Type - = \(c : Config.Type) - -> Base.build - Base.Config::{ - , commands = [ Cmd.run fixPermissionsScript ] # c.commands - , label = c.label - , key = c.key - , target = Size.Small - , docker = Some Docker::{ image = dockerImage } - } - -in { fixPermissionsCommand = - Cmd.runInDocker Cmd.Docker::{ image = dockerImage } fixPermissionsScript - , Config = Config - , build = build - , Type = Base.Type - } diff --git a/buildkite/src/Command/MinaArtifact.dhall b/buildkite/src/Command/MinaArtifact.dhall index 6d6f7294b3c7..2e2a4e4241d3 100644 --- a/buildkite/src/Command/MinaArtifact.dhall +++ b/buildkite/src/Command/MinaArtifact.dhall @@ -118,8 +118,7 @@ let build_artifacts -> Command.build Command.Config::{ , commands = - [ Cmd.run "./scripts/docker/setup_buildx.sh" ] - # Toolchain.select + Toolchain.select spec.toolchainSelectMode spec.debVersion spec.arch diff --git a/buildkite/src/Command/Packages/Publish.dhall b/buildkite/src/Command/Packages/Publish.dhall index d8ce5e975e22..5b9c3662c178 100644 --- a/buildkite/src/Command/Packages/Publish.dhall +++ b/buildkite/src/Command/Packages/Publish.dhall @@ -34,7 +34,7 @@ let Command = ../Base.dhall let Cmd = ../../Lib/Cmds.dhall -let Mina = ../Mina.dhall +let FixPermissions = ../FixPermissions.dhall let Artifact = ../../Constants/Artifacts.dhall @@ -221,7 +221,9 @@ let publish in [ Command.build Command.Config::{ - , commands = [ Mina.fixPermissionsCommand ] # commands + , commands = + [ FixPermissions.command Architecture.Type.Amd64 ] + # commands , label = "Debian Packages Publishing" , key = "publish-debians-${DebianChannel.lowerName diff --git a/buildkite/src/Command/RunInToolchain.dhall b/buildkite/src/Command/RunInToolchain.dhall index 280ebc0cefdb..5ec38e09b8ef 100644 --- a/buildkite/src/Command/RunInToolchain.dhall +++ b/buildkite/src/Command/RunInToolchain.dhall @@ -1,23 +1,23 @@ let Cmd = ../Lib/Cmds.dhall -let Mina = ../Command/Mina.dhall - let ContainerImages = ../Constants/ContainerImages.dhall let Arch = ../Constants/Arch.dhall +let FixPermissions = ../Command/FixPermissions.dhall + let runInToolchainImage - : Text -> Text -> List Text -> Text -> List Cmd.Type + : Text -> Arch.Type -> List Text -> Text -> List Cmd.Type = \(image : Text) - -> \(platform : Text) + -> \(arch : Arch.Type) -> \(environment : List Text) -> \(innerScript : Text) - -> [ Mina.fixPermissionsCommand ] + -> [ FixPermissions.command arch ] # [ Cmd.runInDocker Cmd.Docker::{ , image = image , extraEnv = environment - , platform = platform + , platform = Arch.platform arch } innerScript ] @@ -34,11 +34,7 @@ let runInToolchainNoble } arch - in runInToolchainImage - image - (Arch.platform arch) - environment - innerScript + in runInToolchainImage image arch environment innerScript let runInToolchainJammy : List Text -> Text -> List Cmd.Type @@ -46,7 +42,7 @@ let runInToolchainJammy -> \(innerScript : Text) -> runInToolchainImage ContainerImages.minaToolchainJammy.amd64 - (Arch.platform Arch.Type.Amd64) + Arch.Type.Amd64 environment innerScript @@ -62,11 +58,7 @@ let runInToolchainBookworm } arch - in runInToolchainImage - image - (Arch.platform arch) - environment - innerScript + in runInToolchainImage image arch environment innerScript let runInToolchainBullseye : Arch.Type -> List Text -> Text -> List Cmd.Type @@ -80,11 +72,7 @@ let runInToolchainBullseye } arch - in runInToolchainImage - image - (Arch.platform arch) - environment - innerScript + in runInToolchainImage image arch environment innerScript let runInToolchain : List Text -> Text -> List Cmd.Type @@ -92,7 +80,7 @@ let runInToolchain -> \(innerScript : Text) -> runInToolchainImage ContainerImages.minaToolchain - (Arch.platform Arch.Type.Amd64) + Arch.Type.Amd64 environment innerScript diff --git a/buildkite/src/Constants/Toolchain.dhall b/buildkite/src/Constants/Toolchain.dhall index b689a2397591..151a78234eed 100644 --- a/buildkite/src/Constants/Toolchain.dhall +++ b/buildkite/src/Constants/Toolchain.dhall @@ -13,7 +13,7 @@ let runner = -> \(arch : Arch.Type) -> merge { Bookworm = RunInToolchain.runInToolchainBookworm arch - , Bullseye = RunInToolchain.runInToolchain + , Bullseye = RunInToolchain.runInToolchainBullseye arch , Jammy = RunInToolchain.runInToolchainJammy , Focal = RunInToolchain.runInToolchain , Noble = RunInToolchain.runInToolchainNoble arch @@ -27,10 +27,7 @@ let select = -> merge { ByDebianAndArch = runner debVersion arch , Custom = - \(image : Text) - -> RunInToolchain.runInToolchainImage - image - (Arch.platform arch) + \(image : Text) -> RunInToolchain.runInToolchainImage image arch } mode diff --git a/buildkite/src/Jobs/Test/EmergencyHfTest.dhall b/buildkite/src/Jobs/Test/EmergencyHfTest.dhall index b602d3f47af9..90e73fa84a24 100644 --- a/buildkite/src/Jobs/Test/EmergencyHfTest.dhall +++ b/buildkite/src/Jobs/Test/EmergencyHfTest.dhall @@ -14,7 +14,9 @@ let RunWithPostgres = ../../Command/RunWithPostgres.dhall let ContainerImages = ../../Constants/ContainerImages.dhall -let Mina = ../../Command/Mina.dhall +let FixPermissions = ../../Command/FixPermissions.dhall + +let Arch = ../../Constants/Arch.dhall let key = "emergency-hf-test" @@ -37,7 +39,7 @@ in Pipeline.build [ Command.build Command.Config::{ , commands = - [ Mina.fixPermissionsCommand ] + [ FixPermissions.command Arch.Type.Amd64 ] # [ RunWithPostgres.runInDockerWithPostgresConn ([] : List Text) (None RunWithPostgres.ScriptOrArchive) diff --git a/scripts/docker/setup_buildx.sh b/scripts/docker/setup_buildx.sh deleted file mode 100755 index 99df965ac090..000000000000 --- a/scripts/docker/setup_buildx.sh +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env bash -# -# Docker Buildx Multi-Architecture Builder Setup Script -# -# This script automates the creation and configuration of Docker Buildx builders -# for multi-architecture container image builds. It supports different drivers -# and can optionally install binary format emulation for cross-compilation. -# -# USAGE: -# ./setup_buildx.sh [BUILDER_NAME] -# -# ARGUMENTS: -# BUILDER_NAME Optional name for the buildx builder (default: "xbuilder") -# -# ENVIRONMENT VARIABLES: -# BUILDX_NAME Alternative way to set builder name (default: "xbuilder") -# DRIVER Buildx driver to use: docker | docker-container | kubernetes (default: "docker") -# ARCHS Target architectures for binfmt emulation (default: "arm64") -# INSTALL_BINFMT Enable/disable binfmt installation: 1 | 0 (default: "1") -# -# EXAMPLES: -# # Create default builder with docker driver -# ./setup_buildx.sh -# -# # Create custom builder with docker-container driver -# DRIVER=docker-container ./setup_buildx.sh mybuilder -# -# # Setup for multiple architectures without binfmt -# ARCHS="arm64,amd64" INSTALL_BINFMT=0 ./setup_buildx.sh -# -# FEATURES: -# - Validates Docker and Buildx availability -# - Handles special case for 'docker' driver (uses default builder) -# - Creates or reuses existing builders for other drivers -# - Bootstraps builder instances -# - Installs binfmt emulation for cross-architecture builds (now independent of driver) -# - Provides summary of available builders -# -# REQUIREMENTS: -# - Docker with Buildx plugin -# - Privileged access (for binfmt installation) -set -euo pipefail - -# Config (override via env or args) -NAME="${1:-${BUILDX_NAME:-xbuilder}}" -DRIVER="${DRIVER:-docker}" # docker | docker-container | kubernetes -ARCHS="${ARCHS:-arm64}" # binfmt architectures to install (comma-separated) -INSTALL_BINFMT="${INSTALL_BINFMT:-1}" - -command -v docker >/dev/null || { echo "docker not found"; exit 1; } -docker buildx version >/dev/null 2>&1 || { echo "docker buildx not available"; exit 1; } - -# Helper: ensure we are on a given builder -use_builder () { - local b="$1" - docker buildx inspect "$b" >/dev/null 2>&1 || { echo "builder '$b' not found"; return 1; } - docker buildx use "$b" -} - -# Special case: docker driver can only have ONE instance (the implicit 'default') -if [[ "$DRIVER" == "docker" ]]; then - echo "[buildx] Using 'docker' driver -> switching to existing 'default' builder" - if ! use_builder default; then - # On some setups 'default' exists but isn't initialized yet; bootstrap via inspect - docker buildx create --name default --driver docker --use || true - docker buildx inspect default --bootstrap >/dev/null || true - docker buildx use default - fi -else - # For docker-container (recommended) or other drivers: create or reuse NAME - if docker buildx inspect "$NAME" >/dev/null 2>&1; then - echo "[buildx] Using existing builder: $NAME" - docker buildx use "$NAME" - else - # Clean any stale handle with same name (safe if it doesn't exist) - docker buildx rm "$NAME" >/dev/null 2>&1 || true - echo "[buildx] Creating builder: $NAME (driver: $DRIVER)" - docker buildx create --name "$NAME" --driver "$DRIVER" --use - fi -fi - -echo "[buildx] Bootstrapping current builder" -docker buildx inspect --bootstrap >/dev/null - -# Snapshot builder/driver for logs -CURRENT_BUILDER="$(docker buildx ls | awk '/\*/{gsub(/\*/, "", $1); print $1}')" -CURRENT_DRIVER="$(docker buildx inspect "$CURRENT_BUILDER" | awk -F': ' '/Driver:/ {print $2}')" - -# --- NEW: Ensure binfmt (QEMU) regardless of driver when requested --- -if [[ "${INSTALL_BINFMT}" = "1" ]]; then - # Normalize commas/spaces, split into array - IFS=',' read -r -a _ARCHES <<<"$(echo "$ARCHS" | tr -d ' ')" - - # Map host arch to docker "platform arch" names for quick decisions - HOST_UNAME="$(uname -m)" - case "$HOST_UNAME" in - x86_64) HOST_ARCH_DOCKER="amd64" ;; - aarch64) HOST_ARCH_DOCKER="arm64" ;; - arm64) HOST_ARCH_DOCKER="arm64" ;; - *) HOST_ARCH_DOCKER="$HOST_UNAME" ;; - esac - - echo "[binfmt] Requested arches: ${_ARCHES[*]} (host: $HOST_UNAME -> $HOST_ARCH_DOCKER)" - echo "[binfmt] Ensuring emulators are installed (driver: $CURRENT_DRIVER)" - - # Install all requested emulators in one shot (idempotent) - docker run --privileged --rm europe-west3-docker.pkg.dev/o1labs-192920/euro-docker-repo/tonistiigi/binfmt:latest --install "$(IFS=','; echo "${_ARCHES[*]}")" >/dev/null || { - echo "[binfmt] ERROR: Failed to install binfmt for: ${_ARCHES[*]}" >&2 - exit 1 - } - - # Smoke-test non-native arches using europe-west3-docker.pkg.dev/o1labs-192920/euro-docker-repo/busybox:latest where applicable - # Build map from arch -> platform string - for a in "${_ARCHES[@]}"; do - # Skip test for native arch - if [[ "$a" == "$HOST_ARCH_DOCKER" ]]; then - continue - fi - platform="linux/${a}" - echo "[binfmt] Smoke test for ${platform} ..." - if docker run --rm --platform="$platform" europe-west3-docker.pkg.dev/o1labs-192920/euro-docker-repo/busybox:latest uname -m 2>/dev/null | grep -qiE 'aarch64|arm64|x86_64|amd64|ppc64le|s390x|riscv64'; then - echo "[binfmt] OK: ${platform} emulation working" - else - echo "[binfmt] WARNING: ${platform} smoke test did not confirm; emulation may still be fine depending on image availability" >&2 - fi - done -else - echo "[binfmt] Skipped (INSTALL_BINFMT=${INSTALL_BINFMT})" -fi -# -------------------------------------------------------------------- - -echo -echo "[summary]" -docker buildx ls