From b13ceee86008dfad5ad9b7d2bbc626337e7997c5 Mon Sep 17 00:00:00 2001
From: Techassi <git@techassi.dev>
Date: Tue, 26 Aug 2025 15:33:29 +0200
Subject: [PATCH 1/3] feat: Add setup-tools and setup-k8s-tools actions

---
 README.md                   |  2 +
 setup-k8s-tools/README.md   | 26 ++++++++++++
 setup-k8s-tools/action.yaml | 80 +++++++++++++++++++++++++++++++++++++
 setup-tools/README.md       | 27 +++++++++++++
 setup-tools/action.yaml     | 71 ++++++++++++++++++++++++++++++++
 5 files changed, 206 insertions(+)
 create mode 100644 setup-k8s-tools/README.md
 create mode 100644 setup-k8s-tools/action.yaml
 create mode 100644 setup-tools/README.md
 create mode 100644 setup-tools/action.yaml

diff --git a/README.md b/README.md
index f1b2812..eb79776 100644
--- a/README.md
+++ b/README.md
@@ -28,5 +28,7 @@ particular step in a workflow.
 - [run-integration-test](./run-integration-test/README.md)
 - [run-pre-commit](./run-pre-commit/README.md)
 - [send-slack-notification](./send-slack-notification/README.md)
+- [setup-k8s-tools](./setup-k8s-tools/README.md)
+- [setup-tools](./setup-tools/README.md)
 - [shard](./shard/README.md)
 <!-- end:links -->
diff --git a/setup-k8s-tools/README.md b/setup-k8s-tools/README.md
new file mode 100644
index 0000000..860706e
--- /dev/null
+++ b/setup-k8s-tools/README.md
@@ -0,0 +1,26 @@
+# `setup-k8s-tools`
+
+> Manifest: [setup-k8s-tools/action.yml][setup-k8s-tools]
+
+This action downloads and installs Kubernetes tools.
+
+## Inputs and Outputs
+
+> [!TIP]
+> For descriptions of the inputs and outputs, see the complete [setup-k8s-tools] action.
+
+### Inputs
+
+| Input             | Required | Description                   |
+| ----------------- | -------- | ----------------------------- |
+| `kubectl-version` | No       | The version of kubectl*       |
+| `kuttl-version`   | No       | The version of kubectl-kuttl* |
+| `helm-version`    | No       | The version of helm*          |
+
+\* If no input is set, the tool won't be installed.
+
+### Outputs
+
+None.
+
+[setup-k8s-tools]: ./action.yaml
diff --git a/setup-k8s-tools/action.yaml b/setup-k8s-tools/action.yaml
new file mode 100644
index 0000000..a495a12
--- /dev/null
+++ b/setup-k8s-tools/action.yaml
@@ -0,0 +1,80 @@
+---
+name: Setup Kubernetes Tools
+description: This action sets up Kubernetes tools
+inputs:
+  kubectl-version:
+    description: The version of kubectl
+  kuttl-version:
+    description: The version of kubectl-kuttl
+  helm-version:
+    description: The version of helm
+runs:
+  using: composite
+  steps:
+    # We technically don't need to install kubectl, kind or helm because it is already part of the installed
+    # tools of the runner image, but we at least install kubectl and helm explicitly, to be able to pin the versions.
+    # See https://github.com/actions/runner-images/blob/main/images/ubuntu/scripts/build/install-kubernetes-tools.sh
+    - name: Install kubectl
+      if: inputs.kubectl-version
+      env:
+        KUBECTL_VERSION: ${{ inputs.kubectl-version }}
+        GITHUB_DEBUG: ${{ runner.debug }}
+      shell: bash
+      run: |
+        set -euo pipefail
+        [ -n "$GITHUB_DEBUG" ] && set -x
+
+        ARCH=$("$GITHUB_ACTION_PATH/../.scripts/actions/get_architecture.sh")
+
+        echo "::group::Install kubectl"
+        curl -fsSL -o /tmp/kubectl "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl"
+        # Overwrite the existing binary
+        sudo install -m 755 -t /usr/local/bin /tmp/kubectl
+
+        kubectl version --client
+        echo "::endgroup::"
+
+    - name: Install kubectl-kuttl
+      if: inputs.kuttl-version
+      env:
+        KUTTL_VERSION: ${{ inputs.kuttl-version }}
+        GITHUB_DEBUG: ${{ runner.debug }}
+      shell: bash
+      run: |
+        set -euo pipefail
+        [ -n "$GITHUB_DEBUG" ] && set -x
+
+        echo "::group::Install kubectl-kuttl"
+        curl -fsSL -o /tmp/kubectl-kuttl "https://github.com/kudobuilder/kuttl/releases/download/v$KUTTL_VERSION/kubectl-kuttl_${KUTTL_VERSION}_linux_x86_64"
+        sudo install -m 755 -t /usr/local/bin /tmp/kubectl-kuttl
+        echo "::endgroup::"
+
+    - name: Install Helm
+      if: inputs.helm-version
+      env:
+        HELM_VERSION: ${{ inputs.helm-version }}
+        GITHUB_DEBUG: ${{ runner.debug }}
+      shell: bash
+      run: |
+        set -euo pipefail
+        [ -n "$GITHUB_DEBUG" ] && set -x
+
+        PLATFORM=$("$GITHUB_ACTION_PATH/../.scripts/actions/get_platform.sh")
+        ARCH=$("$GITHUB_ACTION_PATH/../.scripts/actions/get_architecture.sh")
+
+        FILENAME="helm-${HELM_VERSION}-${PLATFORM}-${ARCH}.tar.gz"
+
+        echo "::group::Install helm"
+        mkdir /tmp/helm
+        curl -fsSL -o /tmp/helm/helm.tar.gz "https://get.helm.sh/${FILENAME}"
+        curl -fsSL -o /tmp/helm/helm.tar.gz.asc "https://github.com/helm/helm/releases/download/${HELM_VERSION}/${FILENAME}.asc"
+
+        curl https://keybase.io/mattfarina/pgp_keys.asc | gpg --import
+        gpg --verify /tmp/helm/helm.tar.gz.asc /tmp/helm/helm.tar.gz
+
+        tar --directory="/tmp/helm" --strip-components=1 -zxvf /tmp/helm/helm.tar.gz "${PLATFORM}-${ARCH}"
+        # Overwrite the existing binary
+        sudo install -m 755 -t /usr/local/bin /tmp/helm/helm
+
+        helm version --short
+        echo "::endgroup::"
diff --git a/setup-tools/README.md b/setup-tools/README.md
new file mode 100644
index 0000000..6afb540
--- /dev/null
+++ b/setup-tools/README.md
@@ -0,0 +1,27 @@
+# `setup-tools`
+
+> Manifest: [setup-tools/action.yml][setup-tools]
+
+This action downloads and installs Stackable tools.
+
+## Inputs and Outputs
+
+> [!TIP]
+> For descriptions of the inputs and outputs, see the complete [setup-tools] action.
+
+### Inputs
+
+| Input                  | Required | Description                  |
+| ---------------------- | -------- | ---------------------------- |
+| `boil-version`         | No       | The version of boil*         |
+| `stackablectl-version` | No       | The version of stackablectl* |
+| `interu-version`       | No       | The version of interu*       |
+| `beku-version`         | No       | The version of beku*         |
+
+\* If no input is set, the tool won't be installed.
+
+### Outputs
+
+None.
+
+[setup-tools]: ./action.yaml
diff --git a/setup-tools/action.yaml b/setup-tools/action.yaml
new file mode 100644
index 0000000..284db5d
--- /dev/null
+++ b/setup-tools/action.yaml
@@ -0,0 +1,71 @@
+---
+name: Setup Stackable Tools
+description: This action sets up Stackable tools
+inputs:
+  boil-version:
+    description: The version of boil
+  stackablectl-version:
+    description: The version of stackablectl
+  interu-version:
+    description: The version of interu
+  beku-version:
+    description: The version of beku
+runs:
+  using: composite
+  steps:
+    - name: Install boil
+      if: inputs.boil-version
+      env:
+        BOIL_VERSION: ${{ inputs.boil-version }}
+        GITHUB_DEBUG: ${{ runner.debug }}
+      shell: bash
+      run: |
+        set -euo pipefail
+        [ -n "$GITHUB_DEBUG" ] && set -x
+
+        ARCH=$(uname -m)
+
+        curl -fsSL -o /tmp/boil "https://github.com/stackabletech/docker-images/releases/download/boil-${BOIL_VERSION}/boil-${ARCH}-unknown-linux-gnu"
+        sudo install -m 755 -t /usr/local/bin /tmp/boil
+
+    - name: Install stackablectl
+      if: inputs.stackablectl-version
+      env:
+        STACKABLECTL_VERSION: ${{ inputs.stackablectl-version }}
+        GITHUB_DEBUG: ${{ runner.debug }}
+      shell: bash
+      run: |
+        set -euo pipefail
+        [ -n "$GITHUB_DEBUG" ] && set -x
+
+        ARCH=$(uname -m)
+
+        curl -fsSL -o /tmp/stackablectl "https://github.com/stackabletech/stackable-cockpit/releases/download/stackablectl-${STACKABLECTL_VERSION}/stackablectl-${ARCH}-unknown-linux-gnu"
+        sudo install -m 755 -t /usr/local/bin /tmp/stackablectl
+
+    - name: Install interu
+      if: inputs.interu-version
+      env:
+        INTERU_VERSION: ${{ inputs.interu-version }}
+        GITHUB_DEBUG: ${{ runner.debug }}
+      shell: bash
+      run: |
+        set -euo pipefail
+        [ -n "$GITHUB_DEBUG" ] && set -x
+
+        ARCH=$(uname -m)
+
+        curl -fsSL -o /tmp/interu "https://github.com/stackabletech/actions/releases/download/interu-${INTERU_VERSION}/interu-${ARCH}-unknown-linux-gnu"
+        sudo install -m 755 -t /usr/local/bin /tmp/interu
+
+    - name: Install beku
+      if: inputs.beku-version
+      env:
+        BEKU_VERSION: ${{ inputs.beku-version }}
+        GITHUB_DEBUG: ${{ runner.debug }}
+      shell: bash
+      run: |
+        set -euo pipefail
+        [ -n "$GITHUB_DEBUG" ] && set -x
+
+        pip install "beku-stackabletech==$BEKU_VERSION"

From a27c2d301437a91361101476296c604957dfe5aa Mon Sep 17 00:00:00 2001
From: Techassi <git@techassi.dev>
Date: Tue, 26 Aug 2025 15:37:17 +0200
Subject: [PATCH 2/3] refactor(run-integration-test): Use new actions to
 install tools

---
 run-integration-test/action.yaml | 102 +++++--------------------------
 1 file changed, 16 insertions(+), 86 deletions(-)

diff --git a/run-integration-test/action.yaml b/run-integration-test/action.yaml
index 786cd25..611f6df 100644
--- a/run-integration-test/action.yaml
+++ b/run-integration-test/action.yaml
@@ -59,13 +59,16 @@ outputs:
 runs:
   using: composite
   steps:
+    - name: Install interu
+      uses: stackabletech/actions/setup-tools
+      with:
+        interu-version: ${{ inputs.interu-version }}
     - name: Extract Test and Instance Configuration
       env:
         TEST_MODE_INPUT: ${{ inputs.test-mode-input }}
         TEST_SUITE: ${{ inputs.test-suite }}
         TEST_MODE: ${{ inputs.test-mode }}
         TEST: ${{ inputs.test }}
-        INTERU_VERSION: ${{ inputs.interu-version }}
         GITHUB_DEBUG: ${{ runner.debug }}
         GITHUB_REPOSITORY: ${{ github.repository }}
         GITHUB_RUN_ID: ${{ github.run_id }}"
@@ -74,10 +77,6 @@ runs:
         set -euo pipefail
         [ -n "$GITHUB_DEBUG" ] && set -x
 
-        # Download interu
-        curl -fsSL -o /tmp/interu "https://github.com/stackabletech/actions/releases/download/interu-$INTERU_VERSION/interu-x86_64-unknown-linux-gnu"
-        sudo install -m 755 -t /usr/local/bin /tmp/interu
-
         # Generate the cluster name
         echo "KUBERNETES_CLUSTER_NAME=integration-test-${GITHUB_REPOSITORY}-${GITHUB_RUN_ID}" | tee -a "$GITHUB_ENV"
 
@@ -97,93 +96,24 @@ runs:
     # Install all tools BEFORE creating the cluster, because if some of the tools fail to download
     # and are therefore not available, there is no need to create the cluster or run the tests,
     # because the tests can never run in the first place.
-
-    # We technically don't need to install kubectl, kind or helm because it is already part of the installed
-    # tools of the runner image, but we at least install kubectl and helm explicitly, to be able to pin the versions.
-    # See https://github.com/actions/runner-images/blob/main/images/ubuntu/scripts/build/install-kubernetes-tools.sh
-    - name: Install kubectl
-      env:
-        KUBECTL_VERSION: ${{ inputs.kubectl-version }}
-        GITHUB_DEBUG: ${{ runner.debug }}
-      shell: bash
-      run: |
-        set -euo pipefail
-        [ -n "$GITHUB_DEBUG" ] && set -x
-
-        ARCH=$("$GITHUB_ACTION_PATH/../.scripts/actions/get_architecture.sh")
-
-        echo "::group::Install kubectl"
-        curl -fsSL -o /tmp/kubectl "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl"
-        # Overwrite the existing binary
-        sudo install -m 755 -t /usr/local/bin /tmp/kubectl
-
-        kubectl version --client
-        echo "::endgroup::"
-
-    - name: Install Helm
-      env:
-        HELM_VERSION: ${{ inputs.helm-version }}
-        GITHUB_DEBUG: ${{ runner.debug }}
-      shell: bash
-      run: |
-        set -euo pipefail
-        [ -n "$GITHUB_DEBUG" ] && set -x
-
-        PLATFORM=$("$GITHUB_ACTION_PATH/../.scripts/actions/get_platform.sh")
-        ARCH=$("$GITHUB_ACTION_PATH/../.scripts/actions/get_architecture.sh")
-
-        FILENAME="helm-${HELM_VERSION}-${PLATFORM}-${ARCH}.tar.gz"
-
-        echo "::group::Install helm"
-        mkdir /tmp/helm
-        curl -fsSL -o /tmp/helm/helm.tar.gz "https://get.helm.sh/${FILENAME}"
-        curl -fsSL -o /tmp/helm/helm.tar.gz.asc "https://github.com/helm/helm/releases/download/${HELM_VERSION}/${FILENAME}.asc"
-
-        curl https://keybase.io/mattfarina/pgp_keys.asc | gpg --import
-        gpg --verify /tmp/helm/helm.tar.gz.asc /tmp/helm/helm.tar.gz
-
-        tar --directory="/tmp/helm" --strip-components=1 -zxvf /tmp/helm/helm.tar.gz "${PLATFORM}-${ARCH}"
-        # Overwrite the existing binary
-        sudo install -m 755 -t /usr/local/bin /tmp/helm/helm
-
-        helm version --short
-        echo "::endgroup::"
-
-    - name: Install kubectl-kuttl
-      env:
-        KUTTL_VERSION: ${{ inputs.kuttl-version }}
-        GITHUB_DEBUG: ${{ runner.debug }}
-      shell: bash
-      run: |
-        set -euo pipefail
-        [ -n "$GITHUB_DEBUG" ] && set -x
-
-        curl -fsSL -o /tmp/kubectl-kuttl "https://github.com/kudobuilder/kuttl/releases/download/v$KUTTL_VERSION/kubectl-kuttl_${KUTTL_VERSION}_linux_x86_64"
-        sudo install -m 755 -t /usr/local/bin /tmp/kubectl-kuttl
+    - name: Install kubectl, kubectl-kuttl, and helm
+      uses: stackablectl/actions/setup-k8s-tools
+      with:
+        kubectl-version: ${{ inputs.kubectl-version }}
+        kuttl-version: ${{ inputs.kuttl-version }}
+        helm-version: ${{ inputs.helm-version }}
 
     # Python3 is already installed, if we ever need to specify the version, we can use the
     # setup-python action.
     # See https://github.com/actions/runner-images/blob/main/images/ubuntu/scripts/build/install-python.sh
-    - name: Install beku
-      env:
-        BEKU_VERSION: ${{ inputs.beku-version }}
-      shell: bash
-      run: |
-        set -euo pipefail
-        pip install "beku-stackabletech==$BEKU_VERSION"
-
+    #
     # mikefarah/yq is already installed on the runner
     # See https://github.com/actions/runner-images/blob/main/images/ubuntu/scripts/build/install-yq.sh
-
-    - name: Install stackablectl
-      env:
-        STACKABLECTL_VERSION: ${{ inputs.stackablectl-version }}
-      shell: bash
-      run: |
-        set -euo pipefail
-
-        curl -fsSL -o /tmp/stackablectl "https://github.com/stackabletech/stackable-cockpit/releases/download/stackablectl-$STACKABLECTL_VERSION/stackablectl-x86_64-unknown-linux-gnu"
-        sudo install -m 755 -t /usr/local/bin /tmp/stackablectl
+    - name: Install stackablectl and beku
+      uses: stackabletech/actions/setup-tools
+      with:
+        stackablectl-version: ${{ inputs.stackablectl-version }}
+        beku-version: ${{ inputs.beku-version }}
 
     - name: Install apt packages
       shell: bash

From 43291804bba5d06a58efe83249ddc816a0e2a6d5 Mon Sep 17 00:00:00 2001
From: Techassi <git@techassi.dev>
Date: Tue, 26 Aug 2025 15:48:33 +0200
Subject: [PATCH 3/3] chore: Rename smoke build workflow

---
 .../workflows/{pr_actions-smoke-test.yml => smoke-build.yaml} | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
 rename .github/workflows/{pr_actions-smoke-test.yml => smoke-build.yaml} (98%)

diff --git a/.github/workflows/pr_actions-smoke-test.yml b/.github/workflows/smoke-build.yaml
similarity index 98%
rename from .github/workflows/pr_actions-smoke-test.yml
rename to .github/workflows/smoke-build.yaml
index 0f616dc..9a4916f 100644
--- a/.github/workflows/pr_actions-smoke-test.yml
+++ b/.github/workflows/smoke-build.yaml
@@ -1,11 +1,11 @@
 ---
-name: actions-smoke-test
+name: smoke-build
 
 on:
   workflow_dispatch:
   pull_request:
     paths:
-      - .github/workflows/pr_actions-smoke-test.yml
+      - .github/workflows/smoke-build.yaml
       - build-container-image/action.yaml
       - build-product-image/action.yaml
       - free-disk-space/action.yaml
