A Transparent and Verifiable Way to Sync the AT Protocol's PLC Directory
at did-resolver 203 lines 5.8 kB view raw
1.PHONY: all build install test clean fmt lint help version bump-patch bump-minor bump-major release release-build 2.PHONY: docker-build docker-buildx docker-push docker-run docker-clean docker-shell compose-up compose-down compose-logs 3 4# Binary name 5BINARY_NAME=plcbundle 6INSTALL_PATH=$(GOPATH)/bin 7 8# Docker configuration 9DOCKER_IMAGE=plcbundle 10DOCKER_TAG=$(VERSION) 11DOCKER_REGISTRY?=atscan 12DOCKER_FULL_IMAGE=$(if $(DOCKER_REGISTRY),$(DOCKER_REGISTRY)/,)$(DOCKER_IMAGE):$(DOCKER_TAG) 13DOCKER_LATEST=$(if $(DOCKER_REGISTRY),$(DOCKER_REGISTRY)/,)$(DOCKER_IMAGE):latest 14DOCKER_PLATFORMS?=linux/amd64,linux/arm64 15 16# Version information 17VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") 18GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") 19BUILD_DATE := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") 20 21# Go commands 22GOCMD=go 23GOBUILD=$(GOCMD) build 24GOINSTALL=$(GOCMD) install 25GOCLEAN=$(GOCMD) clean 26GOTEST=$(GOCMD) test 27GOGET=$(GOCMD) get 28GOFMT=$(GOCMD) fmt 29GOMOD=$(GOCMD) mod 30 31# Build flags 32LDFLAGS=-ldflags "-X main.version=$(VERSION) -X main.gitCommit=$(GIT_COMMIT) -X main.buildDate=$(BUILD_DATE)" 33 34# Default target 35all: build 36 37# Build the CLI tool with version info 38build: 39 @echo "Building $(BINARY_NAME) $(VERSION)..." 40 $(GOBUILD) $(LDFLAGS) -o $(BINARY_NAME) ./cmd/plcbundle 41 42# Install the CLI tool globally 43install: 44 @echo "Installing $(BINARY_NAME) $(VERSION)..." 45 $(GOINSTALL) $(LDFLAGS) ./cmd/plcbundle 46 47# Run tests 48test: 49 @echo "Running tests..." 50 $(GOTEST) -v ./... 51 52# Run tests with coverage 53test-coverage: 54 @echo "Running tests with coverage..." 55 $(GOTEST) -v -cover ./... 56 57# Clean build artifacts 58clean: 59 @echo "Cleaning..." 60 $(GOCLEAN) 61 rm -f $(BINARY_NAME) 62 rm -rf dist/ 63 64# Format code 65fmt: 66 @echo "Formatting code..." 67 $(GOFMT) ./... 68 69# Download dependencies 70deps: 71 @echo "Downloading dependencies..." 72 $(GOMOD) download 73 $(GOMOD) tidy 74 75# Verify dependencies 76verify: 77 @echo "Verifying dependencies..." 78 $(GOMOD) verify 79 80# Show current version 81version: 82 @echo "Current version: $(VERSION)" 83 @echo "Git commit: $(GIT_COMMIT)" 84 @echo "Build date: $(BUILD_DATE)" 85 86# Bump patch version (0.1.0 -> 0.1.1) 87bump-patch: 88 @echo "Bumping patch version..." 89 @./scripts/bump-version.sh patch 90 91# Bump minor version (0.1.0 -> 0.2.0) 92bump-minor: 93 @echo "Bumping minor version..." 94 @./scripts/bump-version.sh minor 95 96# Bump major version (0.1.0 -> 1.0.0) 97bump-major: 98 @echo "Bumping major version..." 99 @./scripts/bump-version.sh major 100 101# Create release 102release: 103 @echo "Creating release for version $(VERSION)..." 104 @./scripts/release.sh 105 106# ============================================================================ 107# Docker Commands 108# ============================================================================ 109 110# Build Docker image (local) 111docker-build: 112 @echo "Building Docker image $(DOCKER_FULL_IMAGE)..." 113 docker build \ 114 --build-arg VERSION=$(VERSION) \ 115 --build-arg GIT_COMMIT=$(GIT_COMMIT) \ 116 --build-arg BUILD_DATE="$(BUILD_DATE)" \ 117 -t $(DOCKER_FULL_IMAGE) \ 118 -t $(DOCKER_LATEST) \ 119 . 120 @echo "✓ Built: $(DOCKER_FULL_IMAGE)" 121 122# Build multi-platform and push 123docker-buildx: 124 @echo "Building multi-platform image $(DOCKER_FULL_IMAGE)..." 125 docker buildx build \ 126 --platform $(DOCKER_PLATFORMS) \ 127 --build-arg VERSION=$(VERSION) \ 128 --build-arg GIT_COMMIT=$(GIT_COMMIT) \ 129 --build-arg BUILD_DATE="$(BUILD_DATE)" \ 130 --tag $(DOCKER_FULL_IMAGE) \ 131 --tag $(DOCKER_LATEST) \ 132 --push \ 133 . 134 @echo "✓ Built and pushed: $(DOCKER_FULL_IMAGE) ($(DOCKER_PLATFORMS))" 135 136# Push Docker image 137docker-push: 138 @echo "Pushing Docker image..." 139 docker push $(DOCKER_FULL_IMAGE) 140 docker push $(DOCKER_LATEST) 141 @echo "✓ Pushed: $(DOCKER_FULL_IMAGE)" 142 143# Run Docker container as CLI 144docker-run: 145 @docker run --rm -v $(PWD)/data:/data $(DOCKER_FULL_IMAGE) plcbundle $(CMD) 146 147# Shortcuts 148docker-info: 149 @docker run --rm -v $(PWD)/data:/data $(DOCKER_FULL_IMAGE) plcbundle info 150 151docker-fetch: 152 @docker run --rm -v $(PWD)/data:/data $(DOCKER_FULL_IMAGE) plcbundle fetch 153 154docker-verify: 155 @docker run --rm -v $(PWD)/data:/data $(DOCKER_FULL_IMAGE) plcbundle verify 156 157# Run as server 158docker-serve: 159 docker run --rm -it -p 8080:8080 -v $(PWD)/data:/data $(DOCKER_FULL_IMAGE) plcbundle serve --host 0.0.0.0 160 161# Open shell 162docker-shell: 163 docker run --rm -it -v $(PWD)/data:/data $(DOCKER_FULL_IMAGE) sh 164 165# Clean Docker artifacts 166docker-clean: 167 @echo "Cleaning Docker images..." 168 docker rmi $(DOCKER_FULL_IMAGE) $(DOCKER_LATEST) 2>/dev/null || true 169 docker image prune -f 170 171# ============================================================================ 172# Help 173# ============================================================================ 174 175help: 176 @echo "Available targets:" 177 @echo "" 178 @echo "Build & Install:" 179 @echo " make build - Build the CLI tool" 180 @echo " make install - Install CLI tool globally" 181 @echo " make clean - Clean build artifacts" 182 @echo "" 183 @echo "Development:" 184 @echo " make test - Run tests" 185 @echo " make test-coverage - Run tests with coverage" 186 @echo " make fmt - Format code" 187 @echo " make deps - Download dependencies" 188 @echo "" 189 @echo "Release:" 190 @echo " make version - Show current version" 191 @echo " make bump-patch - Bump patch (0.1.0 -> 0.1.1)" 192 @echo " make bump-minor - Bump minor (0.1.0 -> 0.2.0)" 193 @echo " make bump-major - Bump major (0.1.0 -> 1.0.0)" 194 @echo " make release - Push tag to trigger release" 195 @echo "" 196 @echo "Docker:" 197 @echo " make docker-build - Build image (current platform)" 198 @echo " make docker-buildx - Build multi-platform and push" 199 @echo " make docker-run - Run CLI (CMD='info')" 200 @echo " make docker-info - Show bundle info" 201 @echo " make docker-serve - Run as server" 202 @echo " make docker-shell - Open shell" 203 @echo ""