Makefile
Rama main · réplica de lectura del repositorio original.
.PHONY: fmt fmt-check vet test test-race test-postgres build verify-go verify-web verify-desktop verify verify-helm helm-lint helm-template helm-package compose-check migration-check load-test docker-build changelog-check docs-check vuln vuln-go vuln-web vuln-desktop video video-check video-demo-up video-demo-down video-seed video-capture-web video-capture-desktop video-assemble
fmt:
gofmt -w $$(find cmd internal -name '*.go')
fmt-check:
test -z "$$(gofmt -l $$(find cmd internal -name '*.go'))"
vet:
go vet ./cmd/... ./internal/...
test:
go test ./cmd/... ./internal/...
# The server fans one ingestion out to every open console over SSE and runs the
# expiry and reconcile loops beside it, so its concurrency is not incidental.
# Kept out of `test` because the race build is several times slower, and out of
# `verify` for the same reason; CI runs it as its own job on every change.
test-race:
go test -race ./cmd/... ./internal/...
# The scale the project plan commits to, measured rather than assumed. Writes
# tens of thousands of rows and takes minutes, so it is gated and deliberate:
# PROMVIEW_LOAD_ALERTS overrides the count.
load-test:
PROMVIEW_LOAD_TEST=1 go test ./internal/postgres -run TestLoadAtCommittedScale -v -timeout 20m
test-postgres:
go test ./internal/postgres -run 'TestPendingMigrations|TestStoreIngestAndList|TestStoreExpireStaleAlerts|TestStoreGroupAlerts|TestStorePreferences|TestStoreReconcileSource|TestStoreReviveExpiredAlerts|TestStoreUpdateSource|TestStoreSilenceScope|TestStoreSilenceVisibility|TestStoreSyncSilences|TestStoreDesktopAuthCodes|TestStorePruneStreamEvents|TestStoreAssignAlert|TestStoreAlertNotes|TestStoreCloseAlert|TestStoreBulkActions|TestStoreRoleBindingAdministration|TestStoreCreatesTheFirstAdministrator|TestStoreLocal|TestStoreLDAP|TestStoreView'
build:
mkdir -p build
go build -o build/promview ./cmd/promview
verify-go: fmt-check vet test build
verify-web:
npm --prefix web run format:check
npm --prefix web run lint
npm --prefix web run typecheck
npm --prefix web run test
npm --prefix web run build
# The desktop shell. Kept out of verify-web: it is a Rust crate, and a web
# change should not wait on a cargo build to be checked.
verify-desktop:
cd desktop/src-tauri && cargo fmt --check
cd desktop/src-tauri && cargo clippy --all-targets -- -D warnings
cd desktop/src-tauri && cargo test
cd desktop/src-tauri && cargo build
compose-check:
docker compose config --quiet
# The release notes are built from CHANGELOG.md by a script that otherwise
# runs once per release and nowhere else. This is what keeps a change to it
# from being exercised for the first time by the release that needs it.
changelog-check:
./scripts/check-changelog.sh
# Installation examples that name a release older than the current one are how a
# reader ends up installing something other than what the page describes. It has
# happened four times; this is what stops the fifth.
docs-check:
./scripts/check-doc-versions.sh
migration-check:
./scripts/check-migrations.sh
docker-build:
docker build -t promview:dev .
helm-lint:
helm lint --strict charts/promview
helm lint --strict charts/promview --values charts/promview/ci/oidc-values.yaml
helm lint --strict charts/promview --values charts/promview/ci/local-values.yaml
helm lint --strict charts/promview --values charts/promview/ci/ldap-values.yaml
helm-template:
helm template promview charts/promview --namespace promview --kube-version 1.30.0 >/dev/null
helm template promview charts/promview --namespace promview --kube-version 1.30.0 --values charts/promview/ci/oidc-values.yaml >/dev/null
helm template promview charts/promview --namespace promview --kube-version 1.30.0 --values charts/promview/ci/local-values.yaml >/dev/null
helm template promview charts/promview --namespace promview --kube-version 1.30.0 --values charts/promview/ci/ldap-values.yaml >/dev/null
helm-package:
mkdir -p build
helm package charts/promview --destination build
verify-helm: helm-lint helm-template helm-package
verify: verify-go verify-web verify-desktop compose-check verify-helm changelog-check docs-check
# Advisory scanning, deliberately not part of `verify`. It reads a database over
# the network, and an advisory published this morning would otherwise fail a
# local run of work that has nothing to do with it. CI runs it as its own job,
# where going red is the point.
# GOTOOLCHAIN=auto because govulncheck is built from source and its own go
# directive runs ahead of this module's - it currently needs 1.26 while the
# server is on 1.25. setup-go pins GOTOOLCHAIN=local in CI, which turns that
# into a build failure rather than a scan. Switching is scoped to this command,
# and only decides what compiles the scanner: govulncheck loads this module
# under its own go directive, so the analysis still sees the Go version that
# ships.
vuln-go:
GOTOOLCHAIN=auto go run golang.org/x/vuln/cmd/govulncheck@latest ./cmd/... ./internal/...
# --omit=dev because the question is what ships. A vite or vitest advisory is
# worth knowing about and is not a vulnerability in the console anyone runs.
vuln-web:
npm --prefix web audit --omit=dev --audit-level=high
npm --prefix desktop audit --omit=dev --audit-level=high
vuln-desktop:
cd desktop/src-tauri && cargo audit
vuln: vuln-go vuln-web vuln-desktop
# Product videos. Every frame comes from the scripts under video/; see
# docs/video-plan.md. The demo stack is disposable and holds nothing.
VIDEO_COMPOSE := docker compose -f video/demo/compose.yaml
video-demo-up:
$(VIDEO_COMPOSE) up --build --wait
video-demo-down:
$(VIDEO_COMPOSE) down --volumes
video-seed:
node video/demo/seed.mjs --wave $(or $(WAVE),base)
video-capture-web:
video/scenes/capture.sh $(or $(SCENE),all)
# Needs openbox, tint2, snixembed, dunst and xdotool, and a client built with
# `cargo build --release --features tauri/custom-protocol`.
video-capture-desktop:
video/scenes/capture.sh tour
# TARGET is a scene name, all (every scene plus a rough cut), v2 (the
# console tour) or v1 (the trailer).
video-assemble:
cd video && node build.mjs $(or $(TARGET),all)
video: video-capture-web video-capture-desktop video-assemble
# What can be verified without a display or the demo stack: every script
# parses and is formatted, the music generator renders, and the card page
# draws each kind of card through the frame pipe into both encoders. Runs in
# CI on every change; the full render is the video workflow, on demand.
video-check:
cd video && for f in $$(find . -name '*.mjs' -not -path './node_modules/*'); do node --check $$f || exit 1; done
npx --prefix web prettier --config web/.prettierrc.json --check "video/**/*.mjs"
mkdir -p video/out/check
python3 video/audio/synth.py preview video/out/check/preview.wav
cd video && node cards/render.mjs --check