Mercurial
annotate hg-web/README.md @ 254:2b6e732087ff
[ui] Add complete native component catalog
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Tue, 04 Aug 2026 15:12:09 -0700 |
| parents | c5129452493e |
| children |
| rev | line source |
|---|---|
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 # hg-web |
|
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
3 A custom Mercurial forge and repository browser. The application keeps the |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
4 networking and HTTP stack in C with Seobeo, while the hand-drawn web interface |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
5 is implemented in React and TypeScript. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
6 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
7 ## Wiki tree |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
8 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
9 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
10 hg-web |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
11 ├── Runtime |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
12 │ ├── hg_web_server :6970 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
13 │ │ ├── React application and static assets |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
14 │ │ ├── repository browsing API |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
15 │ │ ├── commit graph API |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
16 │ │ └── Mercurial wire-protocol proxy |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
17 │ └── hg serve :4444 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
18 │ ├── repository files and graph data |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
19 │ └── Mercurial pull/push protocol |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
20 ├── Backend |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
21 │ ├── main.c |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
22 │ └── ../seobeo |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
23 │ ├── s_network.c |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
24 │ ├── s_web.c |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
25 │ ├── s_http_client.c |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
26 │ └── s_ssl.c |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
27 ├── Frontend |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
28 │ └── src |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
29 │ ├── main.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
30 │ ├── components |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
31 │ │ ├── app.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
32 │ │ ├── directory-browser.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
33 │ │ ├── graph.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
34 │ │ ├── header.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
35 │ │ ├── footer.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
36 │ │ ├── theme.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
37 │ │ └── repo-browser.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
38 │ ├── index.html |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
39 │ ├── index.css |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
40 │ ├── base.css |
|
224
3007ef5fc0ed
[hg-web] Simplify visuals and preview static files
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
41 │ └── custom pencil, panda, and icon assets |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
42 ├── Build |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
43 │ ├── BUILD |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
44 │ ├── ../gui_ze/gui_ze.bzl |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
45 │ ├── ../markdown_converter |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
46 │ └── ../third_party/highlight |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
47 └── Operations |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
48 └── deploy.sh |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
49 ``` |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
50 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
51 `repo-browser.tsx` is an older standalone browser implementation. The active |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
52 entry point is `main.tsx`, which renders `app.tsx`; `app.tsx` embeds |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
53 `directory-browser.tsx`. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
54 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
55 ## Runtime topology |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
56 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
57 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
58 Browser |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
59 | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
60 | HTTPS |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
61 v |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
62 nginx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
63 | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
64 | HTTP :6970 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
65 v |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
66 hg_web_server (main.c + Seobeo) |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
67 | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
68 | HTTP :4444 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
69 v |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
70 hg serve (Zenbu Mercurial repository) |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
71 ``` |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
72 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
73 The C server owns the public routes. It serves the application shell and |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
74 assets, translates browser API requests into `hg serve` requests, and streams |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
75 Mercurial wire-protocol traffic without routing bundle data through the normal |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
76 buffered HTTP response path. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
77 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
78 ## Request flows |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
79 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
80 ### Application shell |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
81 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
82 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
83 GET /, /directories, or /graph |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
84 -> GetReactHome |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
85 -> hg-web/src/index.html |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
86 -> /page.js |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
87 -> src/main.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
88 -> components/app.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
89 ``` |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
90 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
91 ### Repository browser |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
92 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
93 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
94 directory-browser.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
95 -> GET /api/repo/list?path=... |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
96 -> ApiListDirectory |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
97 -> GET hg-serve/file/tip/<path>?style=json |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
98 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
99 file or README selection |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
100 -> GET /api/repo/file?path=... |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
101 -> ApiGetFile |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
102 -> GET hg-serve/raw-file/tip/<path> |
|
224
3007ef5fc0ed
[hg-web] Simplify visuals and preview static files
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
103 -> highlight.js, markdown_converter WASM, or inline static preview |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
104 ``` |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
105 |
|
224
3007ef5fc0ed
[hg-web] Simplify visuals and preview static files
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
106 Images, SVG, video, audio, and PDF files open in the forge preview modal. |
|
3007ef5fc0ed
[hg-web] Simplify visuals and preview static files
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
107 Unknown binary files retain a download link. The raw file API supplies explicit |
|
3007ef5fc0ed
[hg-web] Simplify visuals and preview static files
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
108 MIME types, `nosniff`, inline disposition for supported previews, and sandboxed |
|
3007ef5fc0ed
[hg-web] Simplify visuals and preview static files
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
109 SVG responses. |
|
3007ef5fc0ed
[hg-web] Simplify visuals and preview static files
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
110 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
111 ### Commit graph |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
112 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
113 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
114 graph.tsx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
115 -> GET /api/graph/<revision>?graphtop=...&style=json |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
116 -> ApiGetGraph |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
117 -> GET hg-serve/graph/<revision>?... |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
118 -> React rows + custom pencil/panda canvas |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
119 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
120 graph row selection |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
121 -> /changeset/<revision> |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
122 -> GET /api/changeset/<revision> |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
123 -> ApiGetChangeset |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
124 -> GET hg-serve/json-rev/<revision> |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
125 -> changeset metadata + rendered diff |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
126 ``` |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
127 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
128 ### Mercurial clone, pull, and push |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
129 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
130 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
131 Mercurial client |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
132 -> GET or POST /repo |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
133 -> StreamHgWireProtocol |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
134 -> hg serve /?cmd=... |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
135 -> binary-safe streamed response |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
136 ``` |
|
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
137 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
138 ## Route map |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
139 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
140 | Method | Route | Owner | Purpose | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
141 | --- | --- | --- | --- | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
142 | `GET` | `/` | `GetReactHome` | Application shell | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
143 | `GET` | `/directories` | `GetReactHome` | Legacy application-shell route | |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
144 | `GET` | `/directory` | `GetReactHome` | Repository browser application route | |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
145 | `GET` | `/graph` | `GetReactHome` | Commit graph application route | |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
146 | `GET` | `/changeset/:changeset_id` | `GetReactHome` | Changeset application route | |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
147 | `GET` | `/api/repo/list` | `ApiListDirectory` | Directory listing JSON | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
148 | `GET` | `/api/repo/file` | `ApiGetFile` | Raw tracked file | |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
149 | `GET` | `/api/repo/readme` | `ApiGetReadme` | Directory README content | |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
150 | `GET` | `/api/graph/:graph_id` | `ApiGetGraph` | Mercurial graph JSON | |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
151 | `GET` | `/api/changeset/:changeset_id` | `ApiGetChangeset` | Changeset metadata and diff JSON | |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
152 | `GET`, `POST` | `/repo` | `StreamHgWireProtocol` | Mercurial wire protocol | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
153 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
154 ## Frontend ownership |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
155 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
156 | File | Responsibility | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
157 | --- | --- | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
158 | `src/components/app.tsx` | Client-side routes, landing page, tabs, and history | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
159 | `src/components/directory-browser.tsx` | Breadcrumbs, listings, prefetch, file modals, README rendering | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
160 | `src/components/graph.tsx` | Graph fetching, pagination, canvas edges, panda nodes | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
161 | `src/components/theme.tsx` | Stored light/dark preference and system-theme integration | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
162 | `src/components/header.tsx` | Forge identity and theme control | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
163 | `src/components/footer.tsx` | Shared footer | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
164 | `src/index.css`, `src/base.css` | Custom visual language and layout | |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
165 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
166 Keep the custom assets and visual language in this package. New forge screens |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
167 should reuse the existing CSS variables, typography, textures, and components |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
168 instead of introducing a generic design system. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
169 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
170 ## Build and local run |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
171 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
172 Build the server and deployable bundle from the repository root: |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
173 |
|
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
174 ```bash |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
175 bazel build //hg-web:hg_web_server |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
176 bazel build //hg-web:hg_web_server_bundle |
|
223
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
177 bazel test //hg-web:tests |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
178 bazel test //markdown_converter/tests:markdown_to_html_test |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
179 bazel test //seobeo/tests:all |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
180 ``` |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
181 |
|
223
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
182 `//hg-web:tests` creates a temporary two-commit Mercurial repository and runs |
|
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
183 the application in pinned Chromium through Playwright. It covers shell routes, |
|
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
184 files and README rendering, graph and changeset navigation, browser history, |
|
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
185 console and page errors, API validation, Mercurial wire protocol, Markdown |
|
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
186 script escaping, static assets, and backend outages. The test invokes the |
|
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
187 workspace Mercurial CLI with an isolated configuration and home directory. |
|
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
222
diff
changeset
|
188 |
|
222
a8d6435dc021
[hg-web] Run local stack through Bazel
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
189 Build and run the complete local stack with one Bazel command: |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
190 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
191 ```bash |
|
222
a8d6435dc021
[hg-web] Run local stack through Bazel
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
192 bazel run //hg-web:dev |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
193 ``` |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
194 |
|
222
a8d6435dc021
[hg-web] Run local stack through Bazel
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
195 This starts `hg serve` on `127.0.0.1:4444` and `hg_web_server` on port `6970`. |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
196 The `hg serve` process comes from `//third_party/mercurial:runtime` and points at |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
197 the current workspace. Stopping the Bazel target stops both child processes. |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
198 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
199 The bundle contains `hg_web_server`, `hg-web/run_hg_web`, a pinned pure-Python |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
200 Mercurial runtime, and `hg-web/src/`, including generated `page.js`, markdown |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
201 WASM, highlight.js, styles, and image assets. |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
202 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
203 ## Deployment contract |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
204 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
205 The expected production layout is: |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
206 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
207 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
208 nginx |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
209 -> hg_web_server.service |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
210 -> /opt/hg_web_server/active/hg-web/run_hg_web |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
211 -> bundled Mercurial 7.2.3 serves |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
212 /opt/hg_web_server/repository on 127.0.0.1:4444 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
213 -> hg_web_server serves the forge on 127.0.0.1:6970 |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
214 ``` |
|
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
215 |
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
216 `deploy.sh` follows the same new/active bundle swap as the personal site. It |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
217 builds the optimized bundle and maintains a canonical repository outside the |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
218 release directories. The first deploy creates it with a locking-aware local |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
219 clone. Later deploys create a Mercurial bundle from the workspace and pull that |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
220 bundle into the persistent repository, preserving any commits pushed directly |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
221 to production. The script verifies the repository, installs the systemd unit, |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
222 swaps the active directory, restarts the combined service, and checks |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
223 `http://127.0.0.1:6970/`. A failed restart restores the previous active |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
224 directory. |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
225 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
226 There is no separate production `hg serve` service and no dependency on the |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
227 host's `hg` command. The pinned Mercurial wheel requires CPython 3.11. The |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
228 systemd unit uses `KillMode=control-group`, so both the Mercurial and C child |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
229 processes stop together. |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
230 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
231 On its first run, deploy also installs `/etc/nginx/sites-available/hg-web` when |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
232 Nginx uses Debian-style `sites-available`/`sites-enabled` directories. Existing |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
233 site files are left untouched. |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
234 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
235 ```bash |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
236 NGINX_SERVER_NAME=zenbu.babocoder.com bazel run //hg-web:deploy |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
237 ``` |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
238 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
239 The checked-in template listens on origin HTTP port 80, which works when TLS is |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
240 terminated upstream. For direct origin TLS, provide a complete certificate-aware |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
241 template: |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
242 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
243 ```bash |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
244 NGINX_SITE_TEMPLATE=/etc/nginx/templates/hg-web-tls.conf \ |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
245 bazel run //hg-web:deploy |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
246 ``` |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
247 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
248 Set `MANAGE_NGINX=false` to leave Nginx untouched. `NGINX_SITE_NAME`, |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
249 `NGINX_SITE_AVAILABLE`, and `NGINX_SITE_ENABLED` can override the destination |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
250 names and paths. `DEPLOY_ROOT` controls the validated deployment root; |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
251 `REPOSITORY_PATH` can override the persistent canonical repository within it. |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
252 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
253 Pushes are disabled by default. `HG_ALLOW_PUSH=true` enables unauthenticated |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
254 pushes in the internal `hg serve`; only use it when `/repo` is protected by |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
227
diff
changeset
|
255 Nginx authentication or another trusted access layer. |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
256 |
|
227
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
257 ## Publishing |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
258 |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
259 Push committed Mercurial changes to the configured server: |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
260 |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
261 ```bash |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
262 hg push |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
263 ``` |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
264 |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
265 Then update and deploy on the server: |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
266 |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
267 ```bash |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
268 ssh -t [email protected] \ |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
269 'cd ~/zenbu && hg update default && bazel run //hg-web:deploy' |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
270 ``` |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
271 |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
272 The SSH key may prompt for its passphrase. `//hg-web:deploy` builds the release |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
273 bundle through Bazel before running the atomic promotion, health check, and |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
274 rollback workflow. |
|
8bb0ac8f4587
[hg-web] Add Bazel deployment target
MrJuneJune <me@mrjunejune.com>
parents:
224
diff
changeset
|
275 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
276 ## Forge capability tree |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
277 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
278 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
279 Zenbu Forge |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
280 ├── Repository |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
281 │ ├── File and directory browsing available |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
282 │ ├── Syntax highlighting available |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
283 │ ├── README rendering available |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
284 │ ├── Commit graph available |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
285 │ ├── Changeset detail and diff available |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
286 │ ├── Branches, bookmarks, and tags planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
287 │ ├── File history and blame planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
288 │ └── Search planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
289 ├── Collaboration |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
290 │ ├── Authentication and authorization planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
291 │ ├── Changeset review planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
292 │ ├── Issues planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
293 │ └── Releases and artifacts planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
294 └── Automation |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
295 ├── Mercurial incoming/changegroup hook planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
296 ├── Durable SQLite job queue planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
297 ├── Isolated Bazel runner planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
298 ├── Live logs and job status API planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
299 ├── Forge status and log screens planned |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
300 ├── Artifact retention planned |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
301 └── Atomic deploy, health check, rollback available |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
302 ``` |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
303 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
304 ## Automation data flow |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
305 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
306 The Actions-like subsystem should extend the existing server rather than |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
307 replace it: |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
308 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
309 ```text |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
310 hg push |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
311 -> Mercurial hook records repository + revision |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
312 -> small enqueue command writes a SQLite job |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
313 -> runner service claims one queued job |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
314 -> isolated shared checkout updates to the exact revision |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
315 -> Bazel build and test steps stream logs |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
316 -> job result and artifacts are recorded |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
317 -> hg-web status API exposes the result |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
318 -> custom React screens render runs, steps, logs, and artifacts |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
319 -> successful protected jobs may call atomic deployment |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
320 ``` |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
321 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
322 Start with one runner on the same host. Keep the hook fast, never execute build |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
323 steps inside the Mercurial request, and make the queue durable before adding |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
324 parallel or remote runners. |
|
192
b818a4561a3c
Added AI genreated README.md. Needed to be read.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
325 |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
326 ## Safe extension order |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
327 |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
328 1. Add branches, bookmarks, tags, file history, blame, and search. |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
329 2. Add the hook, SQLite queue, single runner, and retained logs. |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
330 3. Add run/status/log pages using the existing custom UI. |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
218
diff
changeset
|
331 4. Add authentication and authorization before accepting public pushes or |
|
218
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
332 user-defined automation. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
333 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
334 ## Invariants |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
335 |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
336 - Keep public application code on Seobeo APIs. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
337 - Decode and validate every path before forwarding it to Mercurial. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
338 - Keep `/repo` binary-safe; bundle data can contain null bytes. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
339 - Do not buffer large wire-protocol responses through the regular HTTP client. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
340 - Keep backend route names synchronized with frontend fetch and navigation code. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
341 - Preserve accurate status codes, content lengths, and content types. |
|
921ca3086879
[hg-web] Add architecture wiki tree
MrJuneJune <me@mrjunejune.com>
parents:
192
diff
changeset
|
342 - Keep secrets in service-owned environment files, not in source or job logs. |