Skip to content

Makefile Reference

All commands run from the Quickstart/ directory.


Required Repositories per Target

Clone all repos into the same root folder before running any make command. Docker Compose resolves each service's build context relative to Quickstart/, so a missing repo fails the whole command — even for services that don't depend on it.

Target Command Repos Required
base make base Quickstart, AuthAPI, CoreAPI
noauths make noauths Quickstart, PlayoutAdmin
media make media Quickstart, PlayoutAdmin
coreapi make coreapi Quickstart, AuthAPI, CoreAPI, TellyID
tellyid make tellyid Quickstart, AuthAPI, TellyID
oc make oc Quickstart, AuthAPI, CoreAPI, TellyID, OrgConsole
pc make pc Quickstart, AuthAPI, CoreAPI, TellyID, PlatformConsole
console make console Quickstart, AuthAPI, CoreAPI, TellyID, OrgConsole, PlatformConsole
malaysia make malaysia Quickstart, AuthAPI, CoreAPI, TellyID, SpatioAdmin, TicketCMS
spatio make spatio Quickstart, AuthAPI, CoreAPI, TellyID, TicketCMS, TicketAdmin
playout make playout Quickstart, AuthAPI, CoreAPI, TellyID, PlayoutAdmin
demo5 make demo5 Quickstart, CoreAPI, PlayoutAdmin, TellyboardAdmin, AuthAPI, TellyID, documentation
tkt make tkt Quickstart, AuthAPI, TicketAPI, TicketCMS, TicketAdmin
apidocs make apidocs Quickstart, documentation
up-infra make up-infra Quickstart only
up-services make up-services Quickstart, CoreAPI, OrgConsole, PlatformConsole, PlayoutAdmin, SpatioAdmin, TellyboardAdmin
up-access make up-access same as up-services, plus TellyID

Missing repo = build failure

If a referenced repo is missing, the entire make command fails — even services that don't depend on it may not start.

Example root layout for make malaysia:

Roots/
├── Quickstart/
├── AuthAPI/
├── CoreAPI/
├── TellyID/
├── OrgConsole/
├── SpatioAdmin/
└── TicketCMS/


Infrastructure Profiles

Variable Contents
BASE networks/volumes, Postgres, NATS, SeaweedFS, tusd, Zitadel, AuthAPI, CoreAPI
INFRA networks/volumes, Postgres, Redis, VerneMQ, Zitadel
INFRA-FULL networks/volumes, Postgres, SeaweedFS, VerneMQ, tusd, NATS, CDN, Zitadel
SERVICES CoreAPI, OrgConsole, PlatformConsole, PlayoutAdmin, SpatioAdmin, TellyboardAdmin
ACCESS TellyID
LITE tusd, CDN — no database, no auth
COREAPI networks/volumes, Postgres, SeaweedFS, NATS, Zitadel, AuthAPI, CoreAPI, TellyID — the standard "CoreAPI plus what it needs" bundle other targets build on
TICKETING networks/volumes, Postgres, Redis, Zitadel, AuthAPI, TicketAPI, TicketCMS, TicketAdmin
ORGCONSOLE / PLATFORMCONSOLE / TICKETUI / TELLYID / TELLYBOARD / SPATIO single-app or small groupings, combined with INFRA/COREAPI at the target level rather than standing alone

ALL = INFRA + SERVICES + ACCESS — used by the generic logs, ps, restart utility targets.


Common Commands

# CoreAPI-only development (no admin frontend)
make coreapi
make coreapi-down
make coreapi-down-v

# CoreAPI + a specific console/admin app
make oc            # + OrgConsole
make pc            # + PlatformConsole
make console       # + OrgConsole + PlatformConsole
make malaysia       # + OrgConsole + SpatioAdmin + TicketCMS
make playout       # + PlayoutAdmin
make spatio        # + SpatioAdmin + TicketCMS + TicketAdmin (no OrgConsole)

# No-auth, no-database media stack (fastest local loop for media/CDN work)
make noauths
make media          # identical composition to noauths today — see note below

# Ticketing stack (independent of CoreAPI)
make tkt
make tkt-reset
make tkt-zitadel-migration

# Documentation site only
make apidocs
make apidocs-d

# Follow logs / check status across the full ALL profile
make logs
make ps
make restart

# Reset infra volumes and restart
make reset-infra
make reset-all
make clean-infra

Each <target>, <target>-d, <target>-down, <target>-down-v group follows the same convention: foreground, detached, tear down, tear down + wipe volumes. Not every target has all four — check the Makefile directly before assuming one exists.


Environment Files

make base ENV_FILE=.env.staging
make staging          # wrapper — see caveat below
make prod-deploy       # wrapper — see caveat below

ENV_FILE defaults to .env and is passed through docker compose --env-file $(ENV_FILE). Any target accepts an override this way, not just staging/prod-deploy.

staging and prod-deploy currently point at targets that don't exist

staging:
    $(MAKE) dev-d ENV_FILE=.env.staging
prod-deploy:
    $(MAKE) prod ENV_FILE=.env.prod
Neither dev-d nor prod is defined anywhere in the current Makefile — running make staging or make prod-deploy as-is will fail with No rule to make target. Until these are fixed, override ENV_FILE directly on whichever real target you mean, e.g. make coreapi ENV_FILE=.env.staging.


Known gotcha: PLAYOUT is defined twice

PLAYOUT = \
  -f compose/services/CoreAPI.yml \
  -f compose/services/PlayoutAdmin.yml \
  -f compose/services/Documentation.yml
# ...later in the file...
PLAYOUT = \
    -f compose/services/PlayoutAdmin.yml

Make does not error on redefinition — the second assignment silently wins for every use of $(PLAYOUT) in the file, including in noauths, media, and playout targets defined above the second block. In practice this means noauths and media currently resolve to $(LITE) $(PLAYOUT) = tusd + CDN + PlayoutAdmin only — no CoreAPI service, despite the target names implying a working media pipeline. The playout target is unaffected in practice since it explicitly adds $(COREAPI) alongside $(PLAYOUT).

If noauths/media are meant to include CoreAPI, rename one of the two PLAYOUT blocks (e.g. PLAYOUT-FULL) rather than relying on definition order.


Note: noauths and media are currently identical

noauths:
    $(COMPOSE) $(LITE) $(PLAYOUT) up --build
media:
    $(COMPOSE) $(LITE) $(PLAYOUT) up --build

Same variables, same command. If they're meant to diverge (e.g. media including SeaweedFS/tusd explicitly for upload testing, noauths staying minimal), that split hasn't been implemented yet — right now picking one over the other has no effect.