Author:
Hash:
Timestamp:
+54 -22 +/-1 browse
Kevin Schoon [me@kevinschoon.com]
401d1b179845656950b02cef65819bfdc48f10bb
Fri, 06 Jun 2025 13:50:28 +0000 (1 day ago)
1 | diff --git a/README.md b/README.md |
2 | index 22ac7f1..cd3da6e 100644 |
3 | --- a/README.md |
4 | +++ b/README.md |
5 | @@ -1,20 +1,29 @@ |
6 | # ForgeFeed |
7 | |
8 | - ForgeFeed is a small collection of standards which when implemented allow your |
9 | - [forge](https://en.wikipedia.org/wiki/Forge_(software)) to better federate with |
10 | - others across the internet. |
11 | - |
12 | *NOTE: This specification is a W.I.P and should not yet be implemented |
13 | anywhere.* |
14 | |
15 | + ForgeFeed is a collection of specifications and recommendations which when |
16 | + implemented can enhance interoperability and content discovery of different |
17 | + [code forges](https://en.wikipedia.org/wiki/Forge_(software)) |
18 | + across the internet. |
19 | + |
20 | + Below we cover the following specifications: |
21 | + |
22 | + Repository URI - URI Identifier for WebFinger Queries |
23 | + WebFinger Query - Metadata Queries via WebFinger |
24 | + RSS Specification - Repository Discovery via RSS |
25 | + |
26 | + |
27 | ## Repository URI |
28 | |
29 | - A repository URI provides a unique identifier for referencing a repository |
30 | - that is present in a given code forge. This value is similar to |
31 | - [RFC7565](https://datatracker.ietf.org/doc/html/rfc7565). The slug and |
32 | - hostname part MUST match the URI path specification as defined in |
33 | + A repository URI identifies a code repository and optionally the host that is |
34 | + resides on. This value is similar to |
35 | + [RFC7565](https://datatracker.ietf.org/doc/html/rfc7565). The slug and hostname |
36 | + part MUST match the URI path specification as defined in |
37 | [RFC3986-3.3](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) while the |
38 | - hostname, if specified, must match [RFC3986-3.2.2](https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2) |
39 | + hostname, if specified, must match |
40 | + [RFC3986-3.2.2](https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2) |
41 | |
42 | repository-uri = prefix slug hostname |
43 | |
44 | @@ -87,6 +96,13 @@ an example response about a fictitious repository: |
45 | } |
46 | }, |
47 | { |
48 | + "rel": "http://feed-forge.org/rel/clone", |
49 | + "href": "https://example.org/example/spartacus", |
50 | + "properties": { |
51 | + "http://feed-forge.org/ns/vcs-type": "git" |
52 | + } |
53 | + }, |
54 | + { |
55 | "rel": "http://forge-feed.org/rel/license", |
56 | "href": "https://example.com/example/spartacus/tree/LICENSE", |
57 | "properties": { |
58 | @@ -195,6 +211,21 @@ A license SPDX identifier and link to the license's full text. |
59 | } |
60 | ``` |
61 | |
62 | + ### Clone Links |
63 | + |
64 | + Clone links define how one can download a copy of the remote |
65 | + software onto their own server. |
66 | + |
67 | + ```json |
68 | + { |
69 | + "rel": "http://feed-forge.org/rel/clone", |
70 | + "href": "https://example.org/example/spartacus", |
71 | + "properties": { |
72 | + "http://feed-forge.org/ns/vcs-type": "git" |
73 | + } |
74 | + } |
75 | + ``` |
76 | + |
77 | #### Chat Links |
78 | |
79 | Links to chatrooms: IRC, Matrix, XMPP, etc. |
80 | @@ -271,7 +302,7 @@ request. |
81 | 404 |
82 | GET https://example.org/.well-known/webfinger?resource=repository:example/non-existent-repository |
83 | 404 |
84 | - |
85 | + |
86 | # RSS Feeds |
87 | |
88 | Your forge needs to expose an RSS feed in order for other peers to determine |
89 | @@ -295,7 +326,8 @@ element such as below at the root domain of your forge. For example, |
90 | type="application/rss+xml" |
91 | title="Recent Forge Activity" |
92 | href="https://code.example.org/firehose.xml" /> |
93 | - <meta name="forge-feed:index" content="https://code.example.org/firehose.xml"/> |
94 | + <!-- index-url refers to the RSS link on the current webpage which contains forge updates --> |
95 | + <meta name="forge-feed:index-url" content="https://code.example.org/firehose.xml"/> |
96 | </head> |
97 | <body> |
98 | ... |
99 | @@ -326,22 +358,22 @@ below). |
100 | <lastBuildDate>Tue, 03 Jun 2025 14:18:48 +0000</lastBuildDate> |
101 | <ttl>60</ttl> |
102 | <item> |
103 | - <title>Spartacus</title> |
104 | - <description>A Text Adventure Written in FORTRAN 77<description/> |
105 | - <author>admin@example.org (Administrator)</author> |
106 | + <title>Spartacus</title> |
107 | + <description>A Text Adventure Written in FORTRAN 77<description/> |
108 | + <author>admin@example.org (Administrator)</author> |
109 | <!-- Link to an HTTP representation of the repository --> |
110 | - <link>https://example.org/example/spartacus</link> |
111 | + <link>https://example.org/example/spartacus</link> |
112 | <!-- Guid may be the repository name at a particular commit id--> |
113 | - <guid>https://example.org/example/spartacus@f28ce68f16e338355e55372bc788e8ea5feda470</guid> |
114 | - <pubDate>Sun, 25 May 2025 18:23:03 +0200</pubDate> |
115 | + <guid>https://example.org/example/spartacus@f28ce68f16e338355e55372bc788e8ea5feda470</guid> |
116 | + <pubDate>Sun, 25 May 2025 18:23:03 +0200</pubDate> |
117 | <!-- Optional enclosure with an image reference if your forge supports this --> |
118 | <enclosure url="https://example.org/example/spartacus/raw/main/logo.png" length="12216320" type="image/png" /> |
119 | <!-- Although highly recommended, the fields below are optional --> |
120 | - <repository> |
121 | + <repository> |
122 | <!-- repository URI described above --> |
123 | - <webfinger>repository:example/spartacus</webfinger> |
124 | - </repository> |
125 | - </item> |
126 | + <webfinger>repository:example/spartacus</webfinger> |
127 | + </repository> |
128 | + </item> |
129 | </channel> |
130 | </rss> |
131 | ``` |
132 | @@ -355,7 +387,7 @@ about code repositories hosted on your server. |
133 | |
134 | ```xml |
135 | <repository> |
136 | - <webfinger>repository:example/spartacus@example.org</webfinger> |
137 | + <webfinger>repository:example/spartacus@example.org</webfinger> |
138 | </repository> |
139 | ``` |
140 |