1414
1515name : E2E Tests
1616
17+ # This workflow runs end-to-end tests on both AMD64 and ARM64 architectures in parallel
18+ # to ensure compatibility across different hardware platforms.
19+ #
20+ # Configuration:
21+ # - Set RUNNER_ARCH_LARGE_AMD64 variable to override default AMD64 runner
22+ # - Set RUNNER_ARCH_LARGE_ARM64 variable to override default ARM64 runner
23+ # - Each architecture gets its own isolated cluster and test artifacts
24+
1725on :
1826 push :
1927 branches :
4048 uses : ./.github/workflows/prepare-environment.yml
4149
4250 e2e-test :
43- runs-on : linux-amd64-cpu32
51+ # Run E2E tests on both AMD64 and ARM64 architectures in parallel
52+ strategy :
53+ fail-fast : false # Allow both architectures to complete even if one fails
54+ matrix :
55+ include :
56+ - arch : amd64
57+ runner : ${{ vars.RUNNER_ARCH_LARGE_AMD64 || 'linux-amd64-cpu32' }}
58+ arch_name : " AMD64"
59+ - arch : arm64
60+ runner : ${{ vars.RUNNER_ARCH_LARGE_ARM64 || 'linux-arm64-cpu32' }}
61+ arch_name : " ARM64"
62+
63+ name : " E2E Tests (${{ matrix.arch_name }})"
64+ runs-on : ${{ matrix.runner }}
4465 timeout-minutes : 90
4566 needs : prepare-environment
4667 steps :
@@ -100,9 +121,18 @@ jobs:
100121 /usr/local/bin/kind
101122 /usr/local/bin/kubectl
102123 /usr/local/bin/tilt
103- key : ${{ runner.os }}-e2e-tools-${{ env.KIND_VERSION }}-${{ env.CTLPTL_VERSION }}-${{ env.TILT_VERSION }}
124+ key : ${{ runner.os }}-${{ runner.arch }}- e2e-tools-${{ env.KIND_VERSION }}-${{ env.CTLPTL_VERSION }}-${{ env.TILT_VERSION }}
104125 restore-keys : |
105- ${{ runner.os }}-e2e-tools-
126+ ${{ runner.os }}-${{ runner.arch }}-e2e-tools-
127+
128+ - name : Detect runner architecture
129+ run : |
130+ echo "Matrix configuration: ${{ matrix.arch_name }} (${{ matrix.arch }})"
131+ echo "Runner: ${{ matrix.runner }}"
132+ echo "Runner OS: ${{ runner.os }}"
133+ echo "Runner architecture: ${{ runner.arch }}"
134+ echo "System architecture (uname -m): $(uname -m)"
135+ echo "Cache key will be: ${{ runner.os }}-${{ runner.arch }}-e2e-tools-${{ env.KIND_VERSION }}-${{ env.CTLPTL_VERSION }}-${{ env.TILT_VERSION }}"
106136
107137 - name : Install E2E testing tools
108138 run : |
@@ -112,7 +142,8 @@ jobs:
112142 echo "ctlptl v${CTLPTL_VERSION} already installed from cache"
113143 else
114144 echo "Installing ctlptl v${CTLPTL_VERSION}..."
115- curl -fsSL https://github.com/tilt-dev/ctlptl/releases/download/v${CTLPTL_VERSION}/ctlptl.${CTLPTL_VERSION}.linux.x86_64.tar.gz | sudo tar -xzv -C /usr/local/bin ctlptl
145+ ARCH=$(case $(uname -m) in x86_64) echo x86_64;; aarch64|arm64) echo arm64;; *) echo $(uname -m);; esac)
146+ curl -fsSL https://github.com/tilt-dev/ctlptl/releases/download/v${CTLPTL_VERSION}/ctlptl.${CTLPTL_VERSION}.linux.${ARCH}.tar.gz | sudo tar -xzv -C /usr/local/bin ctlptl
116147 fi
117148
118149 # Install Kind (if not cached)
@@ -121,7 +152,8 @@ jobs:
121152 echo "Kind v${KIND_VERSION} already installed from cache"
122153 else
123154 echo "Installing Kind v${KIND_VERSION}..."
124- curl -Lo ./kind https://kind.sigs.k8s.io/dl/v${KIND_VERSION}/kind-linux-amd64
155+ ARCH=$(case $(uname -m) in x86_64) echo amd64;; aarch64|arm64) echo arm64;; *) echo $(uname -m);; esac)
156+ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v${KIND_VERSION}/kind-linux-${ARCH}
125157 chmod +x ./kind
126158 sudo mv ./kind /usr/local/bin/kind
127159 fi
@@ -131,7 +163,8 @@ jobs:
131163 echo "kubectl already installed from cache"
132164 else
133165 echo "Installing kubectl..."
134- curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
166+ ARCH=$(case $(uname -m) in x86_64) echo amd64;; aarch64|arm64) echo arm64;; *) echo $(uname -m);; esac)
167+ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl"
135168 chmod +x kubectl
136169 sudo mv ./kubectl /usr/local/bin/kubectl
137170 fi
@@ -142,8 +175,9 @@ jobs:
142175 echo "Tilt v${TILT_VERSION} already installed from cache"
143176 else
144177 echo "Installing Tilt v${TILT_VERSION}..."
178+ ARCH=$(case $(uname -m) in x86_64) echo x86_64;; aarch64|arm64) echo arm64;; *) echo $(uname -m);; esac)
145179 TEMP_DIR=$(mktemp -d)
146- curl -fsSL https://github.com/tilt-dev/tilt/releases/download/v${TILT_VERSION}/tilt.${TILT_VERSION}.linux.x86_64 .tar.gz | tar -xzv -C "$TEMP_DIR" tilt
180+ curl -fsSL https://github.com/tilt-dev/tilt/releases/download/v${TILT_VERSION}/tilt.${TILT_VERSION}.linux.${ARCH} .tar.gz | tar -xzv -C "$TEMP_DIR" tilt
147181 sudo mv "$TEMP_DIR/tilt" /usr/local/bin/
148182 rm -rf "$TEMP_DIR"
149183 fi
@@ -174,6 +208,8 @@ jobs:
174208 NVCR_CONTAINER_REPO : ${{ needs.prepare-environment.outputs.nvcr_container_repo }}
175209 NGC_ORG : ${{ needs.prepare-environment.outputs.container_org }}
176210 CTLPTL_YAML : ctlptl-config.yaml
211+ # Make cluster names unique per architecture to avoid conflicts in parallel runs
212+ CLUSTER_NAME_SUFFIX : " -${{ matrix.arch }}"
177213 run : |
178214 make cluster-create
179215
@@ -183,13 +219,15 @@ jobs:
183219 NVCR_CONTAINER_REPO : ${{ needs.prepare-environment.outputs.nvcr_container_repo }}
184220 NGC_ORG : ${{ needs.prepare-environment.outputs.container_org }}
185221 CTLPTL_YAML : ctlptl-config.yaml
222+ # Use same cluster name suffix for consistency
223+ CLUSTER_NAME_SUFFIX : " -${{ matrix.arch }}"
186224 run : |
187225 make e2e-test-ci
188226
189227 - name : Upload test results
190228 uses : ./.github/actions/upload-test-artifacts
191229 with :
192- component-name : e2e-test
230+ component-name : e2e-test-${{ matrix.arch }}
193231 file-paths : |
194232 tests/results/
195233 tests/*.log
0 commit comments