Add release process via goreleaser, restructure Make targets

make targets each do one thing now: lint, fmt, fmt-check, test. Use
'make check' for combined lint + fmt-check + test (the standard
pre-commit gate).

Release builds are pure-Go (CGO_ENABLED=0) cross-compiling to
linux/darwin × amd64/arm64.
This commit is contained in:
2026-05-01 07:07:23 +02:00
parent 9f2d722734
commit f9ebb4bf25
2 changed files with 78 additions and 12 deletions

55
.goreleaser.yaml Normal file
View File

@@ -0,0 +1,55 @@
version: 2
project_name: vaultik
before:
hooks:
- go mod tidy
builds:
- id: vaultik
main: ./cmd/vaultik
binary: vaultik
env:
- CGO_ENABLED=0
goos:
- linux
- darwin
goarch:
- amd64
- arm64
ldflags:
- -s -w
- -X 'git.eeqj.de/sneak/vaultik/internal/globals.Version={{ .Version }}'
- -X 'git.eeqj.de/sneak/vaultik/internal/globals.Commit={{ .Commit }}'
archives:
- id: default
name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"
formats:
- tar.gz
files:
- LICENSE
- README.md
checksum:
name_template: "checksums.txt"
algorithm: sha256
snapshot:
version_template: "{{ incpatch .Version }}-next"
changelog:
sort: asc
use: git
filters:
exclude:
- "^docs:"
- "^test:"
- "^chore:"
- "Merge pull request"
- "Merge branch"
release:
draft: true
prerelease: auto

View File

@@ -1,7 +1,7 @@
.PHONY: test fmt lint build clean all .PHONY: all check test lint fmt fmt-check build clean deps test-coverage test-integration local install release release-snapshot
# Version number # Version number
VERSION := 0.0.1 VERSION := 1.0.0-rc.1
# Build variables # Build variables
GIT_REVISION := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown") GIT_REVISION := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown")
@@ -13,8 +13,11 @@ LDFLAGS := -X 'git.eeqj.de/sneak/vaultik/internal/globals.Version=$(VERSION)' \
# Default target # Default target
all: vaultik all: vaultik
# Run tests # Combined pre-commit/CI gate: lint, format check, then tests.
test: lint fmt-check check: lint fmt-check test
# Run tests only.
test:
@echo "Running tests..." @echo "Running tests..."
@if ! go test -v -timeout 10s ./... 2>&1; then \ @if ! go test -v -timeout 10s ./... 2>&1; then \
echo ""; \ echo ""; \
@@ -23,41 +26,41 @@ test: lint fmt-check
exit 1; \ exit 1; \
fi fi
# Check if code is formatted # Check if code is formatted.
fmt-check: fmt-check:
@if [ -n "$$(go fmt ./...)" ]; then \ @if [ -n "$$(go fmt ./...)" ]; then \
echo "Error: Code is not formatted. Run 'make fmt' to fix."; \ echo "Error: Code is not formatted. Run 'make fmt' to fix."; \
exit 1; \ exit 1; \
fi fi
# Format code # Format code.
fmt: fmt:
go fmt ./... go fmt ./...
# Run linter # Run linter only.
lint: lint:
golangci-lint run golangci-lint run
# Build binary # Build binary.
vaultik: internal/*/*.go cmd/vaultik/*.go vaultik: internal/*/*.go cmd/vaultik/*.go
go build -ldflags "$(LDFLAGS)" -o $@ ./cmd/vaultik go build -ldflags "$(LDFLAGS)" -o $@ ./cmd/vaultik
# Clean build artifacts # Clean build artifacts.
clean: clean:
rm -f vaultik rm -f vaultik
go clean go clean
# Install dependencies # Install dependencies.
deps: deps:
go mod download go mod download
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# Run tests with coverage # Run tests with coverage.
test-coverage: test-coverage:
go test -v -coverprofile=coverage.out ./... go test -v -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html go tool cover -html=coverage.out -o coverage.html
# Run integration tests # Run integration tests.
test-integration: test-integration:
go test -v -tags=integration ./... go test -v -tags=integration ./...
@@ -67,3 +70,11 @@ local:
install: vaultik install: vaultik
cp ./vaultik $(HOME)/bin/ cp ./vaultik $(HOME)/bin/
# Build and publish release artifacts (linux/darwin × amd64/arm64) via goreleaser.
release:
goreleaser release --clean
# Dry-run a release build without publishing or tagging.
release-snapshot:
goreleaser release --clean --snapshot