#!make # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2026 Bryan Joshua Pedini include .vars # Image tag / embedded version (override from the environment: APP_VERSION=1.2.3 make docker) APP_VERSION ?= latest export APP_VERSION # Commit embedded in the binary, computed on the host ("undefined" when there are no commits) COMMIT_ID := $(shell git rev-parse --verify --quiet --short HEAD 2>/dev/null || echo undefined) export COMMIT_ID # Label identifying this project's images, so cleanup never touches unrelated images IMAGE_LABEL = dpsapi.project=$${REPO_ORG}/$${REPO_NAME} # Local build output BINARY = dpsapi .PHONY: default clean build docker dockerpush test test-race test-e2e docker-e2e version run dockerrun default: version clean: rm -f ./$(BINARY) ./coverage.out if [ "$$(docker images "$${CONTAINER_ORG}/$${CONTAINER_IMAGE}" --format "{{.Repository}}:{{.Tag}}")" != "" ]; then \ docker image rm $$(docker images "$${CONTAINER_ORG}/$${CONTAINER_IMAGE}" --format "{{.Repository}}:{{.Tag}}"); \ fi docker image prune --force --filter "label=$(IMAGE_LABEL)" build: CGO_ENABLED=0 go build \ -trimpath \ -ldflags="-w -s -X 'main.APP_VERSION=$${APP_VERSION}' -X 'main.COMMIT_ID=$${COMMIT_ID}'" \ -o ./$(BINARY) . docker: docker build \ --build-arg GO_BUILDER=$${GO_BUILDER} \ --build-arg GO_VERSION=$${GO_VERSION} \ --build-arg GO_OS=$${GO_OS} \ --build-arg GO_ARCH=$${GO_ARCH} \ --build-arg GIT_HOST=$${GIT_HOST} \ --build-arg REPO_ORG=$${REPO_ORG} \ --build-arg REPO_NAME=$${REPO_NAME} \ --build-arg APP_VERSION=$${APP_VERSION} \ --build-arg COMMIT_ID=$${COMMIT_ID} \ --label "$(IMAGE_LABEL)" \ -t $${CONTAINER_ORG}/$${CONTAINER_IMAGE}:$${APP_VERSION} . # Remove only this project's images left dangling by the re-tag (prune without --all only removes dangling images) docker image prune --force --filter "label=$(IMAGE_LABEL)" dockerpush: docker push \ $${CONTAINER_ORG}/$${CONTAINER_IMAGE}:$${APP_VERSION} test: go test ./... test-race: CGO_ENABLED=1 go test -race ./... # The binary is built by the build prerequisite, so the suite's own build step is skipped test-e2e: build cd e2e && npm ci && DPSAPI_E2E_SKIP_BUILD=1 npx playwright test --project=host docker-e2e: docker cd e2e && npm ci && \ DPSAPI_IMAGE=$${CONTAINER_ORG}/$${CONTAINER_IMAGE}:$${APP_VERSION} npx playwright test --project=image version: bash -c "./version.sh" run: mkdir -p ./data docker run \ --rm \ --tty \ --interactive \ --publish $${CONTAINER_IP}:$${CONTAINER_PORT}:80 \ --workdir /go/src/$${GIT_HOST}/$${REPO_ORG}/$${REPO_NAME} \ --volume $(shell pwd):/go/src/$${GIT_HOST}/$${REPO_ORG}/$${REPO_NAME} \ --volume /var/run/docker.sock:/var/run/docker.sock \ --env DB_PATH=/go/src/$${GIT_HOST}/$${REPO_ORG}/$${REPO_NAME}/data/dpsapi.db \ --env LOG_LEVEL=$${LOG_LEVEL:-INFO} \ $${GO_BUILDER}:$${GO_VERSION} \ go run . dockerrun: mkdir -p ./data docker run \ --rm \ --tty \ --interactive \ --publish $${CONTAINER_IP}:$${CONTAINER_PORT}:80 \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume $(shell pwd)/data:/data \ --env DB_PATH=/data/dpsapi.db \ --env LOG_LEVEL=$${LOG_LEVEL:-INFO} \ $${CONTAINER_ORG}/$${CONTAINER_IMAGE}:$${APP_VERSION}