e6319aa686
- I upgraded the actor system (Control.Concurrent.Actor) to support typed per-actor methods with type-level names, parameter lists and return values - For extensible sum types, I decided to use the 'vary' package, while extensible product still uses 'HList' (other options are to get both from 'extensible' (Sum, Prod) or from 'vinyl' (Rec, CoRed)) - Since 'vary' is new, it uses GHC2021 and thus requires GHC 9 - So I decided to make the leap into upgrading to an LTS with GHC 9 - Vervis was at LTS 18, at first I tried 19 and 20 but there were dependency version problems, in particular I couldn't solve them for the 'darcs' package even when I switched to latest LTS which is 22 - So I decided it's time to do the long-waiting task of switching to calling-darcs-process instead of using darcs as a library All of this together creates a huge commit, but 3 big things are now solved :) |
||
---|---|---|
app | ||
config | ||
embed | ||
hook-darcs | ||
hook-git | ||
migrations | ||
src | ||
templates | ||
test | ||
th | ||
.ghci | ||
.gitignore | ||
API.md | ||
AUTHORS.md | ||
bindist.sh | ||
CHANGELOG.md | ||
COPYING | ||
COPYING.AGPL3 | ||
COPYING.CC0 | ||
FEDERATION.md | ||
INSTALL.md | ||
README.md | ||
stack.yaml | ||
update-deps.sh | ||
vervis.cabal |
Vervis
Vervis is a project hosting and management application, with a focus on software projects and decentralization. There is still a lot to do, but if you'd like to try it, a few things more or less work. See below for details.
Vervis is free software, and is committed to software freedom. Most of its code
is in the public domain using the CC0 Public Domain Dedication. The application
as a whole however is released under AGPL version 3. For the legal details, see
the file COPYING
. Please use and reuse Vervis for a Good purpose, and share
your work too in the same spirit.
Try It
You can either use the existing instance mentioned below, or install your own
instance (see INSTALL.md
).
My focus has been on writing the backend side of features and exploring various experimental features. As a result, the user interface and visual design and page styles (i.e. the whole UX and UI) are in a bad shape right now, so I want to write a few little guidelines to help you find your way until this situation improves.
There is a Vervis instance running at https://vervis.peers.community, and I store my code on it. Feel free to use it and try it, however do please treat it as a demo, as it's not a reliable stable instance for general use yet. If for any reason you do with to keep some code and tickets etc. on it for actual use, please contact me to let me know.
Here are the steps to make the most out of it at this point (at least at the time of writing, I'll try to keep this little tutorial up to date)!
-
Create an SSH key if you don't have one. Most likely you do, for pushing to your existing repos hosted on your favorite project hosting platform.
-
Browse to the instance I linked above, and click Sign up. Choose a username and a password. Email address is currently optional on this instance, but it's going to be required soon and used for things like password reset, so please do provide a real email address.
-
Log in. Once you log in, the front page will change, and among other things, it will link to your SSH keys. Go there to add your SSH key. In the algorithm box you paste the first part e.g.
ssh-rsa
, and in the second box you paste the long scary part that follows it. -
The front page also links you to repos and projects, you can create a project and open tickets. You can also create a Git or Darcs repo, and optionally associate it with a project. A project can have any number of repos asociated with it, sharing the same ticket tracker. Creating a project or repo may ask you to create a project or repo role; the front page has links for creating these
-
You can browse all the projects and repos hosted on the instance.
-
Add the following to your
~/.ssh/config
file, or create it if doesn't exist. To be honest I'm not sure it's still required, and haven't tested yet. If you find that this step is unnecessary and everything works without it, let me know :)Host vervis.peers.community KexAlgorithms +diffie-hellman-group1-sha1 ControlMaster no ForwardAgent no ForwardX11 no Ciphers +aes256-cbc MACs +hmac-sha1 PubkeyAcceptedKeyTypes +ssh-rsa HostKeyAlgorithms +ssh-rsa
Once you create a repository, it is possible that initially, trying to look at it will give you 404. It should be okay though once you push some commit into it.
The examples below use Git, but it's exactly the same for Darcs. They are equally supported.
Cloning repositories works over (unauthenticated) HTTPS and (authenticated) SSH.
HTTPS clone:
$ git clone https://vervis.peers.community/repos/rjQ3E vervis
SSH clone and push:
If your system username and Vervis username are identical:
$ git clone vervis.peers.community:rjQ3E vervis
If usernames are different:
$ git clone luke@vervis.peers.community:rjQ3E vervis
A few more little notes:
- No password reset, it's already implemented but not deployed yet at the time of writing these words
- A few more features are available, such as ticket workflows and ticket claim requests, but they are less important so I'm not going into them at this point
- Deletion of users, projects and repos may not work
- Login session should last for 2 hours after last access
- The instance I'm running serves only HTTPS, no plain HTTP
- There's no HTTPS push
- Merge requests not implemented yet
- I started working on federation using ActivityPub, I'll update here when it's ready for trying against ActivityPub clients and servers
- Feedback is very very very very very welcome and needed!!! :)
Federation & API
See FEDERATION.md
& API.md
.
Installation
See INSTALL.md
.
Using
See the .cabal file for more info and link to project website and version control.
The official download location is the Darcs repository:
https://vervis.peers.community/repos/rjQ3E
There is a backup repo, not always up to date though, at:
https://codeberg.org/forgefed/vervis
See the file INSTALL.md
for a detailed usage and deployment guide. The file
ChangeLog
explains how to see the history log of the changes done in the
code. NEWS.md
provides a friendly overview of the changes for each release.
Finding your way in the codebase
Folders:
app
: main functions of the web app, for regular build and for development modesconfig
: Settings the app reads when it launches, some defined by a human and some auto-generated.git
: Internal version control data of this repoembed
: Files embedded into the app source code at build time (using TH)hook-darcs
&hook-git
: main functions for VCS hook programs to be inserted into every repo hosted by the appmigrations
: Helper files for DB migrations: New entities added & model files for migrations involving data manipulationsrc
: Web app Haskell source code, built as a library whose modules are used by the various executablesstatic
: Static files (such as CSS and fonts) served by the web app (no such files at the moment)templates
: UI page and widget templates (.hamlet
for HTML,.cassius
for CSS)test
: No tests have been written yetth
: Domain-specific language snippets, from which code is generated using TH
Files:
.gitignore
th/routes
th/models
update-deps.sh
bindist.sh
Haskell modules in src
:
- Non-
Vervis
modules:- Modules ending with
Local
: - The rest:
- Modules ending with
Vervis.Data
Vervis.Persist
Vervis.Fetch
Vervis.Serve
Vervis.Query
Vervis.Web
- Primary web app support modules:
Vervis.Foundation
Vervis.Application
Vervis.Settings
Vervis.Model
Vervis.Migration
- Primary web app logic modules:
Vervis.Actor
Vervis.Handler
Vervis.Client
Vervis.Ssh
Reporting Bugs and Suggesting Features
If you found a bug, or you have an idea, a feature request or a wishlist item, open a ticket for it! Even if you're going to implement something or try to solve it.
If you're going to implement some feature or fix some bug you found, start by opening a ticket here so that other people will know which features are being developed and who does what.
UPDATE: The ticket tracker is temporarily unavailable. You can instead contact Pere to report issues and to coordinate work.
Funding
This project is funded through the NGI Zero Entrust Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the NLnet project page.