|
|
| OS ?= $(shell go env GOOS)
|
| ARCH ?= $(shell go env GOARCH)
|
|
|
| SKIP_WEB ?= false
|
|
|
|
|
|
|
|
|
| NVML ?= auto
|
|
|
|
|
| HOST_GLIBC := $(shell \
|
| if [ "$(OS)" = "linux" ] && [ "$(ARCH)" = "amd64" ]; then \
|
| for p in /lib64/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /lib/ld-linux-x86-64.so.2; do \
|
| [ -e "$$p" ] && { echo true; exit 0; }; \
|
| done; \
|
| if command -v ldd >/dev/null 2>&1; then \
|
| if ldd --version 2>&1 | tr '[:upper:]' '[:lower:]' | awk '/gnu libc|glibc/{found=1} END{exit !found}'; then \
|
| echo true; \
|
| else \
|
| echo false; \
|
| fi; \
|
| else \
|
| echo false; \
|
| fi; \
|
| else \
|
| echo false; \
|
| fi)
|
|
|
|
|
| AGENT_GO_TAGS :=
|
| ifeq ($(NVML),true)
|
| AGENT_GO_TAGS := -tags glibc
|
| else ifeq ($(NVML),auto)
|
| ifeq ($(HOST_GLIBC),true)
|
| AGENT_GO_TAGS := -tags glibc
|
| endif
|
| endif
|
|
|
|
|
| EXE_EXT := $(if $(filter windows,$(OS)),.exe,)
|
|
|
| .PHONY: tidy build-agent build-hub build-hub-dev build clean lint dev-server dev-agent dev-hub dev generate-locales fetch-smartctl-conditional
|
| .DEFAULT_GOAL := build
|
|
|
| clean:
|
| go clean
|
| rm -rf ./build
|
|
|
| lint:
|
| golangci-lint run
|
|
|
| test:
|
| go test -tags=testing ./...
|
|
|
| tidy:
|
| go mod tidy
|
|
|
| build-web-ui:
|
| @if command -v bun >/dev/null 2>&1; then \
|
| bun install --cwd ./internal/site && \
|
| bun run --cwd ./internal/site build; \
|
| else \
|
| npm install --prefix ./internal/site && \
|
| npm run --prefix ./internal/site build; \
|
| fi
|
|
|
|
|
| build-dotnet-conditional:
|
| @if [ "$(OS)" = "windows" ]; then \
|
| echo "Building .NET executable for Windows..."; \
|
| if command -v dotnet >/dev/null 2>&1; then \
|
| rm -rf ./agent/lhm/bin; \
|
| dotnet build -c Release ./agent/lhm/beszel_lhm.csproj; \
|
| else \
|
| echo "Error: dotnet not found. Install .NET SDK to build Windows agent."; \
|
| exit 1; \
|
| fi; \
|
| fi
|
|
|
|
|
| fetch-smartctl-conditional:
|
| @if [ "$(OS)" = "windows" ]; then \
|
| go generate -run fetchsmartctl ./agent; \
|
| fi
|
|
|
|
|
| build-agent: tidy build-dotnet-conditional fetch-smartctl-conditional
|
| GOOS=$(OS) GOARCH=$(ARCH) go build $(AGENT_GO_TAGS) -o ./build/beszel-agent_$(OS)_$(ARCH)$(EXE_EXT) -ldflags "-w -s" ./internal/cmd/agent
|
|
|
| build-hub: tidy $(if $(filter false,$(SKIP_WEB)),build-web-ui)
|
| GOOS=$(OS) GOARCH=$(ARCH) go build -o ./build/beszel_$(OS)_$(ARCH)$(EXE_EXT) -ldflags "-w -s" ./internal/cmd/hub
|
|
|
| build-hub-dev: tidy
|
| mkdir -p ./internal/site/dist && touch ./internal/site/dist/index.html
|
| GOOS=$(OS) GOARCH=$(ARCH) go build -tags development -o ./build/beszel-dev_$(OS)_$(ARCH)$(EXE_EXT) -ldflags "-w -s" ./internal/cmd/hub
|
|
|
| build: build-agent build-hub
|
|
|
| generate-locales:
|
| @if [ ! -f ./internal/site/src/locales/en/en.ts ]; then \
|
| echo "Generating locales..."; \
|
| command -v bun >/dev/null 2>&1 && cd ./internal/site && bun install && bun run sync || cd ./internal/site && npm install && npm run sync; \
|
| fi
|
|
|
| dev-server: generate-locales
|
| cd ./internal/site
|
| @if command -v bun >/dev/null 2>&1; then \
|
| cd ./internal/site && bun run dev --host 0.0.0.0; \
|
| else \
|
| cd ./internal/site && npm run dev --host 0.0.0.0; \
|
| fi
|
|
|
| dev-hub: export ENV=dev
|
| dev-hub:
|
| mkdir -p ./internal/site/dist && touch ./internal/site/dist/index.html
|
| @if command -v entr >/dev/null 2>&1; then \
|
| find ./internal -type f -name '*.go' | entr -r -s "cd ./internal/cmd/hub && go run -tags development . serve --http 0.0.0.0:8090"; \
|
| else \
|
| cd ./internal/cmd/hub && go run -tags development . serve --http 0.0.0.0:8090; \
|
| fi
|
|
|
| dev-agent:
|
| @if command -v entr >/dev/null 2>&1; then \
|
| find ./internal/cmd/agent/*.go ./agent/*.go | entr -r go run $(AGENT_GO_TAGS) github.com/henrygd/beszel/internal/cmd/agent; \
|
| else \
|
| go run $(AGENT_GO_TAGS) github.com/henrygd/beszel/internal/cmd/agent; \
|
| fi
|
|
|
| build-dotnet:
|
| @if command -v dotnet >/dev/null 2>&1; then \
|
| rm -rf ./agent/lhm/bin; \
|
| dotnet build -c Release ./agent/lhm/beszel_lhm.csproj; \
|
| else \
|
| echo "dotnet not found"; \
|
| fi
|
|
|
|
|
|
|
| dev: dev-server dev-hub dev-agent
|
|
|