A release gate is a repeatable check tied to behavior the application promises. Static analysis and a build catch syntax and bundling faults; content checks catch broken internal routes; contract tests catch wrong status or persistence behavior. A small browser journey can verify keyboard submission and visible errors. The deployment process should refuse a candidate when a required gate fails, then run a read-only smoke check after release. Do not make a green pipeline the only proof of quality: production traffic, configuration, and data may differ from CI.
Continuous Integration and Release Gates
Working case
A new case lesson links to a route that does not exist. The content checker fails before the site bundle is produced. A server change that turns an unauthorized write into a 200 fails a contract test. A candidate that passes both can be deployed to a staging environment for a keyboard form check, then promoted. Immediately after production deployment, a read-only probe checks the case page and API. If that probe fails, rollout stops and the previous compatible version is restored. Each gate reports the failing contract instead of a vague 'pipeline red' message.
Implementation
set -euo pipefail
npm ci
python3 scripts/check-web-development-content.py
npm run build
# Run isolated API and browser contract suites before promotion.Cost and boundaries
Every gate consumes runtime, so order cheap deterministic checks before expensive browser work. A build's complexity depends on source and dependency graph size; integration tests add database setup and network time. Cache dependencies carefully without caching away the actual test result. Flaky tests impose a hidden cost because people learn to ignore failures; isolate data, fix race conditions, and keep critical gates trustworthy. A parallel pipeline can reduce wall time while preserving clear failure attribution.
Common Mistakes
- Do not bypass a required gate to make a release look green.
- Do not let tests write into live customer data.
- Do not treat a passing local build as proof of the deployed route.
Connected lessons
Deployment and Scale; Environment Configuration and Secret Boundaries; Horizontal Scale and Shared State; Backup and Restore Drills; Release checks: prove the critical route and prepare a rollback; Observability: connect user failure to a safe request trace; DevOps: delivery, infrastructure, and reliable operations.
Failure trace
The pipeline reports green after unit tests, but the release serves a broken deep link because no check requests a nested route. Another change alters the database schema before the old app instances have drained. Add a small set of release gates that match real failure paths: build, contract tests, migration compatibility, direct-route smoke checks, and rollback readiness.
Verification
- Run a production build and request a nested route as a fresh visitor.
- Deploy new and old app versions against the intermediate schema in a staging drill.
- Force one smoke check to fail and verify the release stops or rolls back as designed.
Decision note
A gate should catch a defined failure quickly enough to remain useful. Avoid a huge suite that no one trusts; keep the small critical path deterministic and investigate flaky checks as defects.
Apply and check
Build Project: release and recovery drill for a content service; then check the boundary with Web Development: offline and delivery contracts quiz.
Further connections
Dependency Integrity and Update Window.
Further connections
Frontend Build and Artifact Integrity; Artifact Manifest, Rollout, and Rollback Coherence.
