feat(vault-tui): implement KV client and service for managing secrets
- Added internal/vault/client.go for creating a Vault client with configuration settings. - Introduced internal/vault/errors.go to classify Vault API errors for better UI handling. - Created internal/vault/kv.go to manage KV secrets, including listing, reading, writing, and deleting operations. - Implemented internal/vault/mounts.go to list and describe secret engine mounts. - Developed internal/vault/service.go to provide a unified entry point for Vault operations. - Added internal/vault/kv_test.go for comprehensive testing of KV operations. - Introduced internal/ui/toast.go for transient notifications in the UI. - Added renovate.json for dependency management and updates.
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
SHELL := /bin/sh
|
||||
|
||||
MODULE := git.morlana.online/f.weber/vault-tui
|
||||
PKG := ./cmd/vault-tui
|
||||
BIN := vault-tui
|
||||
DIST := dist
|
||||
PREFIX ?= $(HOME)/.local
|
||||
GOBIN ?= $(PREFIX)/bin
|
||||
|
||||
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
|
||||
COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo none)
|
||||
DATE := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
||||
LDFLAGS := -s -w -X main.version=$(VERSION)
|
||||
GOFLAGS := -trimpath
|
||||
CGO_ENABLED ?= 0
|
||||
|
||||
TAGS ?=
|
||||
CLOUD_TAGS := cloud
|
||||
|
||||
PLATFORMS ?= linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64
|
||||
|
||||
GOLANGCI := $(shell command -v golangci-lint 2>/dev/null)
|
||||
|
||||
.PHONY: help build build-cloud all run run-cloud install install-cloud uninstall \
|
||||
test test-race test-cloud cover cover-html fmt fmt-check vet lint tidy tidy-check \
|
||||
check release release-cloud clean version
|
||||
|
||||
## help: show this help
|
||||
help:
|
||||
@echo "vault-tui — make targets"
|
||||
@echo ""
|
||||
@awk 'BEGIN {FS = ":.*## "} /^[a-zA-Z0-9_-]+:.*## / {printf " \033[36m%-16s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||
@echo ""
|
||||
@echo "Variables: TAGS=cloud (adds cloud auth to any target), PREFIX, GOBIN, PLATFORMS, VERSION"
|
||||
|
||||
## build: build the default binary (no cloud auth) into dist/
|
||||
build: ## build the default binary (no cloud auth) into dist/
|
||||
@mkdir -p $(DIST)
|
||||
CGO_ENABLED=$(CGO_ENABLED) go build $(GOFLAGS) -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $(DIST)/$(BIN) $(PKG)
|
||||
@echo "built $(DIST)/$(BIN) ($(VERSION))"
|
||||
|
||||
## build-cloud: build with AWS/Azure/GCP auth included
|
||||
build-cloud: ## build with AWS/Azure/GCP auth included
|
||||
@$(MAKE) build TAGS="$(CLOUD_TAGS) $(TAGS)" BIN=$(BIN)-cloud
|
||||
|
||||
## all: build both the default and cloud-enabled binaries
|
||||
all: build build-cloud ## build both the default and cloud-enabled binaries
|
||||
|
||||
## run: build and run the default binary (pass args via ARGS="...")
|
||||
run: build ## build and run the default binary (pass args via ARGS="...")
|
||||
@./$(DIST)/$(BIN) $(ARGS)
|
||||
|
||||
## run-cloud: build and run the cloud-enabled binary (pass args via ARGS="...")
|
||||
run-cloud: build-cloud ## build and run the cloud-enabled binary (pass args via ARGS="...")
|
||||
@./$(DIST)/$(BIN)-cloud $(ARGS)
|
||||
|
||||
## install: go install the default binary into GOBIN/PREFIX
|
||||
install: ## go install the default binary into GOBIN/PREFIX
|
||||
GOBIN=$(GOBIN) CGO_ENABLED=$(CGO_ENABLED) go install $(GOFLAGS) -tags '$(TAGS)' -ldflags '$(LDFLAGS)' $(PKG)
|
||||
@echo "installed $(BIN) to $(GOBIN)"
|
||||
|
||||
## install-cloud: go install the cloud-enabled binary into GOBIN/PREFIX
|
||||
install-cloud: ## go install the cloud-enabled binary into GOBIN/PREFIX
|
||||
@$(MAKE) install TAGS="$(CLOUD_TAGS) $(TAGS)"
|
||||
|
||||
## uninstall: remove the installed binary from GOBIN/PREFIX
|
||||
uninstall: ## remove the installed binary from GOBIN/PREFIX
|
||||
rm -f $(GOBIN)/$(BIN)
|
||||
|
||||
## test: run tests (default build tags)
|
||||
test: ## run tests (default build tags)
|
||||
go test $(GOFLAGS) -tags '$(TAGS)' ./...
|
||||
|
||||
## test-race: run tests with the race detector
|
||||
test-race: ## run tests with the race detector
|
||||
CGO_ENABLED=1 go test $(GOFLAGS) -tags '$(TAGS)' -race ./...
|
||||
|
||||
## test-cloud: run tests with cloud auth compiled in
|
||||
test-cloud: ## run tests with cloud auth compiled in
|
||||
@$(MAKE) test TAGS="$(CLOUD_TAGS) $(TAGS)"
|
||||
|
||||
## cover: run tests and write coverage.out
|
||||
cover: ## run tests and write coverage.out
|
||||
go test $(GOFLAGS) -tags '$(TAGS)' -coverprofile=coverage.out ./...
|
||||
go tool cover -func=coverage.out | tail -1
|
||||
|
||||
## cover-html: open an HTML coverage report from coverage.out
|
||||
cover-html: cover ## open an HTML coverage report from coverage.out
|
||||
go tool cover -html=coverage.out -o coverage.html
|
||||
@echo "wrote coverage.html"
|
||||
|
||||
## fmt: format all Go source in place
|
||||
fmt: ## format all Go source in place
|
||||
gofmt -l -w .
|
||||
|
||||
## fmt-check: fail if any file is not gofmt-formatted
|
||||
fmt-check: ## fail if any file is not gofmt-formatted
|
||||
@unformatted="$$(gofmt -l .)"; \
|
||||
if [ -n "$$unformatted" ]; then \
|
||||
echo "not gofmt-formatted:"; echo "$$unformatted"; exit 1; \
|
||||
fi
|
||||
|
||||
## vet: run go vet
|
||||
vet: ## run go vet
|
||||
go vet -tags '$(TAGS)' ./...
|
||||
|
||||
## lint: run golangci-lint if installed, else fall back to go vet
|
||||
lint: ## run golangci-lint if installed, else fall back to go vet
|
||||
ifdef GOLANGCI
|
||||
golangci-lint run ./...
|
||||
else
|
||||
@echo "golangci-lint not found on PATH — running go vet instead"
|
||||
@echo "install: https://golangci-lint.run/welcome/install/"
|
||||
@$(MAKE) vet
|
||||
endif
|
||||
|
||||
## tidy: run go mod tidy
|
||||
tidy: ## run go mod tidy
|
||||
go mod tidy
|
||||
|
||||
## tidy-check: fail if go mod tidy would change go.mod/go.sum
|
||||
tidy-check: ## fail if go mod tidy would change go.mod/go.sum
|
||||
@cp go.mod /tmp/vault-tui-go.mod.orig; cp go.sum /tmp/vault-tui-go.sum.orig
|
||||
@go mod tidy
|
||||
@diff -q /tmp/vault-tui-go.mod.orig go.mod >/dev/null && diff -q /tmp/vault-tui-go.sum.orig go.sum >/dev/null \
|
||||
|| (echo "go.mod/go.sum are not tidy — run 'make tidy' and commit the result" && \
|
||||
cp /tmp/vault-tui-go.mod.orig go.mod && cp /tmp/vault-tui-go.sum.orig go.sum && exit 1)
|
||||
@rm -f /tmp/vault-tui-go.mod.orig /tmp/vault-tui-go.sum.orig
|
||||
|
||||
## check: fmt-check + vet + lint + test — the pre-commit/CI gate
|
||||
check: fmt-check vet lint test ## fmt-check + vet + lint + test — the pre-commit/CI gate
|
||||
|
||||
## release: cross-compile the default binary for PLATFORMS into dist/, with archives + checksums
|
||||
release: ## cross-compile the default binary for PLATFORMS into dist/, with archives + checksums
|
||||
@$(MAKE) _release TAGS="$(TAGS)" SUFFIX=""
|
||||
|
||||
## release-cloud: cross-compile the cloud-enabled binary for PLATFORMS into dist/
|
||||
release-cloud: ## cross-compile the cloud-enabled binary for PLATFORMS into dist/
|
||||
@$(MAKE) _release TAGS="$(CLOUD_TAGS) $(TAGS)" SUFFIX="-cloud"
|
||||
|
||||
.PHONY: _release
|
||||
_release:
|
||||
@mkdir -p $(DIST)
|
||||
@for plat in $(PLATFORMS); do \
|
||||
os=$${plat%/*}; arch=$${plat#*/}; \
|
||||
out=$(BIN)$(SUFFIX)-$(VERSION)-$$os-$$arch; \
|
||||
ext=""; [ "$$os" = "windows" ] && ext=".exe"; \
|
||||
echo "building $$out$$ext"; \
|
||||
GOOS=$$os GOARCH=$$arch CGO_ENABLED=0 go build $(GOFLAGS) -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $(DIST)/$$out$$ext $(PKG) || exit 1; \
|
||||
( cd $(DIST) && \
|
||||
if [ "$$os" = "windows" ]; then \
|
||||
zip -q $$out.zip $$out$$ext && rm -f $$out$$ext; \
|
||||
else \
|
||||
tar -czf $$out.tar.gz $$out && rm -f $$out; \
|
||||
fi ); \
|
||||
done
|
||||
@( cd $(DIST) && sha256sum $(BIN)$(SUFFIX)-$(VERSION)-* > checksums-$(BIN)$(SUFFIX)-$(VERSION).txt 2>/dev/null \
|
||||
|| shasum -a 256 $(BIN)$(SUFFIX)-$(VERSION)-* > checksums-$(BIN)$(SUFFIX)-$(VERSION).txt )
|
||||
@echo "release artifacts in $(DIST)/"
|
||||
|
||||
## clean: remove build artifacts
|
||||
clean: ## remove build artifacts
|
||||
rm -rf $(DIST) coverage.out coverage.html vault-tui vault-tui-cloud
|
||||
|
||||
## version: print the version make would embed
|
||||
version: ## print the version make would embed
|
||||
@echo "$(VERSION) (commit $(COMMIT), built $(DATE))"
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
Reference in New Issue
Block a user