teldrive/Makefile

137 lines
3.8 KiB
Makefile
Raw Normal View History

2024-06-11 00:16:41 +08:00
ifdef ComSpec
SHELL := powershell.exe
2025-01-11 22:08:57 +08:00
IS_WINDOWS := true
2024-06-11 00:16:41 +08:00
else
SHELL := /bin/bash
2025-01-11 22:08:57 +08:00
IS_WINDOWS := false
2024-06-11 00:16:41 +08:00
endif
2024-02-09 00:16:34 +08:00
APP_NAME := teldrive
2024-04-19 04:55:07 +08:00
BUILD_DIR := bin
FRONTEND_DIR := ui/dist
2025-01-11 22:08:57 +08:00
FRONTEND_ASSET := https://github.com/tgdrive/teldrive-ui/releases/download/latest/teldrive-ui.zip
2024-02-09 00:16:34 +08:00
GIT_COMMIT := $(shell git rev-parse --short HEAD)
GIT_LINK := $(shell git remote get-url origin)
MODULE_PATH := $(shell go list -m)
2024-02-09 00:16:34 +08:00
GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)
2025-01-11 22:08:57 +08:00
GIT_COMMIT := $(shell git rev-parse --short HEAD)
VERSION_PACKAGE := $(MODULE_PATH)/internal/version
2024-06-22 20:29:59 +08:00
BINARY_EXTENSION :=
2025-01-11 22:08:57 +08:00
2025-01-12 01:20:36 +08:00
ifeq ($(IS_WINDOWS),true)
TAG_FILTER:=Sort-Object -Descending | Select-Object -First 1
else
TAG_FILTER:=head -n 1
endif
GIT_TAG := $(shell git tag -l '[0-9]*.[0-9]*.[0-9]*' --sort=-v:refname | $(TAG_FILTER))
2025-01-11 22:08:57 +08:00
ifeq ($(IS_WINDOWS),true)
BINARY_EXTENSION := .exe
RM := powershell -Command "Remove-Item"
RMDIR := powershell -Command "Remove-Item -Recurse -Force"
MKDIR := powershell -Command "New-Item -ItemType Directory -Force"
DOWNLOAD := powershell -Command "Invoke-WebRequest -Uri"
UNZIP := powershell -Command "Expand-Archive"
else
RM := rm -f
RMDIR := rm -rf
MKDIR := mkdir -p
DOWNLOAD := curl -sLO
UNZIP := unzip -q -d
endif
.PHONY: all build run clean frontend backend run sync-ui retag patch-version minor-version major-version gen check-semver install-semver
2024-02-09 00:16:34 +08:00
all: build
2025-01-11 22:08:57 +08:00
check-semver:
ifeq ($(IS_WINDOWS),true)
@powershell -Command "if (-not (Get-Command semver -ErrorAction SilentlyContinue)) { Write-Host 'Installing semver...'; npm install -g semver }"
else
@which semver > /dev/null || (echo "Installing semver..." && npm install -g semver)
endif
2024-04-19 04:55:07 +08:00
frontend:
@echo "Extract UI"
2025-01-11 22:08:57 +08:00
$(RMDIR) $(FRONTEND_DIR)
ifeq ($(IS_WINDOWS),true)
$(DOWNLOAD) $(FRONTEND_ASSET) -OutFile teldrive-ui.zip
$(MKDIR) $(subst /,\\,$(FRONTEND_DIR))
$(UNZIP) -Path teldrive-ui.zip -DestinationPath $(FRONTEND_DIR) -Force
$(RM) teldrive-ui.zip
2024-02-09 00:16:34 +08:00
else
2025-01-11 22:08:57 +08:00
$(DOWNLOAD) $(FRONTEND_ASSET)
$(MKDIR) $(FRONTEND_DIR)
$(UNZIP) $(FRONTEND_DIR) teldrive-ui.zip
$(RM) teldrive-ui.zip
2024-02-09 00:16:34 +08:00
endif
2025-01-11 22:08:57 +08:00
gen:
go generate ./...
2024-04-19 04:55:07 +08:00
2025-01-11 22:08:57 +08:00
backend: gen
2024-02-09 00:16:34 +08:00
@echo "Building backend for $(GOOS)/$(GOARCH)..."
go build -trimpath -ldflags "-s -w -X '$(VERSION_PACKAGE).Version=$(GIT_TAG)' -X '$(VERSION_PACKAGE).CommitSHA=$(GIT_COMMIT)' -extldflags=-static" -o $(BUILD_DIR)/$(APP_NAME)$(BINARY_EXTENSION)
2024-02-09 00:16:34 +08:00
build: frontend backend
@echo "Building complete."
run:
@echo "Running $(APP_NAME)..."
$(BUILD_DIR)/$(APP_NAME) run
2024-02-09 00:16:34 +08:00
clean:
@echo "Cleaning up..."
2025-01-11 22:08:57 +08:00
$(RMDIR) $(BUILD_DIR)
ifeq ($(IS_WINDOWS),true)
if exist "$(FRONTEND_DIR)" $(RMDIR) "$(FRONTEND_DIR)"
else
$(RMDIR) $(FRONTEND_DIR)
endif
2024-02-09 00:16:34 +08:00
deps:
@echo "Installing Go dependencies..."
go mod download
retag:
2025-01-11 22:08:57 +08:00
@echo "Retagging $(GIT_TAG)..."
-git tag -d $(GIT_TAG)
-git push --delete origin $(GIT_TAG)
2024-03-20 01:14:00 +08:00
git tag -a $(GIT_TAG) -m "Recreated tag $(GIT_TAG)"
git push origin $(GIT_TAG)
2024-02-09 00:16:34 +08:00
2025-01-11 22:08:57 +08:00
patch-version: check-semver
@echo "Current version: $(GIT_TAG)"
ifeq ($(GIT_TAG),)
$(eval NEW_VERSION := 1.0.0)
else
$(eval NEW_VERSION := $(shell semver -i patch $(GIT_TAG)))
endif
@echo "Creating new patch version: $(NEW_VERSION)"
git tag -a $(NEW_VERSION) -m "Release $(NEW_VERSION)"
git push origin $(NEW_VERSION)
2023-09-08 21:15:47 +08:00
2025-01-11 22:08:57 +08:00
minor-version: check-semver
@echo "Current version: $(GIT_TAG)"
ifeq ($(GIT_TAG),)
$(eval NEW_VERSION := 1.0.0)
else
$(eval NEW_VERSION := $(shell semver -i minor $(GIT_TAG)))
endif
@echo "Creating new minor version: $(NEW_VERSION)"
git tag -a $(NEW_VERSION) -m "Release $(NEW_VERSION)"
git push origin $(NEW_VERSION)
major-version: check-semver
@echo "Current version: $(GIT_TAG)"
ifeq ($(GIT_TAG),)
$(eval NEW_VERSION := 1.0.0)
else
$(eval NEW_VERSION := $(shell semver -i major $(GIT_TAG)))
endif
@echo "Creating new major version: $(NEW_VERSION)"
git tag -a $(NEW_VERSION) -m "Release $(NEW_VERSION)"
git push origin $(NEW_VERSION)