forked from ZenNotes/zennotes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
163 lines (142 loc) · 5.28 KB
/
Copy pathMakefile
File metadata and controls
163 lines (142 loc) · 5.28 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
161
162
163
IMAGE ?= zennotes-selfhosted:local
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 server-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 Go server in dev mode"
@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 " make server-build — build apps/server with the latest embedded web bundle"
@echo ""
@echo " Docker"
@echo " make up — build and start the self-hosted server"
@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 — force a full rebuild"
@echo " make nuke — tear down and remove local image/build output"
@echo " make clean — remove local web/server build output"
@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 ""
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 --build -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) build --no-cache
@$(MAKE) --no-print-directory up
nuke:
@$(COMPOSE) down --rmi local --volumes || true
@rm -rf apps/web/dist apps/server/bin apps/server/web/dist $(DATA)
server-build: web-build
npm run build --workspace @zennotes/server
clean:
rm -rf apps/web/dist apps/server/bin apps/server/web/dist