mirror of
https://github.com/esengine/DeepSeek-Reasonix.git
synced 2026-11-07 10:45:59 -10:00
Two things cost a full CI round trip each, both avoidable. REASONIX.md told contributors golangci-lint was "not locally available", so nobody ran it. It always was: lint-cross already shells out to it. What was missing is a pinned version and one command. `.golangci-version` is now the single pin the Makefile and the lint job both read, `make lint-install` installs it (with CGO_ENABLED=0, so a stray clang on PATH cannot break the install), and `make lint` runs the same two gates CI runs, in the same order. Replaying a recent PR's diff through it reproduces the exact `modernize` finding CI took ten minutes to report. The Windows smoke step then failed on a run whose only change was two test fixtures. Across four consecutive runs of near-identical code, internal/boot measured 133s, 146s, 162s and 180s, and internal/agent 82s, 92s, 144s and 180s: a 2.2x spread from runner variance, four heavy packages sharing four vCPUs. A 3 minute per-package timeout sat inside that spread, so the step was one slow runner away from failing at any time. It is 8m now, still well inside the step's own 15 minute budget, which is what actually catches a hang. Neither change touches what is tested.
84 lines
2.8 KiB
Makefile
84 lines
2.8 KiB
Makefile
VERSION := $(shell git describe --tags --always 2>/dev/null || echo dev)
|
|
BUILD_TIME_UTC := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
GIT_COMMIT := $(shell git rev-parse --short=12 HEAD 2>/dev/null || echo unknown)
|
|
LDFLAGS := -s -w \
|
|
-X main.version=$(VERSION) \
|
|
-X main.gitCommit=$(GIT_COMMIT) \
|
|
-X main.buildTimeUTC=$(BUILD_TIME_UTC)
|
|
GOEXE := $(shell go env GOEXE)
|
|
# One pin for the Makefile and the CI lint job; see .github/workflows/ci.yml.
|
|
GOLANGCI_VERSION := $(shell cat .golangci-version)
|
|
|
|
.PHONY: build vet fmt lint lint-go lint-install lint-cross lint-update test desktop-test desktop-test-short desktop-test-times sdk-test sdk-test-race hooks cross clean
|
|
|
|
build:
|
|
CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o bin/reasonix$(GOEXE) ./cmd/reasonix
|
|
CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o bin/reasonix-plugin-example$(GOEXE) ./cmd/reasonix-plugin-example
|
|
|
|
vet:
|
|
go vet ./...
|
|
|
|
fmt:
|
|
gofmt -w .
|
|
|
|
# Both gates CI runs, at the version CI pins. Skipping golangci-lint locally
|
|
# trades a second here for a ten-minute CI round trip: `modernize` findings in
|
|
# particular never surface in `go vet`.
|
|
lint: lint-go
|
|
go run ./tools/repolint
|
|
|
|
lint-go:
|
|
@command -v golangci-lint >/dev/null || { echo "golangci-lint not installed; run: make lint-install"; exit 1; }
|
|
@have=$$(golangci-lint version --short 2>/dev/null); want=$$(echo "$(GOLANGCI_VERSION)" | sed 's/^v//'); \
|
|
[ "$$have" = "$$want" ] || echo "warning: local golangci-lint $$have, CI pins $$want (make lint-install)"
|
|
golangci-lint run --timeout=5m ./...
|
|
|
|
# CGO_ENABLED=0 keeps the install working where a stray clang on PATH shadows
|
|
# the toolchain and breaks runtime/cgo.
|
|
lint-install:
|
|
CGO_ENABLED=0 go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCI_VERSION)
|
|
|
|
lint-update:
|
|
go run ./tools/repolint -update
|
|
|
|
# Linting one GOOS leaves every //go:build windows and darwin file unchecked.
|
|
lint-cross:
|
|
@for t in "linux ." "darwin ." "windows ." "linux desktop" "windows desktop"; do \
|
|
set -- $$t; \
|
|
echo "== golangci-lint GOOS=$$1 ($$2)"; \
|
|
(cd $$2 && GOOS=$$1 golangci-lint run --timeout=5m ./...) || exit 1; \
|
|
done
|
|
|
|
test:
|
|
go test ./...
|
|
|
|
desktop-test:
|
|
cd desktop && go test .
|
|
|
|
desktop-test-short:
|
|
cd desktop && go test -short .
|
|
|
|
desktop-test-times:
|
|
cd desktop && go test -count=1 -json . | python3 ../scripts/desktop-test-times.py
|
|
|
|
sdk-test:
|
|
cd sdk/go && go test ./...
|
|
|
|
sdk-test-race:
|
|
cd sdk/go && go test -race ./...
|
|
|
|
hooks:
|
|
@git config core.hooksPath .githooks
|
|
@echo "installed: core.hooksPath -> .githooks (pre-push runs go vet)"
|
|
|
|
cross:
|
|
@mkdir -p dist
|
|
@for p in darwin/amd64 darwin/arm64 linux/amd64 linux/arm64 windows/amd64 windows/arm64; do \
|
|
os=$${p%/*}; arch=$${p#*/}; ext=; [ $$os = windows ] && ext=.exe; \
|
|
echo "build $$os/$$arch"; \
|
|
CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch go build -ldflags "$(LDFLAGS)" -o dist/reasonix-$$os-$$arch$$ext ./cmd/reasonix; \
|
|
done
|
|
|
|
clean:
|
|
rm -rf bin dist
|