Skip to main content

Release workflows

Every code change passes through the same eight stages, in the same order, with the same evidence. The workflow is the release process model; the tooling that implements it varies by customer.

The standard. A defined release process model that every code change follows, from local checks to post-deployment review.

Tooling​

Qbits selects CI/CD tools to fit the customer's stack. Where there is no existing constraint, the default toolchain is:

FunctionDefaultAlternatives
Version controlGitHubGitLab, Bitbucket
Continuous integrationGitHub ActionsJenkins, GitLab CI
Continuous deliveryGitHub ActionsJenkins, AWS CodePipeline
Infrastructure as codeTerraformCloudFormation, CDK
Configuration managementAnsibleChef, Puppet
Static analysis (SAST)SonarQubeSnyk, CodeQL
Dynamic analysis (DAST)OWASP ZAPBurp, Invicti
Load and performanceArtilleryk6, JMeter
Container registryAmazon ECRDocker Hub, GHCR

Tools with large communities are preferred because the customer inherits a sustained stream of updates and security patches rather than depending on a single vendor's support window.

The eight stages​

  1. Local development Formatting, linting, unit tests, local build and a pre-commit secret scan. Nothing untested or non-compliant is pushed.

  2. Source The change is a reviewed pull request against a protected branch. Required checks must pass before merge.

  3. Automated test Unit tests re-run, static analysis, dependency and secret scanning, compliance checks. A failure returns the change to development with feedback.

  4. Build Compile and package into a deployable artefact — container image, binary, or AMI. Dependencies are pinned. The artefact is stored in a registry and tagged immutably.

  5. Deploy to staging The artefact — not a rebuild — is deployed to an environment that matches production. Health checks and smoke tests run automatically.

  6. Manual test Load testing at expected peak, performance benchmarking against targets, resilience testing, and dynamic security testing from an external perspective.

  7. Deploy to production Progressive deployment with health-gated traffic shifting. Rollback is triggered by metrics, not by someone noticing.

  8. Post-deployment review Compare observed performance against forecast, review errors and alerts, record what should change in the next release.

Stage detail​

1. Local development​

CheckToolBlocking
FormatLanguage formatterYes, via pre-commit
LintLanguage linterYes
Unit testsTest frameworkYes
Local buildBuild toolYes
Secret scangitleaks / trufflehogYes
SASTSonarQube (local or IDE)Advisory

2. Source​

The pull request is the unit of change. It carries the description, the linked ticket, the test evidence and the review record. Branch protection ensures the checks are not optional.

See Repository and branching.

3. Automated test​

Runs on every push and every pull request.

  • Unit tests with coverage reporting.
  • Static analysis on changed code, and full-project on merge to a protected branch.
  • Dependency vulnerability scan (SCA).
  • Secret scan across the full history on first adoption, then on every change.
  • License compliance where the customer requires it.

4. Build​

The build produces one artefact per commit and promotes that artefact through environments. Rebuilding between environments introduces a difference between what was tested and what was deployed.

commit → image:<git-sha> → staging → production

The image is tagged with the commit SHA and, on release, a semantic version. Tags are immutable; a published tag is never reused.

5. Deploy to staging​

Staging is production-shaped: same instance classes, same network topology, same managed-service versions. A staging environment that differs from production tests the difference, not the change.

6. Manual test​

TestPurposePass criterion
LoadVerify behaviour at expected peakp95 within target, error rate below threshold
SoakVerify behaviour over sustained loadNo memory growth, no connection exhaustion
ResilienceVerify behaviour when a dependency failsDegrades gracefully, recovers automatically
DASTVerify external attack surfaceNo high or critical findings
UATVerify business behaviourCustomer sign-off against acceptance criteria

7. Deploy to production​

Strategy is chosen from Deployment strategies. Whatever the strategy, three properties are required:

  1. Health-gated. Traffic shifts only after the new version passes health checks.
  2. Observable. The deployment is visible in a dashboard during the change.
  3. Reversible. Rollback is a defined action with a target time, not an improvisation.

8. Post-deployment review​

Within one working day:

  • Did error rate, latency and saturation match the forecast?
  • Did any alarm fire, and was it actionable?
  • Did the deployment take as long as expected?
  • What should be automated or removed before the next release?

Metrics​

The workflow is measured, not assumed:

MetricDefinition
Deployment frequencyProduction deployments per week
Lead time for changeCommit to production
Change failure rateDeployments requiring rollback or hotfix
Mean time to restoreIncident detection to service restored
Pipeline durationCommit to deployable artefact

Teaching the model​

The release model is transferred, not just operated. For each customer we run a working session that covers:

  1. The eight stages and the evidence each produces.
  2. How to design a release model for their own application — artefact strategy, environment topology, promotion gates.
  3. How to write the pipeline for their stack, using their repository.
  4. How to read the pipeline when it fails, and how to change the model safely.

The output is a pipeline the customer's team owns and can modify without us.