Preskoči na sadržaj

Consumer Make — consumer.mk + Makefile.generated.mk

TL;DR

Consumer repo uključuje ci/make/consumer.mk (-include, ne-fatal). On dodaje make gen (regeneracija Makefile.generated.mk) + prošireni help parser. Makefile.generated.mk je čist output ci/json/services_to_makefile.pynikad se ne edit ručno.

Tri fajla u consumer-u

consumer repo/
├── Makefile                  # korisnikov, sa -include consumer.mk
├── Makefile.local.mk         # opcioni custom targeti
├── ci/make/consumer.mk       # download-ovan u pipeline (NE commit)
└── Makefile.generated.mk     # regenerisan, gitignored

Šta consumer.mk dodaje

  1. make gen — regeneriše Makefile.generated.mk iz services.json.
  2. Prošireni help — podržava oba konvencije:
  3. inline target: ## desc (ručno pisani targeti)
  4. above-target ## desc + .PHONY: target + target: (generisani) Override-uje consumer-ov help (last-definition-wins).
  5. -include Makefile.generated.mk — donosi generisane targete.
  6. Auto-regen prereqMakefile.generated.mk: services.json $(GEN_SCRIPT) + make re-exec mehanizam. Operator NE treba ručno make gen; kada se services.json promijeni, make <generated-target> automatski regeneriše.

ENV derivation (Bitbucket deployment → ENV)

ENV ?= $(shell python3 -c '... logical_env_from_label ...' 2>/dev/null)
  • Bitbucket deployment step sa deployment: api-production → ENV=production automatski.
  • Flat build step sa SENTRY_RELEASE_ENV=staging → ENV=staging automatski.
  • Local operatorENV=staging make mobile-deploy.

Tri genera globalnih targeta (priority)

  1. Helper utilities (ci-ruff, ci-bandit-scan, ...) — definirani u ci/make/consumer.mk. Statični.
  2. State reads (state-image-tag, state-release-mode, ...) — generisani. Čitaju ci-state.json polje po imenu.
  3. Per-service + global verb targets (bible-bump, mobile-staging, ...) — generisani iz services.json.

Custom wrapper-i (gdje su OK)

Consumer repo MOŽE imati vlastite ci-* wrapper targete u svom Makefile / Makefile.local.mk. Ali samo za:

  • Bitbucket fan-out (parallel-step coordination).
  • Output-variable export.
  • Artifact filename shims.
  • Consumer-specific test harnesses.

NE za redoslijed build/deploy/notify — to je već generisano.

Anti-patterns

  • ❌ Ručno editovanje Makefile.generated.mk — pregazeno na sljedećem make gen.
  • ❌ Dodavanje globalnih targeta u consumer.mk — taj fajl je intentionally minimal (gen + help).
  • ❌ Korištenje make bible-bump bez ENV= u deployment step-u — ENV se već izvodi; ručni override samo ako namjerno.
  • ❌ Korištenje underscore u imenu targeta (bible_bump) — konvencija je hyphen.

Vidi i