Files
vpngen/protonvpn-wg-confgen/Makefile
2026-04-07 17:41:25 +02:00

90 lines
3.0 KiB
Makefile

.PHONY: build build-all clean test fmt vet lint install vendor run dev show-version
BINARY_NAME=protonvpn-wg-confgen
BUILD_DIR=build
CMD_DIR=cmd/protonvpn-wg
MODULE=protonvpn-wg-confgen
# Fetch latest ProtonVPN Linux client version from GitHub (with fallback)
PROTON_VERSION_URL=https://raw.githubusercontent.com/ProtonVPN/proton-vpn-gtk-app/stable/versions.yml
PROTON_VERSION ?= $(shell curl -sf "$(PROTON_VERSION_URL)" 2>/dev/null | head -1 | cut -d' ' -f2 || echo "4.13.1")
# ldflags to inject version at build time
LDFLAGS=-ldflags "-X '$(MODULE)/internal/constants.AppVersion=linux-vpn@$(PROTON_VERSION)' \
-X '$(MODULE)/internal/constants.UserAgent=ProtonVPN/$(PROTON_VERSION) (Linux; Ubuntu)'"
# Build the binary
build:
@echo "Building $(BINARY_NAME) with ProtonVPN client version $(PROTON_VERSION)..."
@mkdir -p $(BUILD_DIR)
@go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME) $(CMD_DIR)/main.go
# Build for multiple platforms
build-all:
@echo "Building for multiple platforms with ProtonVPN client version $(PROTON_VERSION)..."
@mkdir -p $(BUILD_DIR)
@echo " Linux amd64..."
@GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-amd64 $(CMD_DIR)/main.go
@echo " Linux arm64..."
@GOOS=linux GOARCH=arm64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm64 $(CMD_DIR)/main.go
@echo " Linux arm..."
@GOOS=linux GOARCH=arm go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm $(CMD_DIR)/main.go
@echo " macOS amd64..."
@GOOS=darwin GOARCH=amd64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64 $(CMD_DIR)/main.go
@echo " macOS arm64..."
@GOOS=darwin GOARCH=arm64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-arm64 $(CMD_DIR)/main.go
@echo " Windows amd64..."
@GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe $(CMD_DIR)/main.go
@echo " Windows arm64..."
@GOOS=windows GOARCH=arm64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-arm64.exe $(CMD_DIR)/main.go
@echo "Done!"
# Clean build artifacts
clean:
@echo "Cleaning..."
@rm -rf $(BUILD_DIR)
@rm -f $(BINARY_NAME)
# Run tests
test:
@echo "Running tests..."
@go test -v ./...
# Format code
fmt:
@echo "Formatting code..."
@go fmt ./...
# Run go vet
vet:
@echo "Running go vet..."
@go vet ./...
# Run golangci-lint (requires golangci-lint to be installed)
lint:
@echo "Running linter..."
@golangci-lint run
# Install the binary
install: build
@echo "Installing $(BINARY_NAME)..."
@cp $(BUILD_DIR)/$(BINARY_NAME) $(GOPATH)/bin/$(BINARY_NAME)
# Update vendor directory
vendor:
@echo "Updating vendor..."
@go mod vendor
# Run the application
run: build
@./$(BUILD_DIR)/$(BINARY_NAME) $(ARGS)
# Development build with race detector
dev:
@echo "Building with race detector and ProtonVPN client version $(PROTON_VERSION)..."
@go build -race $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-dev $(CMD_DIR)/main.go
# Show current ProtonVPN version that would be used
show-version:
@echo "ProtonVPN client version: $(PROTON_VERSION)"