I walk a single build through three environments, printing each one's database and auth level to show one build producing three different deployments.
print("Staging and environments")
deployments = {
"test": "test database, no auth",
"staging": "staging database, fake auth",
"production": "production database, real auth",
}
for e in ["test", "staging", "production"]:
print("Deploy to %s -> %s" % (e, deployments[e]))
Before you run it, say out loud what it will print. Then open the answer.
What it prints
Staging and environments
Deploy to test -> test database, no auth
Deploy to staging -> staging database, fake auth
Deploy to production -> production database, real auth
Staging should look exactly like production. A bug that staging cannot reproduce will almost always reach real users, which is exactly what the staging gate exists to prevent.