Forge currently only supports the Github and Gitlab APIs.
It does however partially support a few additional forge types (see
Partially Supported Forges) and other lighter weight software used
to host Git repositories, which also provide a web interfaces (see
Supported Semi-Forges). Forge doesn’t use the APIs of such forges,
but registering the host and adding repositories to the local database
at least enables the use of commands such as forge-browse
.
A few hosts, which use partially supported forge types, are available
out-of-the-box, because they have an entry in the default value of
option forge-alist
(also see its docstring). For example, the entry
for https://github.com in that variable looks like this:
("codeberg.org" ; GITHOST "codeberg.org/api/v1" ; APIHOST "codeberg.org" ; WEBHOST and INSTANCE-ID forge-gitea-repository) ; CLASS
To be able to add repositories from a, so far, unknown forge instance
to your local database, you have to add an entry for that instance to
forge-alist
. For example, assuming you use another Gitea instance,
hosted at https://example.com, this might be correct:
(push '("example.com" ; GITHOST "example.com/api/v1" ; APIHOST "example.com" ; WEBHOST and INSTANCE-ID forge-gitea-repository) ; CLASS forge-alist)
Look at forge-alist
entries of other hosts using the same forge type
as the instance you are configuring, to see what format might be
appropriate. You should be able to easily determine and verify
GITHOST and WEBHOST, but determining APIHOST is more difficult; you
might have to ask a colleague. APIHOST could be something like
example.com/api/vi
, but it could also be something like
api.example.com
.
For each fully or partially supported forge type, Forge defines at
least a class. The following example is taken from forge-semi.el
:
(defclass forge-cgit-repository (forge-noapi-repository) ((commit-url-format :initform "https://%h/%p.git/commit/?id=%r") (branch-url-format :initform "https://%h/%p.git/log/?h=%r") (remote-url-format :initform "https://%h/%p.git/about")) "Cgit from https://git.zx2c4.com/cgit/about. Different hosts use different url schemata, so we need multiple classes. See their definitions in \"forge-semi.el\".")
Once you add a host using that class to forge-alist
and then a
repository from that host to the local database, you will be able
to use commands such as forge-browse-branch
(but not much more).
If you want to add a repository from another host, which happens to
use another software or another URL schemata, then you might have to
define an additional class first. See forge-semi.el
for simple
examples and grep for defclass forge-.*-repository
for more complex
ones.