2.8 KiB
ADR-0002: Branch Name as the Sole Environment Selector
Status: Accepted Category: PATTERN Date decided: Project inception Date documented: 2026-05-12
Context
Each Meesho service needs to deploy to different environments (staging, production, integration, feature). A naive approach would let each service declare its target environment in config, but this creates a risk: a misconfigured service could accidentally deploy to production from a feature branch, or fail to promote through the standard develop → stg → main → prd path.
Decision
cicd_environment is derived entirely and deterministically from the branch name. No per-service environment configuration exists. The mapping is:
| Branch | PR target | cicd_environment |
|---|---|---|
main / master / gcp-main |
— | prd |
develop |
— | stg |
| any | main |
int |
| any | develop |
ftr |
hotfix/* |
— | prd (sonar + tests skipped) |
Alternatives Considered
- Per-service environment configuration: Rejected because it creates a class of misconfiguration bugs (wrong env in config.yaml → wrong deploy target) and makes it impossible to enforce the standard branch promotion strategy uniformly.
- Environment as a Jenkins parameter: Rejected because it relies on the engineer picking the right environment at trigger time — error-prone and not auditable.
Consequences
Positive:
- Services cannot accidentally deploy to prd from a feature branch — the branch IS the environment contract.
- Standard develop → stg → main → prd promotion is enforced uniformly across all services.
- Environment logic lives in one place (
constructParam.groovy) — easy to audit and change centrally.
Negative:
- Teams with non-standard branch strategies (e.g., release/* branches) cannot use the standard pipeline without DevOps involvement.
- The hotfix path (prd with sonar skipped) requires following the
hotfix/*naming convention exactly.
Neutral:
- The
intandftrenvironments are determined by PR target, not branch name — this is the one case where branch name alone is insufficient.
Constraints
Meesho's deployment policy required a standard promotion path. Allowing per-service environment configuration would have made it impossible to enforce this uniformly across 100+ services.
Current Assessment
Still appropriate — no changes needed.
Related Decisions
- ADR-0001: Single Shared Library — The shared library enforces this mapping; per-service Jenkinsfiles could override it.
Notes
- Key file:
src/com/meesho/utilities/constructParam.groovy— environment mapping logic - PR context is detected via
env.CHANGE_ID(set by GitHub Branch Source plugin), not byenv.BRANCH_NAME =~ /PR-/