.PHONY: build build-pg build-release build-release-arm build-release-amd create-manifests build-arm build-x86 test clean major_tag := $(shell echo $(tag) | cut -d. -f1) minor_tag := $(shell echo $(tag) | cut -d. -f1,2) .PHONY: build-release build-sqlite build-postgresql build-ee-sqlite build-ee-postgresql build-release: build-sqlite build-postgresql build-ee-sqlite build-ee-postgresql build-sqlite: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release tag="; \ exit 1; \ fi docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=sqlite \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:latest \ --tag fosrl/pangolin:$(major_tag) \ --tag fosrl/pangolin:$(minor_tag) \ --tag fosrl/pangolin:$(tag) \ --push . build-postgresql: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release tag="; \ exit 1; \ fi docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=pg \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:postgresql-latest \ --tag fosrl/pangolin:postgresql-$(major_tag) \ --tag fosrl/pangolin:postgresql-$(minor_tag) \ --tag fosrl/pangolin:postgresql-$(tag) \ --push . build-ee-sqlite: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release tag="; \ exit 1; \ fi docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=sqlite \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:ee-latest \ --tag fosrl/pangolin:ee-$(major_tag) \ --tag fosrl/pangolin:ee-$(minor_tag) \ --tag fosrl/pangolin:ee-$(tag) \ --push . build-ee-postgresql: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release tag="; \ exit 1; \ fi docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=pg \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:ee-postgresql-latest \ --tag fosrl/pangolin:ee-postgresql-$(major_tag) \ --tag fosrl/pangolin:ee-postgresql-$(minor_tag) \ --tag fosrl/pangolin:ee-postgresql-$(tag) \ --push . build-release-arm: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release-arm tag="; \ exit 1; \ fi @MAJOR_TAG=$$(echo $(tag) | cut -d. -f1); \ MINOR_TAG=$$(echo $(tag) | cut -d. -f1,2); \ docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=sqlite \ --platform linux/arm64 \ --tag fosrl/pangolin:latest-arm64 \ --tag fosrl/pangolin:$$MAJOR_TAG-arm64 \ --tag fosrl/pangolin:$$MINOR_TAG-arm64 \ --tag fosrl/pangolin:$(tag)-arm64 \ --push . && \ docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=pg \ --platform linux/arm64 \ --tag fosrl/pangolin:postgresql-latest-arm64 \ --tag fosrl/pangolin:postgresql-$$MAJOR_TAG-arm64 \ --tag fosrl/pangolin:postgresql-$$MINOR_TAG-arm64 \ --tag fosrl/pangolin:postgresql-$(tag)-arm64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=sqlite \ --platform linux/arm64 \ --tag fosrl/pangolin:ee-latest-arm64 \ --tag fosrl/pangolin:ee-$$MAJOR_TAG-arm64 \ --tag fosrl/pangolin:ee-$$MINOR_TAG-arm64 \ --tag fosrl/pangolin:ee-$(tag)-arm64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=pg \ --platform linux/arm64 \ --tag fosrl/pangolin:ee-postgresql-latest-arm64 \ --tag fosrl/pangolin:ee-postgresql-$$MAJOR_TAG-arm64 \ --tag fosrl/pangolin:ee-postgresql-$$MINOR_TAG-arm64 \ --tag fosrl/pangolin:ee-postgresql-$(tag)-arm64 \ --push . build-release-amd: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release-amd tag="; \ exit 1; \ fi @MAJOR_TAG=$$(echo $(tag) | cut -d. -f1); \ MINOR_TAG=$$(echo $(tag) | cut -d. -f1,2); \ docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=sqlite \ --platform linux/amd64 \ --tag fosrl/pangolin:latest-amd64 \ --tag fosrl/pangolin:$$MAJOR_TAG-amd64 \ --tag fosrl/pangolin:$$MINOR_TAG-amd64 \ --tag fosrl/pangolin:$(tag)-amd64 \ --push . && \ docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=pg \ --platform linux/amd64 \ --tag fosrl/pangolin:postgresql-latest-amd64 \ --tag fosrl/pangolin:postgresql-$$MAJOR_TAG-amd64 \ --tag fosrl/pangolin:postgresql-$$MINOR_TAG-amd64 \ --tag fosrl/pangolin:postgresql-$(tag)-amd64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=sqlite \ --platform linux/amd64 \ --tag fosrl/pangolin:ee-latest-amd64 \ --tag fosrl/pangolin:ee-$$MAJOR_TAG-amd64 \ --tag fosrl/pangolin:ee-$$MINOR_TAG-amd64 \ --tag fosrl/pangolin:ee-$(tag)-amd64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=pg \ --platform linux/amd64 \ --tag fosrl/pangolin:ee-postgresql-latest-amd64 \ --tag fosrl/pangolin:ee-postgresql-$$MAJOR_TAG-amd64 \ --tag fosrl/pangolin:ee-postgresql-$$MINOR_TAG-amd64 \ --tag fosrl/pangolin:ee-postgresql-$(tag)-amd64 \ --push . create-manifests: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make create-manifests tag="; \ exit 1; \ fi @MAJOR_TAG=$$(echo $(tag) | cut -d. -f1); \ MINOR_TAG=$$(echo $(tag) | cut -d. -f1,2); \ echo "Creating multi-arch manifests for sqlite (oss)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:latest \ --tag fosrl/pangolin:$$MAJOR_TAG \ --tag fosrl/pangolin:$$MINOR_TAG \ --tag fosrl/pangolin:$(tag) \ fosrl/pangolin:latest-arm64 \ fosrl/pangolin:latest-amd64 && \ echo "Creating multi-arch manifests for postgresql (oss)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:postgresql-latest \ --tag fosrl/pangolin:postgresql-$$MAJOR_TAG \ --tag fosrl/pangolin:postgresql-$$MINOR_TAG \ --tag fosrl/pangolin:postgresql-$(tag) \ fosrl/pangolin:postgresql-latest-arm64 \ fosrl/pangolin:postgresql-latest-amd64 && \ echo "Creating multi-arch manifests for sqlite (enterprise)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:ee-latest \ --tag fosrl/pangolin:ee-$$MAJOR_TAG \ --tag fosrl/pangolin:ee-$$MINOR_TAG \ --tag fosrl/pangolin:ee-$(tag) \ fosrl/pangolin:ee-latest-arm64 \ fosrl/pangolin:ee-latest-amd64 && \ echo "Creating multi-arch manifests for postgresql (enterprise)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:ee-postgresql-latest \ --tag fosrl/pangolin:ee-postgresql-$$MAJOR_TAG \ --tag fosrl/pangolin:ee-postgresql-$$MINOR_TAG \ --tag fosrl/pangolin:ee-postgresql-$(tag) \ fosrl/pangolin:ee-postgresql-latest-arm64 \ fosrl/pangolin:ee-postgresql-latest-amd64 && \ echo "All multi-arch manifests created successfully!" build-rc: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release tag="; \ exit 1; \ fi docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=sqlite \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:$(tag) \ --push . docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=pg \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:postgresql-$(tag) \ --push . docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=sqlite \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:ee-$(tag) \ --push . docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=pg \ --platform linux/arm64,linux/amd64 \ --tag fosrl/pangolin:ee-postgresql-$(tag) \ --push . build-rc-arm: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-rc-arm tag="; \ exit 1; \ fi docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=sqlite \ --platform linux/arm64 \ --tag fosrl/pangolin:$(tag)-arm64 \ --push . && \ docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=pg \ --platform linux/arm64 \ --tag fosrl/pangolin:postgresql-$(tag)-arm64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=sqlite \ --platform linux/arm64 \ --tag fosrl/pangolin:ee-$(tag)-arm64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=pg \ --platform linux/arm64 \ --tag fosrl/pangolin:ee-postgresql-$(tag)-arm64 \ --push . build-rc-amd: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-rc-amd tag="; \ exit 1; \ fi docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=sqlite \ --platform linux/amd64 \ --tag fosrl/pangolin:$(tag)-amd64 \ --push . && \ docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=pg \ --platform linux/amd64 \ --tag fosrl/pangolin:postgresql-$(tag)-amd64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=sqlite \ --platform linux/amd64 \ --tag fosrl/pangolin:ee-$(tag)-amd64 \ --push . && \ docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=pg \ --platform linux/amd64 \ --tag fosrl/pangolin:ee-postgresql-$(tag)-amd64 \ --push . create-manifests-rc: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make create-manifests-rc tag="; \ exit 1; \ fi @echo "Creating multi-arch manifests for RC sqlite (oss)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:$(tag) \ fosrl/pangolin:$(tag)-arm64 \ fosrl/pangolin:$(tag)-amd64 && \ echo "Creating multi-arch manifests for RC postgresql (oss)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:postgresql-$(tag) \ fosrl/pangolin:postgresql-$(tag)-arm64 \ fosrl/pangolin:postgresql-$(tag)-amd64 && \ echo "Creating multi-arch manifests for RC sqlite (enterprise)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:ee-$(tag) \ fosrl/pangolin:ee-$(tag)-arm64 \ fosrl/pangolin:ee-$(tag)-amd64 && \ echo "Creating multi-arch manifests for RC postgresql (enterprise)..." && \ docker buildx imagetools create \ --tag fosrl/pangolin:ee-postgresql-$(tag) \ fosrl/pangolin:ee-postgresql-$(tag)-arm64 \ fosrl/pangolin:ee-postgresql-$(tag)-amd64 && \ echo "All RC multi-arch manifests created successfully!" build-arm: docker buildx build --platform linux/arm64 -t fosrl/pangolin:latest . build-x86: docker buildx build --platform linux/amd64 -t fosrl/pangolin:latest . dev-build-sqlite: docker build --build-arg DATABASE=sqlite -t fosrl/pangolin:latest . dev-build-pg: docker build --build-arg DATABASE=pg -t fosrl/pangolin:postgresql-latest . test: docker run -it -p 3000:3000 -p 3001:3001 -p 3002:3002 -v ./config:/app/config fosrl/pangolin:latest clean: docker rmi pangolin