Skip to content

feat(LinuxTentacleE2E): Phase 12.M.L.A.6 — install-tentacle.sh latest-version path E2E

Summary

Pins the documented operator one-liner default:

curl -fsSL .../install-tentacle.sh | sudo bash

No --version → VERSION defaults to "latest" → .sh uses a DIFFERENT URL form than --version X.Y.Z:

${DOWNLOAD_BASE}/latest/download/${BINARY_NAME}-${RID}.tar.gz

Single URL attempt, no v-prefix retry. This pattern matches GitHub's /releases/latest/download/ redirect.

Why critical

This is THE most-used install path in fleet bootstrap automation (cloud-init / Ansible / Salt). The tagged-version path is for reproducibility-sensitive operators; the LATEST path is "give me whatever's current".

Why not covered by J.M.L.A.2 (--version 1.6.0)

Aspect --version 1.6.0 (J.M.L.A.2) --version latest (this PR)
URL pattern /download/${VERSION}/ /latest/download/
Retry logic plain + v-prefix retry single attempt
Optimistic APT/RPM skipped triggered (when NO_PKG_INSTALL!=1)

Different code branch — needs its own pin.

Regressions this prevents

  • VERSION default changes from "latest" → fleet bootstrap suddenly requires --version arg (deployment automation breaks)
  • Latest URL pattern changes (e.g. /latest/download/ → /releases/latest/) → air-gap mirror compatibility breaks
  • VERSION=latest accidentally falls through to the tagged-version URL branch → wrong URL pattern attempted

Assertions

Assertion Pins
exitCode == 0 Latest path completes successfully
stdout contains "/latest/download/squid-tentacle-" Latest URL pattern unchanged
stdout does NOT contain "retrying with 'v..." No v-prefix retry on latest (single-attempt contract)
stdout contains "Installation Complete" Success banner is path-agnostic
INSTALL_DIR/Squid.Tentacle exists Binary installed via latest URL
/usr/local/bin/squid-tentacle symlink exists Post-extract steps ran same way as tagged-version paths

Fidelity tier

🟢 High (Rule 12.4): real .sh + real bash + real curl + real LocalReleaseMirror. Reuses J.M.L.A.2's fixture + tarball builder; only the version arg differs.

Test class is in LinuxTentacleHostStateCollection (serializes against upgrade + service-fixture tests).

Expected runtime: ~1-2s.

Test plan

  • Linux E2E workflow runs (manual workflow_dispatch after merge)
  • A1hDefault_LatestVersion_DownloadsViaLatestUrlPattern passes within ~5s
  • No regression on existing 25 Linux E2E tests

🤖 Generated with Claude Code

Merge request reports

Loading