You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.5 KiB
98 lines
3.5 KiB
4 years ago
|
# dehub
|
||
|
|
||
|
dehub aims to provide all the features of a git hosting platform, but without
|
||
|
the hosting part. These features include:
|
||
|
|
||
|
**User management** - Authentication that commits come from the user they say
|
||
|
they do, and fine-grained control over which users can do what.
|
||
|
|
||
|
**Pull requests and issues** - Facilitation of discussion via comment commits,
|
||
|
and fine-grained (down to the file level) sign-off requirements.
|
||
|
|
||
|
**Tags and releases**\* - Mark releases in the repo itself, and provide
|
||
|
immutable and verifiable git tags so there's never any funny business.
|
||
|
|
||
|
**Plugins**\*: Extend all aspects of dehub functionality via executables managed
|
||
|
in the repo itself (in the same style as git hooks).
|
||
|
|
||
|
## Key Concepts
|
||
|
|
||
|
To implement these features, dehub combines two key concepts:
|
||
|
|
||
|
First, repo configuration is defined in the repo itself. A file called
|
||
|
`.dehub/config.yml` contains all information related to user accounts, their pgp
|
||
|
keys, branch and file level access controls, and more. Every commit must adhere
|
||
|
to the configuration of its parent in order to be considered _verifiable_. The
|
||
|
configuration file is committed to the repo like any other file would be, and so
|
||
|
is even able to define the access controls on itself.
|
||
|
|
||
|
Second, the commit message of every dehub commit contains YAML encoded metadata,
|
||
|
which allows dehub to extend git and provide multiple commit types, each with
|
||
|
its own capabilities and restrictions. Some example dehub commit types are
|
||
|
`change` commits, `comment` commits, and `credential` commits.
|
||
|
|
||
|
## Infrastructure (or lack thereof)
|
||
|
|
||
|
Because a dehub project is entirely housed within a traditional git project,
|
||
|
which is merely a collection of files, any existing git or network filesystem
|
||
|
infrastructure can be used to host any dehub project:
|
||
|
|
||
|
* The most barebones [git
|
||
|
daemon](https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon) server
|
||
|
(with a simple pre-receive hook set up).
|
||
|
|
||
|
* A remote SSH endpoint.
|
||
|
|
||
|
* A mailing list (aka the old school way).
|
||
|
|
||
|
* Network file syncing utilities such as dropbox,
|
||
|
[syncthing](https://github.com/syncthing/syncthing), or
|
||
|
[NFS](https://en.wikipedia.org/wiki/Network_File_System).
|
||
|
|
||
|
* Existing git project hosts like GitHub, Bitbucket, or Keybase.
|
||
|
|
||
|
* Decentralized filesystems such as IPFS\*.
|
||
|
|
||
|
_\* Planned feature, but not yet implemented._
|
||
|
|
||
|
# Getting Started
|
||
|
|
||
|
The dehub project itself can be found by cloning
|
||
|
`https://dehub.dev/src/dehub.git`.
|
||
|
|
||
|
Installation of the dehub tool is currently done via the `go get` command:
|
||
|
|
||
|
```
|
||
|
go get dehub.dev/src/dehub.git/cmd/dehub
|
||
|
```
|
||
|
|
||
|
This will install the binary to your `$GOBIN` path, which you'll want to put in
|
||
|
your `$PATH`. Run `go env` if you're not sure where your `$GOBIN` is.
|
||
|
|
||
|
Once installed, running `dehub -h` should show you the help output of the
|
||
|
command. You can continue on to the tutorials if you're not sure where to go
|
||
|
from here.
|
||
|
|
||
|
## Tutorials
|
||
|
|
||
|
The following tutorials will guide you through the basic usage of dehub. As
|
||
|
dehub is still very much in development a high level of git and PGP profiency is
|
||
|
still required in order to use dehub effectively.
|
||
|
|
||
|
TODO
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
The [SPEC](/SPEC.html) is the best place to see every possible nitty-gritty
|
||
|
detail of how dehub works. It attempts to be both human-readable and exhaustive
|
||
|
in its coverage.
|
||
|
|
||
|
## Other links
|
||
|
|
||
|
[ROADMAP](/ROADMAP.html) documents upcoming features and other work required on
|
||
|
the project. If you're looking to contribute, this is a great place to start.
|
||
|
|
||
|
[dehub-remote](/cmd/dehub-remote) TODO
|
||
|
|
||
|
[git-http-server](/cmd/git-http-server) TODO
|