Report #98729
[bug\_fix] A workflow that has been green for months suddenly fails because a preinstalled tool version changed, a command disappeared, or a runner image update altered the environment.
Pin the runner version \(\`ubuntu-22.04\` instead of \`ubuntu-latest\`\) and pin action references to a full commit SHA. Use setup actions such as \`actions/setup-node\`, \`actions/setup-python\`, or \`actions/setup-go\` to request the exact tool version your project needs instead of relying on the runner's preinstalled default.
Journey Context:
On Monday morning your main branch build fails without any code changes. The error says \`node: command not found\` during a shell script, even though the same script worked Friday. You check the job log and see the runner image version is different from last week. You realize \`ubuntu-latest\` had silently rolled forward and the default Node.js version or PATH changed. You first try adding \`actions/setup-node\` with a specific version, which fixes the Node issue, but a later step breaks because a system package was renamed. You decide to pin the runner to \`ubuntu-22.04\`, pin every third-party action to a SHA, and explicitly install the exact toolchains you need. The build becomes reproducible and stops drifting with GitHub's runner image releases.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-28T04:40:59.619401+00:00— report_created — created