1
2SHELL = /bin/bash
3.SHELLFLAGS = -o pipefail -c
4
5# base path for Lexicon document tree (for lexgen)
6LEXDIR?=../atproto/lexicons
7
8# https://github.com/golang/go/wiki/LoopvarExperiment
9export GOEXPERIMENT := loopvar
10
11.PHONY: help
12help: ## Print info about all commands
13 @echo "Commands:"
14 @echo
15 @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[01;32m%-20s\033[0m %s\n", $$1, $$2}'
16
17.PHONY: build
18build: ## Build all executables
19 go build ./cmd/goat
20 go build ./cmd/gosky
21 go build ./cmd/bigsky
22 go build ./cmd/relay
23 go build ./cmd/beemo
24 go build ./cmd/lexgen
25 go build ./cmd/stress
26 go build ./cmd/fakermaker
27 go build ./cmd/hepa
28 go build ./cmd/supercollider
29 go build -o ./sonar-cli ./cmd/sonar
30 go build ./cmd/palomar
31
32.PHONY: all
33all: build
34
35.PHONY: test
36test: ## Run tests
37 go test ./...
38
39.PHONY: test-short
40test-short: ## Run tests, skipping slower integration tests
41 go test -test.short ./...
42
43.PHONY: test-interop
44test-interop: ## Run tests, including local interop (requires services running)
45 go clean -testcache && go test -tags=localinterop ./...
46
47.PHONY: test-search
48test-search: ## Run tests, including local search indexing (requires services running)
49 go clean -testcache && go test -tags=localsearch ./...
50
51.PHONY: coverage-html
52coverage-html: ## Generate test coverage report and open in browser
53 go test ./... -coverpkg=./... -coverprofile=test-coverage.out
54 go tool cover -html=test-coverage.out
55
56.PHONY: lint
57lint: ## Verify code style and run static checks
58 go vet ./...
59 test -z $(gofmt -l ./...)
60
61.PHONY: fmt
62fmt: ## Run syntax re-formatting (modify in place)
63 go fmt ./...
64
65.PHONY: check
66check: ## Compile everything, checking syntax (does not output binaries)
67 go build ./...
68
69.PHONY: lexgen
70lexgen: ## Run codegen tool for lexicons (lexicon JSON to Go packages)
71 go run ./cmd/lexgen/ --build-file cmd/lexgen/bsky.json $(LEXDIR)
72
73.PHONY: cborgen
74cborgen: ## Run codegen tool for CBOR serialization
75 go run ./gen
76
77.env:
78 if [ ! -f ".env" ]; then cp example.dev.env .env; fi
79
80.PHONY: run-postgres
81run-postgres: .env ## Runs a local postgres instance
82 docker compose -f cmd/bigsky/docker-compose.yml up -d
83
84.PHONY: run-dev-opensearch
85run-dev-opensearch: .env ## Runs a local opensearch instance
86 docker build -f cmd/palomar/Dockerfile.opensearch . -t opensearch-palomar
87 docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" -e "plugins.security.disabled=true" -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=0penSearch-Pal0mar" opensearch-palomar
88
89.PHONY: run-dev-relay
90run-dev-relay: .env ## Runs relay for local dev
91 LOG_LEVEL=info go run ./cmd/relay --admin-password localdev serve
92
93.PHONY: run-dev-ident
94run-dev-ident: .env ## Runs 'bluepages' identity directory for local dev
95 GOLOG_LOG_LEVEL=info go run ./cmd/bluepages serve
96
97.PHONY: build-relay-image
98build-relay-image: ## Builds relay docker image
99 docker build -t relay -f cmd/relay/Dockerfile .
100
101.PHONY: build-relay-admin-ui
102build-relay-admin-ui: ## Build relay admin web UI
103 cd cmd/relay/relay-admin-ui; yarn install --frozen-lockfile; yarn build
104 mkdir -p public
105 cp -r cmd/relay/relay-admin-ui/dist/* public/
106
107.PHONY: run-relay-image
108run-relay-image:
109 docker run -p 2470:2470 relay /relay serve --admin-password localdev
110# --crawl-insecure-ws
111
112.PHONY: run-dev-search
113run-dev-search: .env ## Runs search daemon for local dev
114 GOLOG_LOG_LEVEL=info go run ./cmd/palomar run
115
116.PHONY: sonar-up
117sonar-up: # Runs sonar docker container
118 docker compose -f cmd/sonar/docker-compose.yml up --build -d || docker-compose -f cmd/sonar/docker-compose.yml up --build -d
119
120.PHONY: sc-reload
121sc-reload: # Reloads supercollider
122 go run cmd/supercollider/main.go \
123 reload \
124 --port 6125 --total-events 2000000 \
125 --hostname alpha.supercollider.jazco.io \
126 --key-file out/alpha.pem \
127 --output-file out/alpha_in.cbor
128
129.PHONY: sc-fire
130sc-fire: # Fires supercollider
131 go run cmd/supercollider/main.go \
132 fire \
133 --port 6125 --events-per-second 10000 \
134 --hostname alpha.supercollider.jazco.io \
135 --key-file out/alpha.pem \
136 --input-file out/alpha_in.cbor
137
138.PHONY: run-netsync
139run-netsync: .env ## Runs netsync for local dev
140 go run ./cmd/netsync --checkout-limit 100 --worker-count 100 --out-dir ../netsync-out
141
142SCYLLA_VERSION := latest
143SCYLLA_CPU := 0
144SCYLLA_NODES := 127.0.0.1:9042
145
146.PHONY: run-scylla
147run-scylla:
148 @echo "==> Running test instance of Scylla $(SCYLLA_VERSION)"
149 @docker pull scylladb/scylla:$(SCYLLA_VERSION)
150 @docker run --name scylla -p 9042:9042 --cpuset-cpus=$(SCYLLA_CPU) --memory 1G --rm -d scylladb/scylla:$(SCYLLA_VERSION)
151 @until docker exec scylla cqlsh -e "DESCRIBE SCHEMA"; do sleep 2; done
152
153.PHONY: stop-scylla
154stop-scylla:
155 @echo "==> Stopping test instance of Scylla $(SCYLLA_VERSION)"
156 @docker stop scylla