You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
--ephemeral flag. Runner processes exactly one job and exits. Eliminates the "stale runner picks up an unintended job" class of bug. GitHub auto-deregisters — the stop-runner step's config.sh remove call becomes redundant (keep it as belt-and-braces for the EC2-termination path).
Configurable RUNNER_VERSION. New optional action input runner-version defaulting to the pinned-in-source value (2.333.1). Consumers can override for canary testing without cutting a new action release.
Checksum verification of the runner tarball — same pattern landed in terraform-provider-namecheap#160 for Go/Terraform downloads.
set -euo pipefail throughout so a silent useradd or tar failure kills the bootstrap instead of proceeding to ./run.sh against a broken install.
--disableupdate keeps the runner binary stable during the short-lived ephemeral session.
Compatibility impact on consumers (specifically terraform-provider-namecheap)
make testacc is plain go test. No root required.
Setup steps in the provider's acceptance_test job write to the workspace (.go-instance/, .terraform-bin/, go-env.sh). All workspace-local. No root required.
actions/checkout@v6 writes to the workspace. No root required.
Any Docker / containerd / iptables / sysctl changes in a consumer workflow would break. None in the provider repo today.
This is the phase with the highest compatibility risk. Recommendation: land it on a branch and dogfood-test on terraform-provider-namecheap by rotating the SHA pin on a throwaway branch before merging to feat/al2023-support.
Acceptance criteria
Bootstrap user-data creates a dedicated runner user; runner never runs as root.
--ephemeral passed to config.sh; stale-runner behavior cannot occur.
New runner-version input (optional, defaults to current pin) lets consumers override.
Runner tarball checksum verified before extraction.
README.md notes the non-root constraint; any consumer script that relied on root is called out.
Dogfood test: rotate SHA pin in terraform-provider-namecheap on a throwaway branch; full acctest cycle (start → acceptance → stop) passes end-to-end.
Part of plan #15. Phase 4 — Runner Bootstrap Hardening.
Problems with current bootstrap (
src/aws.js)config.shfails (expired token, network block), the EC2 instance stays up burning cost.Target bootstrap
Changes proposed
runneruser. DropsRUNNER_ALLOW_RUNASROOT=1.--ephemeralflag. Runner processes exactly one job and exits. Eliminates the "stale runner picks up an unintended job" class of bug. GitHub auto-deregisters — thestop-runnerstep'sconfig.sh removecall becomes redundant (keep it as belt-and-braces for the EC2-termination path).RUNNER_VERSION. New optional action inputrunner-versiondefaulting to the pinned-in-source value (2.333.1). Consumers can override for canary testing without cutting a new action release.terraform-provider-namecheap#160for Go/Terraform downloads.set -euo pipefailthroughout so a silentuseraddortarfailure kills the bootstrap instead of proceeding to./run.shagainst a broken install.--disableupdatekeeps the runner binary stable during the short-lived ephemeral session.Compatibility impact on consumers (specifically
terraform-provider-namecheap)make testaccis plaingo test. No root required.acceptance_testjob write to the workspace (.go-instance/,.terraform-bin/,go-env.sh). All workspace-local. No root required.actions/checkout@v6writes to the workspace. No root required.This is the phase with the highest compatibility risk. Recommendation: land it on a branch and dogfood-test on
terraform-provider-namecheapby rotating the SHA pin on a throwaway branch before merging tofeat/al2023-support.Acceptance criteria
runneruser; runner never runs as root.--ephemeralpassed toconfig.sh; stale-runner behavior cannot occur.runner-versioninput (optional, defaults to current pin) lets consumers override.README.mdnotes the non-root constraint; any consumer script that relied on root is called out.terraform-provider-namecheapon a throwaway branch; full acctest cycle (start → acceptance → stop) passes end-to-end.