.PHONY: build install release clean test run help version patch minor major alpha beta rc docker-build docker-run docker-compose-up docker-compose-down docker-compose-logs docker-push docker-tag
help:
@echo "plcbundle Makefile"
@echo ""
@echo "Available targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-12s\033[0m %s\n", $$1, $$2}'
build:
cargo build
build-go: build
@echo "Building Go bindings..."
cd bindings/go && go build ./...
build-go-example: build-go
cd bindings/go && go build -o ../../plcbundle-go cmd/example/main.go
release:
cargo build --release
@echo ""
@echo "Release binary: target/release/plcbundle"
install:
cargo install --path .
clean:
cargo clean
test:
cargo test --all-features
run:
cargo run -- "did" -b "1" -j 1
fmt:
cargo fmt
lint:
cargo clippy --all-features -- -D warnings
check:
cargo check
version:
@cargo metadata --format-version 1 | jq -r '.packages[] | select(.name=="plcbundle") | .version'
patch:
cargo release patch --execute
minor:
cargo release minor --execute
major:
cargo release major --execute
release-dry-run:
cargo release patch --dry-run
release-preview:
cargo release patch --no-publish --no-push --no-tag --allow-dirty
alpha:
cargo release alpha --execute
beta:
cargo release beta --execute
rc:
cargo release rc --execute
IMAGE ?= atscan/plcbundle:latest
HTTP_PORT ?= 8080
DATA_DIR ?= ./data
TZ ?= UTC
docker-build:
docker build -t $(IMAGE) .
docker-build-amd64:
docker buildx build --platform linux/amd64 -t $(IMAGE) --load .
docker-build-arm64:
docker buildx build --platform linux/arm64 -t $(IMAGE) --load .
docker-build-multi:
@echo "Building multi-architecture image for linux/amd64,linux/arm64..."
docker buildx build --platform linux/amd64,linux/arm64 -t $(IMAGE) --push .
docker-build-multi-local:
@echo "Building multi-architecture image for linux/amd64,linux/arm64 (local)..."
docker buildx build --platform linux/amd64,linux/arm64 -t $(IMAGE) .
docker-run:
mkdir -p $(DATA_DIR)
docker run --rm \
--name plcbundle \
-p $(HTTP_PORT):8080 \
-v $(PWD)/$(DATA_DIR):/data \
-e TZ=$(TZ) \
$(IMAGE) server --host 0.0.0.0 --port 8080 --sync --websocket -C /data
docker-compose-up:
docker compose up -d
docker-compose-down:
docker compose down
docker-compose-logs:
docker compose logs -f --tail=100
docker-tag: ## Tag local image (set TAG=...)
@if [ -z "$(TAG)" ]; then echo "TAG is required (e.g., make docker-tag TAG=v0.9.0)"; exit 1; fi
docker tag $(IMAGE) $(IMAGE:latest=$(TAG))
docker-push:
docker push $(IMAGE)