From cbdb33fefe9a1da99c47b10458901945c44a3557 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Sun, 3 May 2026 15:46:26 +0800 Subject: [PATCH] chore(partnerctl): add GraalVM native-image setup and arm64 build tooling --- PartnerCtl/Dockerfile.native-arm64 | 12 ++++ PartnerCtl/pom.xml | 74 +++++++++++++++++++++++- PartnerCtl/scripts/build-native-arm64.sh | 27 +++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 PartnerCtl/Dockerfile.native-arm64 create mode 100644 PartnerCtl/scripts/build-native-arm64.sh diff --git a/PartnerCtl/Dockerfile.native-arm64 b/PartnerCtl/Dockerfile.native-arm64 new file mode 100644 index 00000000..2a70c116 --- /dev/null +++ b/PartnerCtl/Dockerfile.native-arm64 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm64 ghcr.io/graalvm/native-image-community:21 + +RUN microdnf install -y \ + maven \ + findutils \ + gzip \ + tar \ + which \ + file \ + && microdnf clean all + +WORKDIR /workspace diff --git a/PartnerCtl/pom.xml b/PartnerCtl/pom.xml index dbe49f79..6aceab70 100644 --- a/PartnerCtl/pom.xml +++ b/PartnerCtl/pom.xml @@ -15,8 +15,10 @@ 21 21 UTF-8 + 4.7.7 + org.jline @@ -26,8 +28,78 @@ info.picocli picocli - 4.7.7 + ${picocli.version} + + + info.picocli + picocli-codegen + ${picocli.version} + provided + + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + + kapt + + kapt + + + + src/main/java + + + + info.picocli + picocli-codegen + ${picocli.version} + + + + partnerctl + + + + + + compile + + compile + + + + src/main/java + + 21 + + + + + + org.graalvm.buildtools + native-maven-plugin + 1.0.0 + true + + partnerctl + work.slhaf.partner.ctl.PartnerCtlKt + + false + + + --no-fallback + -H:+ReportExceptionStackTraces + + + + + + \ No newline at end of file diff --git a/PartnerCtl/scripts/build-native-arm64.sh b/PartnerCtl/scripts/build-native-arm64.sh new file mode 100644 index 00000000..053762ee --- /dev/null +++ b/PartnerCtl/scripts/build-native-arm64.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -euo pipefail + +MODULE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +REPO_DIR="$(cd "${MODULE_DIR}/.." && pwd)" +IMAGE_NAME="${PARTNERCTL_ARM64_BUILDER_IMAGE:-partnerctl-native-arm64-builder:21}" +DOCKERFILE="${MODULE_DIR}/Dockerfile.native-arm64" + +if ! docker image inspect "${IMAGE_NAME}" >/dev/null 2>&1; then + echo "[partnerctl] building reusable arm64 native builder image: ${IMAGE_NAME}" + docker buildx build \ + --platform linux/arm64 \ + -f "${DOCKERFILE}" \ + -t "${IMAGE_NAME}" \ + --load \ + "${MODULE_DIR}" +fi + +echo "[partnerctl] building linux-aarch64 native executable" +docker run --rm \ + --platform linux/arm64 \ + --entrypoint /bin/bash \ + -v "${REPO_DIR}":/workspace \ + -v "${HOME}/.m2":/root/.m2 \ + -w /workspace/PartnerCtl \ + "${IMAGE_NAME}" \ + -lc 'mvn -Pnative native:compile && file target/partnerctl'