mirror of
https://github.com/SigNoz/signoz.git
synced 2026-04-25 16:59:51 -05:00
f62024ad3f
* chore(frontend): remove stale e2e scaffold
frontend/e2e/ held an unused settings-only test-plan scaffold from Oct 2025.
Active Playwright specs live at tests/e2e/. Drop the directory, the orphan
playwright.config.ts, the @playwright/test dependency, and the tsconfig
references that pinned them.
* chore(e2e): migrate formatter from prettier to oxfmt
Swap tests/e2e/ onto oxfmt — same tool the frontend adopted in #11057. Style
matches frontend/.oxfmtrc.json (tabs, tabWidth:1) so the two TS trees stay
visually consistent. Drops .prettierrc.json and .prettierignore, adds the
fmt/fmt:check yarn scripts, and reformats the existing specs.
* chore(e2e): migrate linter from eslint to oxlint
Drop eslint + @typescript-eslint plugins in favour of oxlint 1.59 + tsgolint
— same toolchain the frontend adopted in #10176. The .oxlintrc.json mirrors
frontend/.oxlintrc.json with plugins scoped to a Playwright TS codebase
(eslint, typescript, unicorn, import, promise).
Divergence: eslint-plugin-playwright is not ported. Its rules depend on
ESLint APIs (context.getAncestors) that oxlint's JS plugin shim does not
implement, so the five playwright/* rules are dropped in this migration.
* ci(e2e): add fmtlint job
Mirror integrationci.yaml's fmtlint job for e2e. Runs oxfmt --check and
oxlint on tests/e2e/ under the same safe-to-e2e label gating as the
existing test job.
* chore(integration): migrate python tooling from black/pylint/isort/autoflake to ruff
Replace the four-tool stack with ruff — same motivation as the oxfmt/oxlint
swap on the TS side. One tool covers formatting (ruff format), import
sorting (I), unused-import/variable cleanup (F401/F841), and the pylint
rules we actually care about (E/W/F/UP/B/PL).
Rule set mirrors the intent of the prior pylint config: too-many-* checks
and magic-value-comparison stay disabled, dangerous-default-value (now
B006) stays muted. A handful of newly-surfaced codes (B011/B024/B905/E741/
UP047/PLC0206/PLW2901) are also muted to keep this a pure tool swap — each
deserves its own review before enabling.
Divergence: ruff caps line-length at 320, so the prior pylint value of 400
drops to 320. Nothing in tree exceeds 320, so no lines wrap.
No changes to integrationci.yaml — both fmt/lint steps still call
make py-fmt / make py-lint, which now dispatch to ruff.
* chore(e2e): restore playwright lint rules via oxlint jsPlugin
eslint-plugin-playwright@2.x was rewritten against ESLint 8's
context.sourceCode.getAncestors() API, which oxlint's JS plugin shim
exposes. The 0.16.x version previously ruled out by context.getAncestors()
missing is no longer a blocker. Bump to 2.10.2, re-add it as a jsPlugin,
and restore the five rules dropped in the initial oxlint migration:
expect-expect, no-conditional-in-test, no-page-pause, no-wait-for-timeout,
prefer-web-first-assertions.
Rule count: 104 → 109.
* chore(frontend): remove stale e2e prompt
frontend/prompts/generate-e2e-test.md is leftover from the same Oct 2025
scaffold removed in ebf735dcc. It references frontend/e2e/utils/login.util.ts,
which no longer exists, and is not wired into anything.
* chore(e2e): make .env.local write layout explicit
The single f-string with inline \n escapes read as a wall of text after
ruff's line-length allowance collapsed it onto one line. Switch to a
triple-quoted f-string so the generated .env.local structure is visible
in source. Byte-for-byte identical output.
* chore(e2e): write .env.local one key per line
Open the file with a context manager and emit each key with its own
f.write call. Same output as before, but each key-value pair is a
discrete statement.
240 lines
11 KiB
Makefile
240 lines
11 KiB
Makefile
##############################################################
|
|
# variables
|
|
##############################################################
|
|
SHELL := /bin/bash
|
|
SRC ?= $(shell pwd)
|
|
NAME ?= signoz
|
|
OS ?= $(shell uname -s | tr '[A-Z]' '[a-z]')
|
|
ARCH ?= $(shell uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')
|
|
COMMIT_SHORT_SHA ?= $(shell git rev-parse --short HEAD)
|
|
BRANCH_NAME ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
|
|
VERSION ?= $(BRANCH_NAME)-$(COMMIT_SHORT_SHA)
|
|
TIMESTAMP ?= $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
ARCHS ?= amd64 arm64
|
|
TARGET_DIR ?= $(shell pwd)/target
|
|
|
|
ZEUS_URL ?= https://api.signoz.cloud
|
|
GO_BUILD_LDFLAG_ZEUS_URL = -X github.com/SigNoz/signoz/ee/zeus.url=$(ZEUS_URL)
|
|
LICENSE_URL ?= https://license.signoz.io
|
|
GO_BUILD_LDFLAG_LICENSE_SIGNOZ_IO = -X github.com/SigNoz/signoz/ee/zeus.deprecatedURL=$(LICENSE_URL)
|
|
|
|
GO_BUILD_VERSION_LDFLAGS = -X github.com/SigNoz/signoz/pkg/version.version=$(VERSION) -X github.com/SigNoz/signoz/pkg/version.hash=$(COMMIT_SHORT_SHA) -X github.com/SigNoz/signoz/pkg/version.time=$(TIMESTAMP) -X github.com/SigNoz/signoz/pkg/version.branch=$(BRANCH_NAME)
|
|
GO_BUILD_ARCHS_COMMUNITY = $(addprefix go-build-community-,$(ARCHS))
|
|
GO_BUILD_CONTEXT_COMMUNITY = $(SRC)/cmd/community
|
|
GO_BUILD_LDFLAGS_COMMUNITY = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=community
|
|
GO_BUILD_ARCHS_ENTERPRISE = $(addprefix go-build-enterprise-,$(ARCHS))
|
|
GO_BUILD_ARCHS_ENTERPRISE_RACE = $(addprefix go-build-enterprise-race-,$(ARCHS))
|
|
GO_BUILD_CONTEXT_ENTERPRISE = $(SRC)/cmd/enterprise
|
|
GO_BUILD_LDFLAGS_ENTERPRISE = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=enterprise $(GO_BUILD_LDFLAG_ZEUS_URL) $(GO_BUILD_LDFLAG_LICENSE_SIGNOZ_IO)
|
|
|
|
DOCKER_BUILD_ARCHS_COMMUNITY = $(addprefix docker-build-community-,$(ARCHS))
|
|
DOCKERFILE_COMMUNITY = $(SRC)/cmd/community/Dockerfile
|
|
DOCKER_REGISTRY_COMMUNITY ?= docker.io/signoz/signoz-community
|
|
DOCKER_BUILD_ARCHS_ENTERPRISE = $(addprefix docker-build-enterprise-,$(ARCHS))
|
|
DOCKERFILE_ENTERPRISE = $(SRC)/cmd/enterprise/Dockerfile
|
|
DOCKER_REGISTRY_ENTERPRISE ?= docker.io/signoz/signoz
|
|
JS_BUILD_CONTEXT = $(SRC)/frontend
|
|
|
|
##############################################################
|
|
# directories
|
|
##############################################################
|
|
$(TARGET_DIR):
|
|
mkdir -p $(TARGET_DIR)
|
|
|
|
##############################################################
|
|
# common commands
|
|
##############################################################
|
|
.PHONY: help
|
|
help: ## Displays help.
|
|
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n\nTargets:\n"} /^[a-z0-9A-Z_-]+:.*?##/ { printf " \033[36m%-40s\033[0m %s\n", $$1, $$2 }' $(MAKEFILE_LIST)
|
|
|
|
##############################################################
|
|
# devenv commands
|
|
##############################################################
|
|
.PHONY: devenv-clickhouse
|
|
devenv-clickhouse: ## Run clickhouse in devenv
|
|
@cd .devenv/docker/clickhouse; \
|
|
docker compose -f compose.yaml up -d
|
|
|
|
.PHONY: devenv-postgres
|
|
devenv-postgres: ## Run postgres in devenv
|
|
@cd .devenv/docker/postgres; \
|
|
docker compose -f compose.yaml up -d
|
|
|
|
.PHONY: devenv-signoz-otel-collector
|
|
devenv-signoz-otel-collector: ## Run signoz-otel-collector in devenv (requires clickhouse to be running)
|
|
@cd .devenv/docker/signoz-otel-collector; \
|
|
docker compose -f compose.yaml up -d
|
|
|
|
.PHONY: devenv-up
|
|
devenv-up: devenv-clickhouse devenv-signoz-otel-collector ## Start both clickhouse and signoz-otel-collector for local development
|
|
@echo "Development environment is ready!"
|
|
@echo " - ClickHouse: http://localhost:8123"
|
|
@echo " - Signoz OTel Collector: grpc://localhost:4317, http://localhost:4318"
|
|
|
|
.PHONY: devenv-clickhouse-clean
|
|
devenv-clickhouse-clean: ## Clean all ClickHouse data from filesystem
|
|
@echo "Removing ClickHouse data..."
|
|
@rm -rf .devenv/docker/clickhouse/fs/tmp/*
|
|
@echo "ClickHouse data cleaned!"
|
|
|
|
##############################################################
|
|
# go commands
|
|
##############################################################
|
|
.PHONY: go-run-enterprise
|
|
go-run-enterprise: ## Runs the enterprise go backend server
|
|
@SIGNOZ_INSTRUMENTATION_LOGS_LEVEL=debug \
|
|
SIGNOZ_SQLSTORE_SQLITE_PATH=signoz.db \
|
|
SIGNOZ_WEB_ENABLED=false \
|
|
SIGNOZ_TOKENIZER_JWT_SECRET=secret \
|
|
SIGNOZ_ALERTMANAGER_PROVIDER=signoz \
|
|
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
|
|
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
|
|
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_CLUSTER=cluster \
|
|
go run -race \
|
|
$(GO_BUILD_CONTEXT_ENTERPRISE)/*.go server
|
|
|
|
.PHONY: go-test
|
|
go-test: ## Runs go unit tests
|
|
@go test -race ./...
|
|
|
|
.PHONY: go-run-community
|
|
go-run-community: ## Runs the community go backend server
|
|
@SIGNOZ_INSTRUMENTATION_LOGS_LEVEL=debug \
|
|
SIGNOZ_SQLSTORE_SQLITE_PATH=signoz.db \
|
|
SIGNOZ_WEB_ENABLED=false \
|
|
SIGNOZ_TOKENIZER_JWT_SECRET=secret \
|
|
SIGNOZ_ALERTMANAGER_PROVIDER=signoz \
|
|
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
|
|
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
|
|
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_CLUSTER=cluster \
|
|
go run -race \
|
|
$(GO_BUILD_CONTEXT_COMMUNITY)/*.go server
|
|
|
|
.PHONY: go-build-community $(GO_BUILD_ARCHS_COMMUNITY)
|
|
go-build-community: ## Builds the go backend server for community
|
|
go-build-community: $(GO_BUILD_ARCHS_COMMUNITY)
|
|
$(GO_BUILD_ARCHS_COMMUNITY): go-build-community-%: $(TARGET_DIR)
|
|
@mkdir -p $(TARGET_DIR)/$(OS)-$*
|
|
@echo ">> building binary $(TARGET_DIR)/$(OS)-$*/$(NAME)-community"
|
|
@if [ $* = "arm64" ]; then \
|
|
GOARCH=$* GOOS=$(OS) go build -C $(GO_BUILD_CONTEXT_COMMUNITY) -tags timetzdata -o $(TARGET_DIR)/$(OS)-$*/$(NAME)-community -ldflags "-s -w $(GO_BUILD_LDFLAGS_COMMUNITY)"; \
|
|
else \
|
|
GOARCH=$* GOOS=$(OS) go build -C $(GO_BUILD_CONTEXT_COMMUNITY) -tags timetzdata -o $(TARGET_DIR)/$(OS)-$*/$(NAME)-community -ldflags "-s -w $(GO_BUILD_LDFLAGS_COMMUNITY)"; \
|
|
fi
|
|
|
|
|
|
.PHONY: go-build-enterprise $(GO_BUILD_ARCHS_ENTERPRISE)
|
|
go-build-enterprise: ## Builds the go backend server for enterprise
|
|
go-build-enterprise: $(GO_BUILD_ARCHS_ENTERPRISE)
|
|
$(GO_BUILD_ARCHS_ENTERPRISE): go-build-enterprise-%: $(TARGET_DIR)
|
|
@mkdir -p $(TARGET_DIR)/$(OS)-$*
|
|
@echo ">> building binary $(TARGET_DIR)/$(OS)-$*/$(NAME)"
|
|
@if [ $* = "arm64" ]; then \
|
|
GOARCH=$* GOOS=$(OS) go build -C $(GO_BUILD_CONTEXT_ENTERPRISE) -tags timetzdata -o $(TARGET_DIR)/$(OS)-$*/$(NAME) -ldflags "-s -w $(GO_BUILD_LDFLAGS_ENTERPRISE)"; \
|
|
else \
|
|
GOARCH=$* GOOS=$(OS) go build -C $(GO_BUILD_CONTEXT_ENTERPRISE) -tags timetzdata -o $(TARGET_DIR)/$(OS)-$*/$(NAME) -ldflags "-s -w $(GO_BUILD_LDFLAGS_ENTERPRISE)"; \
|
|
fi
|
|
|
|
.PHONY: go-build-enterprise-race $(GO_BUILD_ARCHS_ENTERPRISE_RACE)
|
|
go-build-enterprise-race: ## Builds the go backend server for enterprise with race
|
|
go-build-enterprise-race: $(GO_BUILD_ARCHS_ENTERPRISE_RACE)
|
|
$(GO_BUILD_ARCHS_ENTERPRISE_RACE): go-build-enterprise-race-%: $(TARGET_DIR)
|
|
@mkdir -p $(TARGET_DIR)/$(OS)-$*
|
|
@echo ">> building binary $(TARGET_DIR)/$(OS)-$*/$(NAME)"
|
|
@if [ $* = "arm64" ]; then \
|
|
GOARCH=$* GOOS=$(OS) go build -C $(GO_BUILD_CONTEXT_ENTERPRISE) -race -tags timetzdata -o $(TARGET_DIR)/$(OS)-$*/$(NAME) -ldflags "-s -w $(GO_BUILD_LDFLAGS_ENTERPRISE)"; \
|
|
else \
|
|
GOARCH=$* GOOS=$(OS) go build -C $(GO_BUILD_CONTEXT_ENTERPRISE) -race -tags timetzdata -o $(TARGET_DIR)/$(OS)-$*/$(NAME) -ldflags "-s -w $(GO_BUILD_LDFLAGS_ENTERPRISE)"; \
|
|
fi
|
|
|
|
##############################################################
|
|
# js commands
|
|
##############################################################
|
|
.PHONY: js-build
|
|
js-build: ## Builds the js frontend
|
|
@echo ">> building js frontend"
|
|
@cd $(JS_BUILD_CONTEXT) && CI=1 yarn install && yarn build
|
|
|
|
##############################################################
|
|
# docker commands
|
|
##############################################################
|
|
.PHONY: docker-build-community $(DOCKER_BUILD_ARCHS_COMMUNITY)
|
|
docker-build-community: ## Builds the docker image for community
|
|
docker-build-community: $(DOCKER_BUILD_ARCHS_COMMUNITY)
|
|
$(DOCKER_BUILD_ARCHS_COMMUNITY): docker-build-community-%: go-build-community-% js-build
|
|
@echo ">> building docker image for $(NAME)-community"
|
|
@docker build -t "$(DOCKER_REGISTRY_COMMUNITY):$(VERSION)-$*" \
|
|
--build-arg TARGETARCH="$*" \
|
|
-f $(DOCKERFILE_COMMUNITY) $(SRC)
|
|
|
|
.PHONY: docker-buildx-community
|
|
docker-buildx-community: ## Builds the docker image for community using buildx
|
|
docker-buildx-community: go-build-community js-build
|
|
@echo ">> building docker image for $(NAME)-community"
|
|
@docker buildx build --file $(DOCKERFILE_COMMUNITY) \
|
|
--progress plain \
|
|
--platform linux/arm64,linux/amd64 \
|
|
--push \
|
|
--tag $(DOCKER_REGISTRY_COMMUNITY):$(VERSION) $(SRC)
|
|
|
|
.PHONY: docker-build-enterprise $(DOCKER_BUILD_ARCHS_ENTERPRISE)
|
|
docker-build-enterprise: ## Builds the docker image for enterprise
|
|
docker-build-enterprise: $(DOCKER_BUILD_ARCHS_ENTERPRISE)
|
|
$(DOCKER_BUILD_ARCHS_ENTERPRISE): docker-build-enterprise-%: go-build-enterprise-% js-build
|
|
@echo ">> building docker image for $(NAME)"
|
|
@docker build -t "$(DOCKER_REGISTRY_ENTERPRISE):$(VERSION)-$*" \
|
|
--build-arg TARGETARCH="$*" \
|
|
-f $(DOCKERFILE_ENTERPRISE) $(SRC)
|
|
|
|
.PHONY: docker-buildx-enterprise
|
|
docker-buildx-enterprise: ## Builds the docker image for enterprise using buildx
|
|
docker-buildx-enterprise: go-build-enterprise js-build
|
|
@echo ">> building docker image for $(NAME)"
|
|
@docker buildx build --file $(DOCKERFILE_ENTERPRISE) \
|
|
--progress plain \
|
|
--platform linux/arm64,linux/amd64 \
|
|
--push \
|
|
--tag $(DOCKER_REGISTRY_ENTERPRISE):$(VERSION) $(SRC)
|
|
|
|
##############################################################
|
|
# python commands
|
|
##############################################################
|
|
.PHONY: py-fmt
|
|
py-fmt: ## Run ruff format across the shared tests project
|
|
@cd tests && uv run ruff format .
|
|
|
|
.PHONY: py-lint
|
|
py-lint: ## Run ruff check across the shared tests project
|
|
@cd tests && uv run ruff check --fix .
|
|
|
|
.PHONY: py-test-setup
|
|
py-test-setup: ## Bring up the shared SigNoz backend used by integration and e2e tests
|
|
@cd tests && uv run pytest --basetemp=./tmp/ -vv --reuse --capture=no integration/bootstrap/setup.py::test_setup
|
|
|
|
.PHONY: py-test-teardown
|
|
py-test-teardown: ## Tear down the shared SigNoz backend
|
|
@cd tests && uv run pytest --basetemp=./tmp/ -vv --teardown --capture=no integration/bootstrap/setup.py::test_teardown
|
|
|
|
.PHONY: py-test
|
|
py-test: ## Runs integration tests
|
|
@cd tests && uv run pytest --basetemp=./tmp/ -vv --capture=no integration/tests/
|
|
|
|
.PHONY: py-clean
|
|
py-clean: ## Clear all pycache and pytest cache from tests directory recursively
|
|
@echo ">> cleaning python cache files from tests directory"
|
|
@find tests -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
|
|
@find tests -type d -name .pytest_cache -exec rm -rf {} + 2>/dev/null || true
|
|
@find tests -type f -name "*.pyc" -delete 2>/dev/null || true
|
|
@find tests -type f -name "*.pyo" -delete 2>/dev/null || true
|
|
@echo ">> python cache cleaned"
|
|
|
|
|
|
##############################################################
|
|
# generate commands
|
|
##############################################################
|
|
.PHONY: gen-mocks
|
|
gen-mocks:
|
|
@echo ">> Generating mocks"
|
|
@mockery --config .mockery.yml
|