aboutsummaryrefslogtreecommitdiffstats
path: root/git.sr.ht/annotations.md
diff options
context:
space:
mode:
Diffstat (limited to 'git.sr.ht/annotations.md')
-rw-r--r--git.sr.ht/annotations.md139
1 files changed, 139 insertions, 0 deletions
diff --git a/git.sr.ht/annotations.md b/git.sr.ht/annotations.md
new file mode 100644
index 0000000..ba19e90
--- /dev/null
+++ b/git.sr.ht/annotations.md
@@ -0,0 +1,139 @@
+---
+title: git.sr.ht annotations reference
+---
+
+Annotations are a feature of git.sr.ht which allows you to upload arbitrary
+*annotations* to files in your source code, which will then be shown on the web.
+An example repo with annotations configured is
+[~sircmpwn/scdoc](https://git.sr.ht/~sircmpwn/scdoc), where they are used to
+link C function calls to their definitions.
+
+To add annotations to your repo, you'll need to have a builds.sr.ht [set
+up](https://man.sr.ht/tutorials/getting-started-with-builds.md), and find an
+annotation generator for your project's programming language(s):
+
+- C: [annotatec](https://git.sr.ht/~sircmpwn/annotatec)
+
+If your language isn't listed here, see [writing custom
+annotators](#writing-custom-annotators).
+
+See each annotator's instructions for generating the annotation file. You'll
+then need to add an OAuth token to builds.sr.ht - go to your [oauth
+settings](https://meta.sr.ht/oauth) and generate a personal access token, then
+paste the generated token into [builds.sr.ht
+secrets](https://builds.sr.ht/secrets) like this:
+
+```sh
+#!/bin/sh
+oauth_token=# your oauth token here
+curl -X PUT \
+ -H "Authorization: token $oauth_token" \
+ -H "Content-Type: application/json" \
+ -d @"$1" \
+ https://git.sr.ht/api/"~$2"/repos/"$3"/annotate
+```
+
+Set the path to `~/upload-annotations` and the file mode to 755, then add the
+UUID to the secrets list in your build manifest. Call the annotator to generate
+annotations for your code, then use the secret script to upload them. The result
+will look something like this:
+
+```
+# ...
+secrets:
+- your-uuid-here
+tasks:
+# ...
+- annotate: |
+ cd your-project
+ find . -name "*.c" | xargs annotatec -g > annotations.json
+ ../upload-annotations annotations.json your-username your-reponame
+```
+
+## Writing custom annotators
+
+The annotations.json format is a mapping of blob IDs to annotations. The blob ID
+is the ID of the blob which the annotations supplement, you can find it for a
+given file like so:
+
+ git ls-tree HEAD path/to/file.c
+
+When writing an annotator, you may find it useful to add the `-r` flag to scan
+the entire git tree at once, and `-z` to make the output more easily machine
+readable. See [`git-ls-tree(1)`](https://git-scm.com/docs/git-ls-tree) for
+details on this command.
+
+Once you have the blob ID, you can specify a list of annotations. Each
+annotation must have a `type`, which can be one of the following:
+
+### "type": "link"
+
+This annotates your code with a link, either an external link or a link to
+another part of your source code.
+
+```json
+{
+ "type": "link",
+ "lineno": integer,
+ "colno": integer,
+ "len": integer,
+ "to": "url...",
+ "title": "anchor title attribute" (optional)
+}
+```
+
+If `to` is a relative URL, it will be assumed to be a link to another part of
+this repository's source tree. Otherwise it's used-as is, for example as a link
+to some external documentation.
+
+### "type": "markdown"
+
+A markdown annotation adds an expandable annotation to the end of the annotated
+line, which when clicked, shows an arbitrary markdown snippet.
+
+```json
+{
+ "type": "markdown",
+ "lineno": integer,
+ "title": "title of the annotation",
+ "content": "markdown text..."
+}
+```
+
+## Full example
+
+Here is a complete example of a valid annotations JSON:
+
+```json
+{
+ "98bc0394a2f15171fb113acb5a9286a7454f22e7": [
+ {
+ "type": "markdown",
+ "lineno": 33,
+ "title": "2 references",
+ "content": "- [../main.c:123](https://example.org)\n- [../main.c:321](https://example.org)"
+ },
+ {
+ "type": "link",
+ "lineno": 38,
+ "colno": 7,
+ "len": 15,
+ "to": "#L6"
+ },
+ {
+ "type": "link",
+ "lineno": 34,
+ "colno": 13,
+ "len": 11,
+ "to": "src/utf8_encode.c#L5"
+ },
+ {
+ "type": "link",
+ "lineno": 41,
+ "colno": 2,
+ "len": 11,
+ "to": "src/utf8_encode.c#L5"
+ }
+ ]
+}
+```