From 6b62f5ccb45799a17c67d4f3c7f707add7db4a0d Mon Sep 17 00:00:00 2001 From: Alessio Perugini Date: Fri, 6 Jun 2025 16:51:35 +0200 Subject: [PATCH 1/3] taskfile: build deb pkgs Ship .deb packages for all supported linux archs --- DistTasks.yml | 33 +++++++++++++++++++++++++++++++ debian/Dockerfile | 33 +++++++++++++++++++++++++++++++ debian/arduino-cli/DEBIAN/control | 5 +++++ 3 files changed, 71 insertions(+) create mode 100644 debian/Dockerfile create mode 100644 debian/arduino-cli/DEBIAN/control diff --git a/DistTasks.yml b/DistTasks.yml index eb0ce3dbd25..c7eb189a2bf 100644 --- a/DistTasks.yml +++ b/DistTasks.yml @@ -76,6 +76,10 @@ tasks: -p "{{.BUILD_PLATFORM}}" tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}} + - task: build_deb + vars: + GO_BINARY: "{{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}" + ARCH: "i386" vars: PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_amd32" @@ -97,6 +101,10 @@ tasks: -p "{{.BUILD_PLATFORM}}" tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}} + - task: build_deb + vars: + GO_BINARY: "{{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}" + ARCH: "amd64" vars: PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_amd64" @@ -118,6 +126,10 @@ tasks: -p "{{.BUILD_PLATFORM}}" tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}} + - task: build_deb + vars: + GO_BINARY: "{{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}" + ARCH: "armhf" vars: PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_7" @@ -139,6 +151,10 @@ tasks: -p "{{.BUILD_PLATFORM}}" tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}} + - task: build_deb + vars: + GO_BINARY: "{{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}" + ARCH: "armel" vars: PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_6" @@ -160,6 +176,10 @@ tasks: -p "{{.BUILD_PLATFORM}}" tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}} + - task: build_deb + vars: + GO_BINARY: "{{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}" + ARCH: "arm64" vars: PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_64" @@ -231,3 +251,16 @@ tasks: cmds: - mkdir --parents {{.DIST_DIR}} - cp ./internal/cli/configuration/configuration.schema.json {{.DIST_DIR}}/{{.PROJECT_NAME}}_{{.VERSION}}_configuration.schema.json + + build_deb: + desc: Builds the deb package + cmds: + - | + docker build \ + --build-arg BINARY_NAME={{.PROJECT_NAME}} \ + --build-arg DEB_NAME={{.PROJECT_NAME}} \ + --build-arg VERSION={{ .VERSION }} \ + --build-arg ARCH={{ .ARCH }} \ + --build-arg GO_BINARY={{ .GO_BINARY }} \ + --output=./dist \ + -f debian/Dockerfile . diff --git a/debian/Dockerfile b/debian/Dockerfile new file mode 100644 index 00000000000..34aede6f2f9 --- /dev/null +++ b/debian/Dockerfile @@ -0,0 +1,33 @@ +FROM debian:bookworm AS debian + +ARG VERSION +RUN test -n "${VERSION}" || (echo "Error: VERSION is not set" && exit 1) + +ARG REVISION="1" +ARG ARCH +RUN test -n "${ARCH}" || (echo "Error: ARCH is not set" && exit 1) + +ARG DEB_NAME +RUN test -n "${DEB_NAME}" || (echo "Error: DEB_NAME is not set" && exit 1) + +ARG BINARY_NAME +RUN test -n "${BINARY_NAME}" || (echo "Error: BINARY_NAME is not set" && exit 1) + +RUN apt-get update && apt-get install -y sed + +ARG GO_BINARY + +COPY ./debian/${DEB_NAME} /${DEB_NAME}/ +COPY ./${GO_BINARY} /${DEB_NAME}/usr/bin/${BINARY_NAME} +COPY ./LICENSE.txt /${DEB_NAME}/usr/share/doc/copyright + +# Go application are tagged with `v` prefix, this remove the first v if present +RUN export VERSION=$(echo "${VERSION}" | sed -e "s/^v\(.*\)/\1/") && \ + sed -i "s/\$ARCH/${ARCH}/" /${DEB_NAME}/DEBIAN/control && \ + sed -i "s/\$VERSION/${VERSION}/" /${DEB_NAME}/DEBIAN/control && \ + dpkg-deb --build --root-owner-group /${DEB_NAME} &&\ + mv /${DEB_NAME}.deb "/${DEB_NAME}_${VERSION}-${REVISION}_${ARCH}.deb" + +FROM scratch + +COPY --from=debian /*.deb / diff --git a/debian/arduino-cli/DEBIAN/control b/debian/arduino-cli/DEBIAN/control new file mode 100644 index 00000000000..f9a23038492 --- /dev/null +++ b/debian/arduino-cli/DEBIAN/control @@ -0,0 +1,5 @@ +Package: arduino-cli +Version: $VERSION +Architecture: $ARCH +Maintainer: arduino +Description: Arduino CLI From c30148ccdb7ba5eca8c49b9d3af572d74900fd02 Mon Sep 17 00:00:00 2001 From: Alessio Perugini Date: Fri, 6 Jun 2025 17:14:28 +0200 Subject: [PATCH 2/3] taskfile: when not tag are present add `v0.0.0-` prefix --- DistTasks.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DistTasks.yml b/DistTasks.yml index c7eb189a2bf..924363d461f 100644 --- a/DistTasks.yml +++ b/DistTasks.yml @@ -264,3 +264,5 @@ tasks: --build-arg GO_BINARY={{ .GO_BINARY }} \ --output=./dist \ -f debian/Dockerfile . + vars: + VERSION: "{{if .TAG}}{{.VERSION}}{{else}}v0.0.0-{{.VERSION}}{{end}}" From 8645135e71f651ac1ef8601e2b52f2a572ed22b1 Mon Sep 17 00:00:00 2001 From: Alessio Perugini Date: Fri, 6 Jun 2025 18:06:35 +0200 Subject: [PATCH 3/3] fixup! taskfile: build deb pkgs --- DistTasks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/DistTasks.yml b/DistTasks.yml index 924363d461f..c1b3fe243c3 100644 --- a/DistTasks.yml +++ b/DistTasks.yml @@ -254,6 +254,7 @@ tasks: build_deb: desc: Builds the deb package + internal: true cmds: - | docker build \