|
1 | | -.PHONY: all push-all node-sqitch pgvector clean |
| 1 | +.PHONY: all push-all build-all build-push-all build-process build-push-process \ |
| 2 | + build-process-version build-push-process-version pgvector node-sqitch postgis clean |
2 | 3 |
|
3 | | -all: |
4 | | - $(MAKE) -C node-sqitch build |
5 | | - $(MAKE) -C pgvector build |
| 4 | +REPO_NAME?=pyramation |
| 5 | +PLATFORMS?=linux/arm64 |
6 | 6 |
|
7 | | -push-all: |
8 | | - $(MAKE) -C node-sqitch push |
9 | | - $(MAKE) -C pgvector push |
| 7 | +# default process if none specified (can be overridden: `make PROCESS=postgis build-process`) |
| 8 | +PROCESS?=pgvector |
10 | 9 |
|
11 | | -node-sqitch: |
12 | | - $(MAKE) -C node-sqitch build |
| 10 | +# Convenience: list of known processes |
| 11 | +PROCESSES:=pgvector node-sqitch postgis pgvector-postgis |
| 12 | + |
| 13 | +CONTAINER_NAME?=$(PROCESS) |
| 14 | + |
| 15 | +## build-process builds docker image(s) for $(PROCESS) using base+versions from version.yaml |
| 16 | +## It will build one image per version listed in $(PROCESS)/version.yaml and tag as <repo>/<process>:<version> |
| 17 | +build-process: |
| 18 | + @echo "==> Building process: $(PROCESS)" |
| 19 | + @BASE=$$(sed -n 's/^[[:space:]]*base:[[:space:]]*//p' $(PROCESS)/version.yaml | head -n1); \ |
| 20 | + VERSIONS=$$(sed -n '/^[[:space:]]*versions:/,$$p' $(PROCESS)/version.yaml | sed -n 's/^[[:space:]]*-[[:space:]]*//p'); \ |
| 21 | + if [ -z "$$BASE" ] || [ -z "$$VERSIONS" ]; then \ |
| 22 | + echo "Error: Could not parse base or versions from $(PROCESS)/version.yaml" 1>&2; \ |
| 23 | + exit 1; \ |
| 24 | + fi; \ |
| 25 | + for v in $$VERSIONS; do \ |
| 26 | + $(MAKE) --no-print-directory BASE=$$BASE VERSION=$$v build-process-version || exit $$?; \ |
| 27 | + done |
| 28 | + |
| 29 | +build-all: |
| 30 | + @for p in $(PROCESSES); do \ |
| 31 | + $(MAKE) --no-print-directory PROCESS=$$p build-process || exit $$?; \ |
| 32 | + done |
| 33 | + |
| 34 | +build-push-process: |
| 35 | + @echo "==> Building+Pushing process: $(PROCESS)" |
| 36 | + @BASE=$$(sed -n 's/^[[:space:]]*base:[[:space:]]*//p' $(PROCESS)/version.yaml | head -n1); \ |
| 37 | + VERSIONS=$$(sed -n '/^[[:space:]]*versions:/,$$p' $(PROCESS)/version.yaml | sed -n 's/^[[:space:]]*-[[:space:]]*//p'); \ |
| 38 | + if [ -z "$$BASE" ] || [ -z "$$VERSIONS" ]; then \ |
| 39 | + echo "Error: Could not parse base or versions from $(PROCESS)/version.yaml" 1>&2; \ |
| 40 | + exit 1; \ |
| 41 | + fi; \ |
| 42 | + for v in $$VERSIONS; do \ |
| 43 | + $(MAKE) --no-print-directory BASE=$$BASE VERSION=$$v build-push-process-version || exit $$?; \ |
| 44 | + done |
| 45 | + |
| 46 | +build-push-all: |
| 47 | + @for p in $(PROCESSES); do \ |
| 48 | + $(MAKE) --no-print-directory PROCESS=$$p build-push-process || exit $$?; \ |
| 49 | + done |
13 | 50 |
|
| 51 | +# Build only a specific VERSION for $(PROCESS). Intended for internal use by build-process. |
| 52 | +# Usage (internal): $(MAKE) BASE=<base> VERSION=<version> build-process-version |
| 53 | +build-process-version: |
| 54 | + @test -n "$(BASE)" || { echo "Error: BASE is required"; exit 1; } |
| 55 | + @test -n "$(VERSION)" || { echo "Error: VERSION is required"; exit 1; } |
| 56 | + @echo " -> $(BASE):$(VERSION) => $(REPO_NAME)/$(PROCESS):$(VERSION) (build)" |
| 57 | + @docker buildx build \ |
| 58 | + --platform $(PLATFORMS) \ |
| 59 | + --build-arg BASE=$(BASE) \ |
| 60 | + --build-arg BASE_VERSION=$(VERSION) \ |
| 61 | + -t $(REPO_NAME)/$(PROCESS):$(VERSION) \ |
| 62 | + $(PROCESS) |
| 63 | + |
| 64 | +# Build+push only a specific VERSION for $(PROCESS). Intended for internal use by build-push-process. |
| 65 | +# Usage (internal): $(MAKE) BASE=<base> VERSION=<version> build-push-process-version |
| 66 | +build-push-process-version: |
| 67 | + @test -n "$(BASE)" || { echo "Error: BASE is required"; exit 1; } |
| 68 | + @test -n "$(VERSION)" || { echo "Error: VERSION is required"; exit 1; } |
| 69 | + @echo " -> $(BASE):$(VERSION) => $(REPO_NAME)/$(PROCESS):$(VERSION) (push)" |
| 70 | + @docker buildx build \ |
| 71 | + --platform $(PLATFORMS) \ |
| 72 | + --build-arg BASE=$(BASE) \ |
| 73 | + --build-arg BASE_VERSION=$(VERSION) \ |
| 74 | + -t $(REPO_NAME)/$(PROCESS):$(VERSION) \ |
| 75 | + --push \ |
| 76 | + $(PROCESS) |
| 77 | + |
| 78 | +# Aliases |
| 79 | +all: build-all |
| 80 | +push-all: build-push-all |
| 81 | + |
| 82 | +# Convenience per-process targets |
14 | 83 | pgvector: |
15 | | - $(MAKE) -C pgvector build |
| 84 | + $(MAKE) PROCESS=pgvector build-process |
| 85 | + |
| 86 | +node-sqitch: |
| 87 | + $(MAKE) PROCESS=node-sqitch build-process |
| 88 | + |
| 89 | +postgis: |
| 90 | + $(MAKE) PROCESS=postgis build-process |
16 | 91 |
|
17 | | -# Git cleanup (repo-level only) |
18 | | -clean: |
19 | | - @git reset --hard |
20 | | - @git ls-files --other --exclude-standard | xargs rm -f |
| 92 | +pgvector-postgis: |
| 93 | + $(MAKE) PROCESS=pgvector-postgis build-process |
0 commit comments