| # API Module Makefile |
| # This Makefile provides targets for the swagger generation and validation |
| # which are specific to the API module. |
| |
| DOCKER ?= docker |
| BUILDX ?= $(DOCKER) buildx |
| |
| API_DIR := $(CURDIR) |
| PROJECT_PATH := /go/src/github.com/moby/moby |
| |
| DOCKER_MOUNT := -v "$(API_DIR):$(PROJECT_PATH)/api" |
| |
| DOCKER_IMAGE := docker-api-dev |
| |
| DOCKER_WORKDIR := -w $(PROJECT_PATH)/api |
| |
| DOCKER_FLAGS := $(DOCKER) run --rm $(DOCKER_MOUNT) $(DOCKER_WORKDIR) |
| DOCKER_RUN := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)" |
| |
| DOCKER_CONTAINER_NAME := $(if $(CONTAINER_NAME),--name $(CONTAINER_NAME),) |
| |
| DOCKER_BUILD_ARGS += --build-arg=GO_VERSION |
| DOCKER_BUILD_ARGS += --build-arg=SWAGGER_VERSION |
| |
| BUILD_CMD := $(BUILDX) build |
| |
| SWAGGER_DOCS_PORT ?= 9000 |
| |
| .DEFAULT_GOAL := help |
| |
| .PHONY: build |
| build: |
| $(BUILD_CMD) $(DOCKER_BUILD_ARGS) \ |
| --target dev \ |
| --load \ |
| -t "$(DOCKER_IMAGE)" \ |
| -f Dockerfile \ |
| . |
| |
| .PHONY: swagger-gen |
| swagger-gen: build ## generate swagger API types |
| $(DOCKER_RUN) ./scripts/generate-swagger-api.sh |
| |
| .PHONY: swagger-docs |
| swagger-docs: ## preview the API documentation |
| @echo "API docs preview will be running at http://localhost:$(SWAGGER_DOCS_PORT)" |
| @docker run --rm \ |
| -v ./:/usr/share/nginx/html/swagger/ \ |
| -e 'REDOC_OPTIONS=hide-hostname="true" lazy-rendering' \ |
| -e SPEC_URL="swagger/swagger.yaml" \ |
| -p $(SWAGGER_DOCS_PORT):80 \ |
| redocly/redoc:v2.5.1 |
| |
| .PHONY: validate-swagger |
| validate-swagger: build ## validate the swagger.yaml file |
| $(DOCKER_RUN) ./scripts/validate-swagger.sh |
| |
| .PHONY: validate-swagger-gen |
| validate-swagger-gen: build ## validate generated types are up-to-date |
| $(DOCKER_RUN) ./scripts/validate-swagger-gen.sh |
| |
| .PHONY: help |
| help: ## display this help message |
| @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) |