Try   HackMD

Decentralized Issue Tracking with Radicle + git-issue

Radicle is a decentralized platform for code collaboration. Radicle is still in its early development stages and even though it aims to be the "decentralized GitHub", it still doesn't tackle Issue Tracking, so it does not yet offer an alternative to GitHub Issues.

Because of this, I've been wondering what issue tracking looks like in a peer-to-peer setting, where git is the main "backend", so I took a look around to find existing solutions for issue tracking in git.

Git-Issue came up as one of the most prominent options, so I tried combining the two to see what decentralized issue tracking could look like.

0. Prerequisites

  • git version 2.34+
  • git-issue
    • If on macOS, you'll probably need the GNU date package, which comes as part of the coreutils package on Homebrew. brew install coreutils is your friend.

1. Create Git Repo with embedded git-issue

a. Create a Repo with a README

mkdir -p fun-with-issues
cd fun-with-issues
echo "# Fun with Issues\n" > README.md
echo "This repo showcases how to use git-issue" >> README.md
git init .
git add .
git commit -m 'This is going to be fun'

b. Create some issues

$ git issue init -e
Initialized empty issues repository in /Users/yorgos/dev/playground/fun-with-issues/.issues

$ git issue new -s 'Take over the world'
Added issue 3ff2e39

NOTE: the -e parameter is important as it tells git-issue to NOT create a new git repo under .issues but rather to use the existing git repo we have already created.

c. Verify the issues have been created

Check the output of the below commands looks as expected.

$ git issue list 
ecc2dd2 Take over the world

$ git log

2. Push to Radicle

Next, we are ready to publish our local copy on Radicle.

First, we need to initialize the repo for Radicle and then we can

22-02-11 20:30 ➜  fun-with-issues git:(main) rad init

Initializing local 🌱 project fun-with-issues

ok Description · A project with an embedded issue tracker, powered by dspinellis/git-issue.
ok Default branch · main
ok Initializing...

=> Your project id is rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy. You can show it any time by running:
   rad show --project

=> To publish your project to the network, run:
   rad push
   
   
22-02-11 20:31 ➜  fun-with-issues git:(main) rad push
Pushing 🌱 to remote `rad`
$ git push rad
Password for 'rad://radicle@hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy.git':
Everything up-to-date

Git version 2.34.1
Git signing key ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPn+c2TZ9TNvPXd3FHcKpo2+cAuqRQ8HUNOqdmijl3ui

Syncing 🌱 project rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy to https://pine.radicle.garden/

ok Syncing delegate hnrkkfb6agf1uxmg3pnuj8kgcppk6g5ys5gyo...
ok Syncing project identity...
ok Syncing project refs...
ok Project synced.

🌱 Your project is synced and available at:

   (web) https://app.radicle.network/seeds/pine.radicle.garden/rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy
   (web) https://app.radicle.network/seeds/pine.radicle.garden/rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy/remotes/hydh9hh5r584ug537q75te7akw4g5hhymijno6b4o4qi8c4fd1774r
   (git) https://pine.radicle.garden/hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy.git

3. Retrieve issues from Radicle

In order to view the existing issues of the project, we just need to clone the repo from Radicle!! The issue tracker is embedded, remember? ;)

$ mkdir -p working-copy
$ cd working-copy
$ git clone https://pine.radicle.garden/hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy.git project-with-issue-tracker
Cloning into 'project-with-issue-tracker'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 914 bytes | 457.00 KiB/s, done.

Finally, you can view the list of issues:

$ git issue list 
ecc2dd2 Take over the world

🎉 "It works"! 🎉

Closing Thoughts

git-issue + Radicle provide a working, decentralized, issue tracking solution!

(this list is a work-in-progress)

➕ Installation/setup is really lightweight.
➕ There is practically zero maintenance overhead for your issue tracker. No extra system to maintain / uptime to worry about !! 🥳
➕ git-issue already supports importing issues from GitHub / GitLab, which offers a smooth migration path for teams that want to switch their issue tracking to a decentralized solution as well.
➕ git-issue already provides a rich feature set for working with issues.
➕ If you want a private issue tracker, there's not much to it! You just keep your repo private - i.e. you don't publish to a community seed node.

➖ Coming from a GH issues background, I am still expecting the web-based UI to visualise issues. It would be pretty neat if app.radicle.network could be taught to read the issues format by git-issue.
➖ Some graphical user interface for git-issue would be needed at some point. Not everyone who interacts with issues is comfortable on the command-line.
➖ Attaching screenshots/files is technically be possible, but it's not exactly as convenient as drag&drop.
➖ git-issue might be missing features (e.g. per-issue permissions, @mention notifications, etc.) that mean it's not on-par with GitHub issues.