diff --git a/.gitea/template b/.gitea/template index b598082..d2128fd 100644 --- a/.gitea/template +++ b/.gitea/template @@ -1,5 +1,8 @@ # This file tells Gitea to process variable substitution in the following files. go.mod README.md -cmd/${REPO_NAME}/main.go +cmd/${REPO_NAME}/root.go +main.go +Makefile +changelog diff --git a/.gitignore b/.gitignore index adf8f72..3d3c42f 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,7 @@ # Go workspace file go.work +# Build and distribution directories +build/ +dist/ + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1d0cdda --- /dev/null +++ b/Makefile @@ -0,0 +1,96 @@ +# Variables +BINARY_NAME := ${REPO_NAME} +BUILD_DIR := ./build +DIST_DIR := ./dist +VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") +BUILD_TIME := $(shell date -u '+%Y-%m-%d_%H:%M:%S') +GIT_COMMIT := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown") +DEB_PACKAGE_NAME := $(BINARY_NAME)_$(VERSION)_amd64.deb + +# Default target +.PHONY: all +all: build + +# Build the binary +.PHONY: build +build: + @echo "Building $(BINARY_NAME) version $(VERSION)..." + @mkdir -p $(BUILD_DIR) + @go build -ldflags "-X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT)" \ + -o $(BUILD_DIR)/$(BINARY_NAME) . + +# Clean build artifacts +.PHONY: clean +clean: + @echo "Cleaning build artifacts..." + @rm -rf $(BUILD_DIR) + @rm -rf $(DIST_DIR) + +# Build Debian package +.PHONY: deb +deb: build + @echo "Building Debian package..." + @mkdir -p $(DIST_DIR) + @mkdir -p $(DIST_DIR)/$(BINARY_NAME)_$(VERSION) + @mkdir -p $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN + @mkdir -p $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/opt/$(BINARY_NAME) + + # Copy binary + @cp $(BUILD_DIR)/$(BINARY_NAME) $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/opt/$(BINARY_NAME)/ + @chmod +x $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/opt/$(BINARY_NAME)/$(BINARY_NAME) + + # Create control file + @echo "Package: $(BINARY_NAME)" > $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control + @echo "Version: $(VERSION)" >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control + @echo "Architecture: amd64" >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control + @echo "Maintainer: Bishop Maintainer " >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control + @echo "Description: Bishop - A Go application" >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control + @echo " Bishop is a Go application that provides various functionalities." >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control + + # Copy changelog if it exists + @if [ -f changelog ]; then \ + cp changelog $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/; \ + fi + + # Build the .deb package + @cd $(DIST_DIR) && dpkg-deb --build $(BINARY_NAME)_$(VERSION) + @mv $(DIST_DIR)/$(BINARY_NAME)_$(VERSION).deb $(DIST_DIR)/$(DEB_PACKAGE_NAME) + @echo "Debian package created: $(DIST_DIR)/$(DEB_PACKAGE_NAME)" + +# Install dependencies +.PHONY: deps +deps: + @echo "Installing dependencies..." + @go mod download + +# Run tests +.PHONY: test +test: + @echo "Running tests..." + @go test ./... + +# Format code +.PHONY: fmt +fmt: + @echo "Formatting code..." + @go fmt ./... + +# Lint code +.PHONY: lint +lint: + @echo "Linting code..." + @go vet ./... + +# Show help +.PHONY: help +help: + @echo "Available targets:" + @echo " build - Build the binary in ./build directory" + @echo " deb - Build Debian package in ./dist directory" + @echo " clean - Clean build and dist directories" + @echo " deps - Install dependencies" + @echo " test - Run tests" + @echo " fmt - Format code" + @echo " lint - Lint code" + @echo " help - Show this help message" + diff --git a/README.md b/README.md index b793c9d..acb03ec 100644 --- a/README.md +++ b/README.md @@ -15,4 +15,5 @@ ${REPO_DESCRIPTION} ### Installation ```sh -go install [github.com/\]\(https\://github\.com/){REPO_OWNER}/${REPO_NAME}@latest +go install git.runcible.io/${REPO_OWNER}/${REPO_NAME}@latest +``` diff --git a/changlog b/changlog new file mode 100644 index 0000000..74e3072 --- /dev/null +++ b/changlog @@ -0,0 +1,7 @@ +${REPO_NAME} (1.0.0-1) unstable; urgency=medium + + * Initial release + * Basic Go application with version information + * Debian package support + + -- ${REPO_NAME} Maintainer $(date -R)