Building the Image
Deployments normally consume the image published by CI (see Installation & Deployment). Build locally only for development or a patched release.
CI Build
.github/workflows/build-callable.yml runs on the rd-runner self-hosted runner and performs, in
order:
-
npm install --legacy-peer-deps -
a compatibility symlink for
chart.js(Chart.js→chart.umd.js) — the case-insensitive import that works on macOS would otherwise fail on the Linux runner -
ng build --project=ft-common— the shared library must exist before the applications -
both applications in parallel, each with its deployed base path:
ng build --project=management-console -c=production --base-href /management-portal/ ng build --project=support-center -c=production --base-href /support-portal/ -
docker/build-push-actionbuildsdocker/Dockerfileand pusheshub.friendly-tech.com/ui/portals:<tags>to Harbor.
Triggers:
| Workflow | Trigger |
|---|---|
|
Every push to |
|
|
The default platforms input is linux/amd64; another architecture requires an explicit value.
Local Build
docker/Dockerfile is a runtime-only image — it contains no Node.js and copies the dist/
output produced on the build host. Build the Angular projects first, in this order, or the COPY
steps fail:
npm install --legacy-peer-deps
ng build --project=ft-common
ng build --project=support-center -c=production --base-href /support-portal/
ng build --project=management-console -c=production --base-href /management-portal/
docker build -f docker/Dockerfile -t ui/portals:local .
docker/docker-compose.yml wraps the same build (context: ../) for a one-command local run, and
docker/docker-push.sh shows the buildx variant used to push manually.
|
|
Image Contents
| Path in the image | Source |
|---|---|
|
|
|
|
|
|
|
|
The base image is nginx:alpine with jq, bash and gettext added — jq patches the runtime
config, envsubst (from gettext) renders the Nginx template.
Related pages
-
Contributing — running the apps from source