Deploy a package to your FluxCD environment. Use when: deploying a service to dev/staging/prod, building a dev prerelease image, triggering a Flux reconciliation, or troubleshooting deployment issues.
-next prerelease imagegitops symlinkFor prod deployments: The root of this repo must contain a gitops symlink pointing to the gitops repository. Expected structure:
gitops -> FLUX CD GITOPS REPO
The gitops repo structure:
gitops/
├── manifests/
│ ├── apps/nannos/ # FluxCD Kustomization names "nannos-app"
│ │ ├── base/ # K8s manifests (Deployments, Services, etc.)
│ │ └── dev/ # dev overlay
│ │ └── stg/ # stg overlay
│ │ └── prod/ # prod overlay
│ │ └── any-env/ # any env overlay
The reason is that just deploy-prod - which is the command for deploying to a prod environment with the latest stable release - needs to push changes to the manifests/apps/nannos/prod/ directory in the gitops repo. The gitops symlink allows the justfile to access that path regardless of where the gitops repo is located on the developer's machine.
docker with buildxgitFor this method, it's enough that the cluster has FluxCD installed and configured with ImageRepository and ImagePolicy resources that point to the correct image registry and tag patterns. The just deploy-dev command will trigger FluxCD to pick up new v1.2.3-next${timestamp} prerelease tags and deploy them. Same for just release which creates a release tag v1.2.3 and relies on FluxCD to pick it up for deployments.
The cluster is expected to use FluxCD image automation with:
ghcr.io/ringier-data/nannos-<pkg>filterTags: "-next" to match dev prerelease tagsmanifests/apps/nannos/${env}/ via the Setters strategydocker with buildxflux CLI (FluxCD)kubectl with access to the dev clusterIf flux reconcile commands fail, either:
flux CLI is not installed locally# Deploy to dev (builds -next prerelease image, pushes, triggers Flux)
just deploy-dev <package-name>
# Deploy to prod (updates gitops repo with latest stable tag, pushes)
just deploy-prod <package-name>
Examples:
just deploy-dev client-slack
just deploy-prod orchestrator-agent
deploy-dev Doesv<version>-next.<YYYYMMDDHHmmss> (e.g., v1.10.0-next.20260417143022)ghcr.io/ringier-data/nannos-<package>flux reconcile image repository nannos-<package> — forces Flux to re-scan tagsflux reconcile image policy nannos-<package> — forces Flux to evaluate the new tagflux reconcile kustomization nannos-app --with-source — forces Flux to apply changeskubectl rollout status, 300s timeout)deploy-prod Doesgitops symlink exists and contains the prod overlaygitops/manifests/apps/nannos/prod/image-patch.yamlSome packages share a K8s deployment:
| Package | K8s Deployment |
|---|---|
console-backend | console |
console-frontend | console |
client-slack | client-slack |
client-slack-frontend | client-slack |
| All others | Same as package name |
# Build dev image only (no deploy)
just build-dev <package>
# Build and push a release image (tagged v<version>)
just push=true build-pkg <package>
# Full release: bump version, tag, build, push
just release-pkg <package>
# Deploy latest stable release to prod (requires gitops symlink)
just deploy-prod <package>