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:
55
.goreleaser.yaml
Normal file
55
.goreleaser.yaml
Normal 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
|
||||||
35
Makefile
35
Makefile
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user