Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/workflows/helm-ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,30 @@ jobs:
> /dev/null
echo "Schema validation passed for ${{ matrix.platform }}"

ingestor-multiarch:
# Guard: the chart's PINNED ingestor digest must be a multi-arch index
# (linux/amd64 + linux/arm64). Greenfield installs spawn the ingestor from this
# pinned digest (before image-refresh ticks), so an amd64-only pin breaks data
# ingestion on arm64 hosts (Apple Silicon, Graviton) with ImagePullBackOff. This
# would have caught #160 (which pinned the amd64-only v0.3.1). See client#186.
name: Pinned ingestor digest is multi-arch
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Assert images.ingestor.digest supports linux/amd64 + linux/arm64
run: |
digest=$(yq '.images.ingestor.digest' client/values.yaml)
echo "Pinned ingestor digest: $digest"
if [ -z "$digest" ] || [ "$digest" = "null" ]; then
echo "::error::images.ingestor.digest is empty — it must be a pinned multi-arch digest."; exit 1
fi
plats=$(docker buildx imagetools inspect "ghcr.io/tracebloc/ingestor@$digest" 2>&1 \
| awk '/Platform:/{print $2}' | grep -v '^unknown' | sort -u)
echo "Platforms: $(echo "$plats" | paste -sd' ' -)"
echo "$plats" | grep -qx 'linux/arm64' || { echo "::error::Pinned ingestor digest is NOT multi-arch (no linux/arm64). arm64 installs (Apple Silicon, Graviton) would fail ingestion with 'no match for platform' / ImagePullBackOff. Pin a multi-arch :0.x index. See client#186 / #160."; exit 1; }
echo "$plats" | grep -qx 'linux/amd64' || { echo "::error::Pinned ingestor digest is missing linux/amd64."; exit 1; }
echo "OK — pinned ingestor digest is multi-arch (amd64 + arm64)."

# Installer script tests (bats + Pester) + the cross-distro prerequisite matrix
# live in their own workflow: .github/workflows/installer-tests.yaml
# (triggered on scripts/** changes).
7 changes: 7 additions & 0 deletions client/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,13 @@ images:
# first multi-arch image (amd64 + arm64, #24) so arm64 nodes can run
# the ingestor. Bump only when greenfield installs should start on a
# different version; ongoing rollouts are managed by image-refresh.
#
# This digest MUST be a multi-arch index (linux/amd64 + linux/arm64).
# jobs-manager spawns the ingestor Job by this pinned digest, so an
# amd64-only pin breaks ingestion on arm64 hosts (Apple Silicon,
# Graviton) with "no match for platform" / ImagePullBackOff (#186; the
# amd64-only v0.3.1 pin in #160 was the regression). Enforced by the
# `ingestor-multiarch` job in .github/workflows/helm-ci.yaml.
digest: "sha256:d361fa778554ab171adcc2671eaf109c32f3d2af339c7920a2d38d102ce53678"
# Floating tag polled by image-refresh. The team's ghcr.io
# publishing convention uses semver-style float tags — `0` tracks
Expand Down
Loading