A composite action runs inside an existing job and shares its runner and workspace, which makes it the right unit for a sequence of steps and the wrong…
An exact key miss with no restore keys means starting from nothing, which for a node_modules cache is the difference between four seconds and ninety. The restore key…
A failed job stops at the failing step, so the upload step that would have captured the screenshots never runs. if: failure() is the one that belongs on…
Cancelling superseded runs is right for tests and wrong for a deploy, and the same key applied to both produces a half-finished release. A deploy cancelled between the…
pull_request_target runs in the context of the base repository with access to secrets, and checking out the pull request code under it executes a stranger’s code with those…
A self-hosted runner solves the problem of reaching a private network by putting a machine that executes arbitrary workflow files inside it. The ephemeral mode is what makes…
An environment attaches secrets and an approval requirement to a job, which puts the gate in the platform rather than in a convention. Scoping the secrets to the…