Add a documentation website, built with Zola
ci / check (push) Canceled after 0s
ci / docs (push) Canceled after 0s
ci / interop (push) Canceled after 0s
ci / fuzz (push) Canceled after 0s

The documentation moves from READMEs into a site in docs/: getting
started, a user guide, operations, a reference, and development pages,
written in the style of network vendors' documentation (docs/STYLE.md).
bin/bgp/README.md and docs/RFCs.md are folded into it.

- A theme of its own in the International Typographic Style, in blues,
  with self-hosted Inter and JetBrains Mono, search over Zola's index,
  dark mode, and no resources loaded from other hosts.
- Example configurations in docs/examples/, shown on the pages and
  checked with `bgp --check` in CI.
- A test that fails when a field of config.proto is missing from the
  configuration reference.
- A CI job that builds the site; Zola fails on broken links and anchors.
- A hardened systemd unit, tried under systemd with kernel routes on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Rayhaan JaufeerallyandClaude Opus 5.5 committed 2026-10-03 15:12:43 +02:00
1 parent 9820a5d3bc
commit dc275f99d7
61 files changed
+5632 -623

No files matched your search

+57
View File
@@ -0,0 +1,57 @@
{
"name": "textproto",
"scopeName": "source.textproto",
"fileTypes": ["textproto", "textpb", "pbtxt"],
"patterns": [
{ "include": "#comment" },
{ "include": "#block" },
{ "include": "#field" },
{ "include": "#string" },
{ "include": "#constant" },
{ "include": "#number" }
],
"repository": {
"comment": {
"name": "comment.line.number-sign.textproto",
"match": "#.*$"
},
"block": {
"comment": "A field whose value is a message: `peers {`",
"match": "\\b([A-Za-z_][A-Za-z0-9_]*)\\s*:?\\s*(?=\\{)",
"captures": { "1": { "name": "entity.name.tag.textproto" } }
},
"field": {
"match": "\\b([A-Za-z_][A-Za-z0-9_]*)\\s*(:)",
"captures": {
"1": { "name": "support.type.property-name.textproto" },
"2": { "name": "punctuation.separator.key-value.textproto" }
}
},
"string": {
"patterns": [
{
"name": "string.quoted.double.textproto",
"begin": "\"",
"end": "\"",
"patterns": [{ "name": "constant.character.escape.textproto", "match": "\\\\." }]
},
{
"name": "string.quoted.single.textproto",
"begin": "'",
"end": "'",
"patterns": [{ "name": "constant.character.escape.textproto", "match": "\\\\." }]
}
]
},
"constant": {
"patterns": [
{ "name": "constant.language.boolean.textproto", "match": "\\b(true|false)\\b" },
{ "name": "constant.language.enum.textproto", "match": "\\b[A-Z][A-Z0-9_]*\\b" }
]
},
"number": {
"name": "constant.numeric.textproto",
"match": "-?\\b(0x[0-9A-Fa-f]+|[0-9]+(\\.[0-9]+)?([eE][+-]?[0-9]+)?)\\b"
}
}
}