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
A release has three addresses and there are now three names for them, told apart by what re-points each one. {{url_revision "site"}} names one revision and is never re-pointed; {{url_stage "site"}} names the label, so it is the side this release staged and what a gate should test; {{url_public "site"}} — spelled {{url}} for short — follows the traffic weights and is what survives the release. The public one is read while planning from what Terraform declared, an ingress hostname or a service URI, at no extra API call, and it is what a hook registering a federated subgraph or a webhook actually wants: those write an address down for something else to read later, and later is after the labels have swapped again. url_stage and url_revision are refused in a hook for that reason, and url_revision is refused on Cloud Run and ECS because a revision has no address of its own there — a refusal naming url_stage, not a quiet fallback to it. A target with no address at all is named in the refusal rather than resolving to an empty string.
Changed
{{url "svc"}} now means the address that survives the release rather than the staged side, and inside strategy.smoke it is refused rather than quietly re-pointed. That refusal is the whole point: resolved silently, every existing smoke block would keep rendering, keep passing, and start testing the version the release is replacing — green, with nothing behind it. A smoke block now has to say which address it means, and the refusal offers both: {{url_stage "svc"}} for the side this release staged, {{url_public "svc"}} for the one still serving the old version. It fails at plan time, so nothing deploys before the config is corrected, and outside a smoke block nothing changes: url never worked in a hook at all.