-
-
Notifications
You must be signed in to change notification settings - Fork 143
Expand file tree
/
Copy pathMakefile
More file actions
160 lines (140 loc) · 5.27 KB
/
Copy pathMakefile
File metadata and controls
160 lines (140 loc) · 5.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
IMAGE ?= adibhanna/zennotes:latest
PORT ?= 7878
CONTENT_ROOT ?= ./vault
DATA ?= ./data
APP_URL ?= http://localhost:$(PORT)
ALLOW_INSECURE_NOAUTH ?= 0
COMPOSE := $(shell docker compose version >/dev/null 2>&1 && echo "docker compose" || echo "docker-compose")
OPEN_BROWSER := $(shell command -v open 2>/dev/null || command -v xdg-open 2>/dev/null)
.PHONY: help install dev desktop web-dev server-dev web-stack \
build desktop-build web-build \
up down restart logs status open rebuild nuke clean
help:
@echo ""
@echo " Setup"
@echo " make install — install npm workspace dependencies"
@echo ""
@echo " Local development"
@echo " make desktop — run the Electron desktop app in dev mode"
@echo " make web-dev — run the Vite web client in dev mode"
@echo " make server-dev — run the pinned ZenNotes/znserver release (or a checkout via ZENNOTES_SERVER_DIR)"
@echo " make web-stack — run server + web dev together"
@echo ""
@echo " Local builds"
@echo " make build — build the full monorepo"
@echo " make desktop-build — build the Electron desktop app"
@echo " make web-build — build apps/web"
@echo ""
@echo " Docker"
@echo " make up — start the self-hosted server from the published image"
@echo " make down — stop the container"
@echo " make restart — restart the container"
@echo " make logs — follow logs"
@echo " make status — show compose status"
@echo " make open — open the app in your browser"
@echo " make rebuild — pull the newest image and restart"
@echo " make nuke — tear down and remove the image, data, and build output"
@echo " make clean — remove local web build output and downloaded server binaries"
@echo ""
@echo " Useful Docker vars"
@echo " CONTENT_ROOT=~/iCloud Drive/Obsidian — host folder used as the live vault root"
@echo " PORT=7878 — host port"
@echo " ALLOW_INSECURE_NOAUTH=1 — opt out of generated auth token (not recommended)"
@echo " IMAGE=adibhanna/zennotes:2.50.5 — pin a published server image (default: latest)"
@echo ""
install:
npm ci
dev: desktop
desktop:
npm run dev:desktop
web-dev:
npm run dev:web
server-dev:
npm run dev:server
web-stack:
npm run dev:web-stack
build:
npm run build
desktop-build:
npm run build --workspace @zennotes/desktop
web-build:
npm run build --workspace @zennotes/web
up:
@mkdir -p "$(CONTENT_ROOT)" "$(DATA)"
@ABS_CONTENT_ROOT="$$(cd "$(CONTENT_ROOT)" && pwd)"; \
ABS_DATA="$$(cd "$(DATA)" && pwd)"; \
AUTH_TOKEN=""; \
if [ "$(ALLOW_INSECURE_NOAUTH)" != "1" ]; then \
AUTH_TOKEN_FILE="$$ABS_DATA/auth-token"; \
if [ ! -f "$$AUTH_TOKEN_FILE" ]; then \
node -e "process.stdout.write(require('node:crypto').randomBytes(32).toString('hex'))" > "$$AUTH_TOKEN_FILE"; \
chmod 600 "$$AUTH_TOKEN_FILE"; \
fi; \
AUTH_TOKEN="$$(cat "$$AUTH_TOKEN_FILE")"; \
fi; \
ZENNOTES_IMAGE="$(IMAGE)" \
ZENNOTES_HOST_PORT="$(PORT)" \
ZENNOTES_HOST_CONTENT_ROOT="$$ABS_CONTENT_ROOT" \
ZENNOTES_CONTAINER_CONTENT_ROOT="$$ABS_CONTENT_ROOT" \
ZENNOTES_CONTAINER_DEFAULT_VAULT_PATH="$$ABS_CONTENT_ROOT" \
ZENNOTES_BROWSE_ROOTS="$$ABS_CONTENT_ROOT" \
ZENNOTES_ALLOWED_ORIGINS="http://localhost:$(PORT),http://127.0.0.1:$(PORT)" \
ZENNOTES_AUTH_TOKEN="$$AUTH_TOKEN" \
ZENNOTES_ALLOW_INSECURE_NOAUTH="$(ALLOW_INSECURE_NOAUTH)" \
ZENNOTES_HOST_DATA="$$ABS_DATA" \
ZENNOTES_CONTAINER_UID="$$(id -u)" \
ZENNOTES_CONTAINER_GID="$$(id -g)" \
$(COMPOSE) up -d
@printf "\nZenNotes is running at $(APP_URL)\n\n"
ifneq ($(ALLOW_INSECURE_NOAUTH),1)
@printf "Auth token: $(DATA)/auth-token\n\n"
endif
ifneq ($(strip $(OPEN_BROWSER)),)
@$(OPEN_BROWSER) $(APP_URL) >/dev/null 2>&1 || true
endif
down:
@$(COMPOSE) down
restart:
@$(COMPOSE) restart zennotes 2>/dev/null || $(MAKE) --no-print-directory up
logs:
@$(COMPOSE) logs -f
status:
@$(COMPOSE) ps
open:
ifneq ($(strip $(OPEN_BROWSER)),)
@$(OPEN_BROWSER) $(APP_URL)
else
@echo "Open $(APP_URL) manually."
endif
rebuild:
@mkdir -p "$(CONTENT_ROOT)" "$(DATA)"
@ABS_CONTENT_ROOT="$$(cd "$(CONTENT_ROOT)" && pwd)"; \
ABS_DATA="$$(cd "$(DATA)" && pwd)"; \
AUTH_TOKEN=""; \
if [ "$(ALLOW_INSECURE_NOAUTH)" != "1" ]; then \
AUTH_TOKEN_FILE="$$ABS_DATA/auth-token"; \
if [ ! -f "$$AUTH_TOKEN_FILE" ]; then \
node -e "process.stdout.write(require('node:crypto').randomBytes(32).toString('hex'))" > "$$AUTH_TOKEN_FILE"; \
chmod 600 "$$AUTH_TOKEN_FILE"; \
fi; \
AUTH_TOKEN="$$(cat "$$AUTH_TOKEN_FILE")"; \
fi; \
ZENNOTES_IMAGE="$(IMAGE)" \
ZENNOTES_HOST_PORT="$(PORT)" \
ZENNOTES_HOST_CONTENT_ROOT="$$ABS_CONTENT_ROOT" \
ZENNOTES_CONTAINER_CONTENT_ROOT="$$ABS_CONTENT_ROOT" \
ZENNOTES_CONTAINER_DEFAULT_VAULT_PATH="$$ABS_CONTENT_ROOT" \
ZENNOTES_BROWSE_ROOTS="$$ABS_CONTENT_ROOT" \
ZENNOTES_ALLOWED_ORIGINS="http://localhost:$(PORT),http://127.0.0.1:$(PORT)" \
ZENNOTES_AUTH_TOKEN="$$AUTH_TOKEN" \
ZENNOTES_ALLOW_INSECURE_NOAUTH="$(ALLOW_INSECURE_NOAUTH)" \
ZENNOTES_HOST_DATA="$$ABS_DATA" \
ZENNOTES_CONTAINER_UID="$$(id -u)" \
ZENNOTES_CONTAINER_GID="$$(id -g)" \
$(COMPOSE) pull
@$(MAKE) --no-print-directory up
nuke:
@$(COMPOSE) down --rmi all --volumes || true
@rm -rf apps/web/dist dist/server-binaries $(DATA)
clean:
rm -rf apps/web/dist dist/server-binaries