Add build configuration
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/bin/
|
||||
144
Makefile
Normal file
144
Makefile
Normal file
@@ -0,0 +1,144 @@
|
||||
MODULE := github.com/chimerical-llc/odidere
|
||||
CMDS := $(notdir $(wildcard ./cmd/*))
|
||||
BINARIES := $(addprefix bin/,$(CMDS))
|
||||
|
||||
GO := go
|
||||
GOFMT := go fmt
|
||||
GOVET := go vet
|
||||
GOIMPORTS := go tool goimports
|
||||
DEADCODE := go tool deadcode
|
||||
GOVULNCHECK := go tool govulncheck
|
||||
BIOME := biome
|
||||
|
||||
BUILDFLAGS := -buildvcs=true
|
||||
PLATFORMS := linux/amd64
|
||||
|
||||
.PHONY: all build build-all buildinfo check clean deadcode deps fmt help \
|
||||
imports install lint run test tidy tools uninstall verify vet \
|
||||
vulncheck $(CMDS)
|
||||
|
||||
## Build all binaries (default target)
|
||||
all: build
|
||||
|
||||
## Display this help screen
|
||||
help:
|
||||
@awk ' \
|
||||
/^##/ { doc = substr($$0, 4); next } \
|
||||
/^[a-zA-Z0-9_-]+:/ && doc { \
|
||||
split($$1, target, ":"); \
|
||||
printf "\033[36m%-20s\033[0m %s\n", target[1], doc; \
|
||||
doc = "" \
|
||||
} \
|
||||
' $(MAKEFILE_LIST)
|
||||
|
||||
## Build all binaries to bin/
|
||||
build: $(BINARIES)
|
||||
|
||||
## Build binaries for all defined platforms
|
||||
build-all:
|
||||
@for cmd in $(CMDS); do \
|
||||
for platform in $(PLATFORMS); do \
|
||||
echo "Building $$cmd for $$platform..."; \
|
||||
out="bin/$$cmd-$${platform%/*}-$${platform#*/}"; \
|
||||
GOOS=$${platform%/*} GOARCH=$${platform#*/} \
|
||||
$(GO) build $(BUILDFLAGS) -o $$out ./cmd/$$cmd; \
|
||||
done; \
|
||||
done
|
||||
|
||||
## Build specific binaries (pattern rule)
|
||||
bin/%: ./cmd/%
|
||||
$(GO) build $(BUILDFLAGS) -o $@ ./$<
|
||||
|
||||
## Shortcut targets to build specific commands (e.g., 'make admin')
|
||||
$(CMDS):
|
||||
$(GO) build $(BUILDFLAGS) -o bin/$@ ./cmd/$@
|
||||
|
||||
## Show version info for built binaries
|
||||
buildinfo: build
|
||||
@for bin in $(BINARIES); do \
|
||||
if [ -x $$bin ]; then \
|
||||
echo "Info for $$bin:"; \
|
||||
$(GO) version -m $$bin || true; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
## Run tests with race detection and coverage
|
||||
test:
|
||||
$(GO) test -cover -race ./...
|
||||
|
||||
## Run all linters (fmt, vet, imports, deadcode, vulncheck)
|
||||
lint: fmt vet imports deadcode vulncheck biome
|
||||
|
||||
## Format code using go fmt
|
||||
fmt:
|
||||
$(GOFMT) ./...
|
||||
|
||||
## Fix imports and format using goimports
|
||||
imports:
|
||||
$(GOIMPORTS) -w -local "$(MODULE)" .
|
||||
|
||||
## Run go vet
|
||||
vet:
|
||||
$(GOVET) ./...
|
||||
|
||||
## Find dead code
|
||||
deadcode:
|
||||
$(DEADCODE) ./...
|
||||
|
||||
## Check for vulnerabilities
|
||||
vulncheck:
|
||||
$(GOVULNCHECK) ./...
|
||||
|
||||
## Run integration checks (alias for lint)
|
||||
check: lint
|
||||
|
||||
## Tidy go.mod dependencies
|
||||
tidy:
|
||||
$(GO) mod tidy
|
||||
|
||||
## Download dependencies
|
||||
deps:
|
||||
$(GO) mod download
|
||||
|
||||
## Verify dependencies
|
||||
verify:
|
||||
$(GO) mod verify
|
||||
|
||||
## Install development tools
|
||||
tools:
|
||||
go get -tool golang.org/x/tools/cmd/deadcode@latest
|
||||
go get -tool golang.org/x/tools/cmd/goimports@latest
|
||||
go get -tool golang.org/x/vuln/cmd/govulncheck@latest
|
||||
|
||||
## Run the specified CMD binary (use ARGS="..." to pass arguments)
|
||||
# trap '' INT prevents colorize-logs from exiting immediately on Ctrl-C,
|
||||
# allowing it to print remaining output before the application terminates.
|
||||
run: clean bin/$(CMD)
|
||||
./bin/$(CMD) $(ARGS) 2>&1 | (trap '' INT; colorize-logs)
|
||||
|
||||
## Clean build artifacts
|
||||
clean:
|
||||
$(GO) clean
|
||||
rm -f bin/*
|
||||
|
||||
## Install binaries to $GOBIN
|
||||
install:
|
||||
$(GO) install $(BUILDFLAGS) ./cmd/...
|
||||
|
||||
## Uninstall binaries from $GOBIN
|
||||
uninstall:
|
||||
@for cmd in $(CMDS); do \
|
||||
path=$$( $(GO) env GOBIN )/$$cmd; \
|
||||
if [ -z "$$( $(GO) env GOBIN )" ]; \
|
||||
then path=$$( $(GO) env GOPATH )/bin/$$cmd; fi; \
|
||||
echo "Removing $$path"; \
|
||||
rm -f $$path; \
|
||||
done
|
||||
|
||||
## Lint and format JS/CSS with Biome
|
||||
biome:
|
||||
$(BIOME) check --write internal/service/static/
|
||||
|
||||
## Check JS/CSS without writing (for CI)
|
||||
biome-ci:
|
||||
$(BIOME) ci internal/service/static/
|
||||
47
biome.json
Normal file
47
biome.json
Normal file
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.13/schema.json",
|
||||
"vcs": {
|
||||
"enabled": true,
|
||||
"clientKind": "git",
|
||||
"useIgnoreFile": true
|
||||
},
|
||||
"assist": {
|
||||
"actions": {
|
||||
"source": {
|
||||
"organizeImports": "on"
|
||||
}
|
||||
}
|
||||
},
|
||||
"linter": {
|
||||
"enabled": true,
|
||||
"rules": {
|
||||
"recommended": true
|
||||
}
|
||||
},
|
||||
"formatter": {
|
||||
"enabled": true,
|
||||
"indentStyle": "space",
|
||||
"indentWidth": 2,
|
||||
"lineWidth": 80
|
||||
},
|
||||
"javascript": {
|
||||
"formatter": {
|
||||
"quoteStyle": "single",
|
||||
"semicolons": "always"
|
||||
}
|
||||
},
|
||||
"css": {
|
||||
"formatter": {
|
||||
"enabled": true
|
||||
},
|
||||
"linter": {
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"files": {
|
||||
"includes": [
|
||||
"internal/service/static/**/*.js",
|
||||
"internal/service/static/**/*.css"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user