From 16b152dc680fdc63459883bf6fa068363682a779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Tue, 7 Apr 2026 12:35:40 +0200 Subject: [PATCH] build: add arm64 tools build (genpolicy, agent-ctl, kata-ctl, etc.) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The arm64 build workflow was missing the tools build entirely. Add build-tools-asset and create-kata-tools-tarball jobs mirroring the amd64 workflow so that genpolicy and the other tools are available for coco-dev tests that need auto-generated policy. Signed-off-by: Fabiano FidĂȘncio Made-with: Cursor --- .../build-kata-static-tarball-arm64.yaml | 110 ++++++++++++++++++ tools/packaging/static-build/tools/Dockerfile | 23 +++- 2 files changed, 127 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-kata-static-tarball-arm64.yaml b/.github/workflows/build-kata-static-tarball-arm64.yaml index e1d2de97d5..9e69f0e7c2 100644 --- a/.github/workflows/build-kata-static-tarball-arm64.yaml +++ b/.github/workflows/build-kata-static-tarball-arm64.yaml @@ -297,6 +297,116 @@ jobs: retention-days: 15 if-no-files-found: error + build-tools-asset: + name: build-tools-asset + runs-on: ubuntu-24.04-arm + permissions: + contents: read + packages: write + strategy: + matrix: + asset: + - agent-ctl + - genpolicy + - kata-ctl + - kata-manager + - trace-forwarder + stage: + - ${{ inputs.stage }} + steps: + - name: Login to Kata Containers quay.io + if: ${{ inputs.push-to-registry == 'yes' }} + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + with: + registry: quay.io + username: ${{ vars.QUAY_DEPLOYER_USERNAME }} + password: ${{ secrets.QUAY_DEPLOYER_PASSWORD }} + + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ inputs.commit-hash }} + fetch-depth: 0 # This is needed in order to keep the commit ids history + persist-credentials: false + + - name: Rebase atop of the latest target branch + run: | + ./tests/git-helper.sh "rebase-atop-of-the-latest-target-branch" + env: + TARGET_BRANCH: ${{ inputs.target-branch }} + + - name: Build ${{ matrix.asset }} + id: build + run: | + make "${KATA_ASSET}-tarball" + build_dir=$(readlink -f build) + # store-artifact does not work with symlink + mkdir -p kata-tools-build && cp "${build_dir}"/kata-static-"${KATA_ASSET}"*.tar.* kata-tools-build/. + env: + KATA_ASSET: ${{ matrix.asset }} + TAR_OUTPUT: ${{ matrix.asset }}.tar.gz + PUSH_TO_REGISTRY: ${{ inputs.push-to-registry }} + ARTEFACT_REGISTRY: ghcr.io + ARTEFACT_REGISTRY_USERNAME: ${{ github.actor }} + ARTEFACT_REGISTRY_PASSWORD: ${{ secrets.GITHUB_TOKEN }} + TARGET_BRANCH: ${{ inputs.target-branch }} + RELEASE: ${{ inputs.stage == 'release' && 'yes' || 'no' }} + + - name: store-artifact ${{ matrix.asset }} + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: kata-tools-artifacts-arm64-${{ matrix.asset }}${{ inputs.tarball-suffix }} + path: kata-tools-build/kata-static-${{ matrix.asset }}.tar.zst + retention-days: 15 + if-no-files-found: error + + create-kata-tools-tarball: + name: create-kata-tools-tarball + runs-on: ubuntu-24.04-arm + needs: [build-tools-asset] + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ inputs.commit-hash }} + fetch-depth: 0 + fetch-tags: true + persist-credentials: false + - name: Rebase atop of the latest target branch + run: | + ./tests/git-helper.sh "rebase-atop-of-the-latest-target-branch" + env: + TARGET_BRANCH: ${{ inputs.target-branch }} + - name: get-artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + pattern: kata-tools-artifacts-arm64-*${{ inputs.tarball-suffix }} + path: kata-tools-artifacts + merge-multiple: true + - name: merge-artifacts + run: | + ./tools/packaging/kata-deploy/local-build/kata-deploy-merge-builds.sh kata-tools-artifacts versions.yaml kata-tools-static.tar.zst + env: + RELEASE: ${{ inputs.stage == 'release' && 'yes' || 'no' }} + - name: Check kata-tools tarball size (GitHub release asset limit) + run: | + # https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases#storage-and-bandwidth-quotas + GITHUB_ASSET_MAX_BYTES=2147483648 + tarball_size=$(stat -c "%s" kata-tools-static.tar.zst) + if [[ "${tarball_size}" -ge "${GITHUB_ASSET_MAX_BYTES}" ]]; then + echo "::error::tarball size (${tarball_size} bytes) >= GitHub release asset limit (${GITHUB_ASSET_MAX_BYTES} bytes)" + exit 1 + fi + echo "tarball size: ${tarball_size} bytes" + - name: store-artifacts + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: kata-tools-static-tarball-arm64${{ inputs.tarball-suffix }} + path: kata-tools-static.tar.zst + retention-days: 15 + if-no-files-found: error + create-kata-tarball: name: create-kata-tarball runs-on: ubuntu-24.04-arm diff --git a/tools/packaging/static-build/tools/Dockerfile b/tools/packaging/static-build/tools/Dockerfile index eb52334592..17ede6581e 100644 --- a/tools/packaging/static-build/tools/Dockerfile +++ b/tools/packaging/static-build/tools/Dockerfile @@ -61,10 +61,21 @@ RUN ARCH=$(uname -m) && \ rm /tmp/oras.tar.gz && \ oras version -# Tools only build for x86_64 -RUN rustup target add x86_64-unknown-linux-musl +RUN ARCH=$(uname -m) && \ + case "${ARCH}" in \ + x86_64) MUSL_TARGET="x86_64-unknown-linux-musl" ;; \ + aarch64) MUSL_TARGET="aarch64-unknown-linux-musl" ;; \ + *) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \ + esac && \ + rustup target add "${MUSL_TARGET}" -RUN kernelname=$(uname -s | tr '[:upper:]' '[:lower:]'); \ - curl -fsSOL "https://go.dev/dl/go${GO_TOOLCHAIN}.${kernelname}-amd64.tar.gz" && \ - tar -C "${GO_HOME}" -xzf "go${GO_TOOLCHAIN}.${kernelname}-amd64.tar.gz" && \ - rm "go${GO_TOOLCHAIN}.${kernelname}-amd64.tar.gz" +RUN ARCH=$(uname -m) && \ + case "${ARCH}" in \ + x86_64) GO_ARCH="amd64" ;; \ + aarch64) GO_ARCH="arm64" ;; \ + *) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \ + esac && \ + kernelname=$(uname -s | tr '[:upper:]' '[:lower:]') && \ + curl -fsSOL "https://go.dev/dl/go${GO_TOOLCHAIN}.${kernelname}-${GO_ARCH}.tar.gz" && \ + tar -C "${GO_HOME}" -xzf "go${GO_TOOLCHAIN}.${kernelname}-${GO_ARCH}.tar.gz" && \ + rm "go${GO_TOOLCHAIN}.${kernelname}-${GO_ARCH}.tar.gz"