Repository navigation
A vision for the future of git-bug #1391
Replies: 7 comments 21 replies
|
I'll answer for each sections. Sorry for the quite unstructured response: CLI redesignLots to say here, in no particular order:
To the point: I've turned that problem in my head for a loooong time, and my conclusion was that the root cause is the magic git integration. It's "cool" but really doesn't bring much on the table besides that extra Bridges: external binaries, primarily invisible
Replacement of the javascript UIFor all its flaws, that UI works. But I do agree, there is nobody to maintain it, and even less to push it further. At some point the fact that it works stops being a good point. A rewrite however would be a large endeavor. It would be great if someone from the community would step up. Client/server architectureI think this is not really addressing the right problem. Here is how the locking works currently:
To me, the actual problem is that this locking is very crude. The reason it's done that way is ... that it's simple and works most of the time. It is however very much possible to do better, with a bit of effort:
Once that is done, the problem of locking should be entirely bearable.
Redesign of the TUIAgree on the principle, but this is again a large undertaking. Is it worth it? |
|
Hello, I read all your discussion here. I'm trying to integrate this tool into my workflow. I want to say that I feel that the redesign of the CLI is really necessary. The commands proposed by @sudoforge feel more natural to me. I felt the need to create these git aliases for my workflow to be smoother I configured the bridge For me it is really important that the commands are simple, natural and elegant, at least those commands that I will be typing a low of times like those three I gave aliases to. |
|
Hi! I love the concept of this project, and what I've seen while playing around is pretty rad. I'd be interested in maybe helping with some of the current WebUI stuff (though less interested in WASM as the base,) but I'm not really seeing much in the way of planning or discussions around what would be the best to look at. Would just starting to look at the tickets tagged webui (there's 5 open, from 2021) be best, or is there a better place to look that might be helpful? |
|
Thanks @sudoforge , it's great to read your vision! Looking at the bridges; I totally see the value to breaking them out into their own repositories. I also see what's been called out about (a) them being crucial to adoption (so some 'first class' bridges like Github and Gitlab being trivially easy to get going) and (b) that designing an RPC API usable between the two would be quite a burden. Have you considered the use of Hashicorp's go-plugin? Pulling from their feature list:
I think this offers the benefits of isolated development and ease of maintenance. (Maintaining one bridge implementation in-tree, which is the gRPC interface, being less effort than managing N bridges). I could definitely see myself doing the following to get started! |
|
I completely agree with @MichaelMure here:
Perhaps it is because I am an user of vi-style editors, but for me |
|
Hi folks. Out of frustration with LLMs spewing things all over my git repos that should be ...somewhere else... I recently put together a tool that sits atop I'm basically growing it free-form with all of the things that I want on a daily basis. I thought that it might serve as an interesting reference point for interfacing and use. It also might embody anti-patterns that you want to stay away from 🙃. I would almost argue for a branch/fork where folks just go wild trying things that might be interesting. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
TL;DR:
As part of helping shape the future of git-bug, I’ve been thinking deeply about a variety of improvements I'd like to see. I've written a long-form vision document here for feedback, and would love to hear what you think!
Hello! I go by "sudoforge". I joined
git-bugas a maintainer last year, and have spent some time sifting through the backlog of changes and issues (sometimes years old). If you've been looking atgit-bugin the past few months, you may have seen me around.Like many of you, I have spent the bulk of my career and personal life using centralized, usually proprietary issue management platforms. I first learned of
git-bugmany years ago, but time and time again, I was unable to adopt it into my workflows for a number of reasons -- be it from bugs, or a lack of features needed in a corporate environment. In addition to this, many users regularly face challenges adoptinggit-bugfor technical reasons, be it due to a poor user experience, or encountering errors performing what should be trivial tasks.I want to change that. I want to make
git-buga viable alternative to the proprietary applications out there: a first-class issue and project management tool. I want to make it the top choice for users and companies alike. I want to make it the source of truth for issues on these proprietary platforms.Overview
At a high level, the goals I have for this project are to improve the user experience and core feature set in such a way that turns
git-buginto a first-class project management tool.This section provides a high level overview of the different topic areas this document will focus on. These topics are expanded on below.
CLI redesign (again). Much of the design behind the current CLI was driven by the desire for scoping commands to entities - that is,
git bug <entity>. This makes a certain sense, but it becomes clunky when considering thebugentity (git bug bug <action>), and how some subcommands are actions instead of entities (git bug {pull,push}). This leads to an inconsistent experience, and I want to rectify this. Given that "bugs" (issues) are the central entity, everything else is secondary: users, bridges, labels, comments. By taking a verb-first approach to the command-line, we can improve ergonomics and keep the nesting of commands a bit shorter.Bridges should be external. Bridges are a great feature to support adoption of
git-bug, and integrate with existing project management tools. However, by building and maintaining bridges within this repository, we detract from the core feature set ofgit-bug, and at times, end up having a broken test suite or build process due to external vendor changes that are out of our control. I do not think bridges should go away, but I think the way they're integrated should change.Client/server architecture. Right now, the git-bug process is "foreground-only" -- when you run the binary, it is a blocking command that takes up your terminal session. I envision a future in which running a subcommand starts a lightweight server that lives until it is explicitly shut down, or your user session or system is restarted. This server component would support API calls made by a client (the CLI, TUI, or web UI). This design would add support for a single process managing multiple repositories, which could be used by any of the clients (the CLI, TUI, or web UI), which would be able to provide a unified UX as they would all be lightweight thin clients.
Replacement of the javascript-based web UI. Right now, maintainership is constrained, and we don't have a Javascript expert. The current web UI provides very limited functionality, but having a web app is likely a high-stakes feature for a
1.0. In the future, I think it would be great to use one language to provide the different UIs, and with different web frameworks (or maybe even WASM), this is very possible.TUI redesign. Using
bubbletea, a redesigned UI focusing on smooth interaction, asynchronous operations (kick off a fetch via the server, push in a background thread), customizable color schemes, customizable keybindings, and an all-around improved experience.CLI redesign
The existing command-line interface can feel a little clunky. For example, to list all of the existing labels, there's
git bug label, but to add a label to an issue, you need to rungit bug bug label new. Why does this disconnection exist?Personally, I like that
git-bugis a "subcommand" ofgit-- or at least, invoked that way given the approachgittakes for "extensions", by performing a PATH search.I think a verb-first command-line interface works best here to simplify typical workflows while keeping flexibility for future resources. This is not a completed design, nor a full reference, but here's how I'm thinking of potential changes to the command-line interface.
Generally, I like the way
kubectlhandles resources: you can specify the singular or plural form of the entity name, or any unique prefix (e.g.po,pod, andpodsall resolve to the same resource). If this refactoring is completed, you can expect the same thing.I go back and forth on whether or not this makes sense. On the one hand, I very much prefer
git bug pushovergit bug bug push. On the other, I wonder if the difference between the meta commands and the primary commands would be confusing, or if the primary command structure is flexible enough to support the future needs we might encounter.git-bugused to have a command-line structured this way, but it was changed in the past.But what about...
git bug commands- This feels unecessary. Doesn't the man page, markdown documentation, or help text cover this?git bug termui/webui- these would be flags under theshowcommand with the proposed restructuring. The main idea behind this is that the typical workflow for a user will be to live in the TUI or web UI -- and with the client/server architecture, with the server supporting multiple repositories,show-ing resources on the command-line will be pretty infrequent, as would be needing to open one of the UIs.Bridges: external binaries, primarily invisible
Maintaining bridges within git-bug adds unecessary maintenance overhead. Just see #1367 as an example: this caused pipeline failures and broke the gitlab bridge for multiple days, requiring many hours to resolve. It is but one of many examples you can find throughout the repository that showcases how bridges being embedded within git-bug negatively impacts development of the main platform, which is still immature and needs refinement.
I propose that bridges become external binaries, and in a similar vein to git,
git-bugperforms a PATH search when a given bridge is referenced, passing communication to that binary on the command-line interface, and parsing the response from it (or receiving a response from it over a socket / the API). This would allow bridges to be built and maintained by the community, and avoid imposing the overhead of that maintenance ongit-bug.It might work something like this:
git bug create bridge foois called by the user, which in turn searches for a binary calledgit-bug-bridge-fooand performs calls to it, e.g.git-bug-bridge-foo auth --server 127.0.0.1:54321(which is the address of the server) to kick off authentication for thefoobridge, which in turn calls the server when its auth flow is done in order to communicate back withgit-bug. The place this workflow really shines is withpushandpulloperations, which are now asynchronous, message-based workflows.Invisible Bridges
I'm of the opinion that once a bridge has been configured, it should become invisible. That is to say,
git bug pushandgit bug pullshould push and pull to the git remote(s) and any bridges that are configured (maybe this is configurable, if users want to avoid that?). In addition to that, the server could support automatic push/pull operations for repositories that have been configured, or at least automatic pulling (from remotes and bridges). I think this would greatly improve the user experience around bridges (well, at least, the day-to-day operations).Replacement of the javascript UI
I don't really have much to say about this other than what was written above. At writing, the web UI has multiple vulnerabilities in its dependencies, and while it is a lightweight web application, building out a robust UI in Javascript isn't within the skillset of the current maintainers.
We could utilize WASM, or one of the many Go web frameworks that exist instead, to leverage the experience with Golang that we have to build a performant, robust web app.
I envision the web app being something that the server runs automatically, so you can navigate to
git-bug.localhost(or whatever, this would be configurable, or you could use the IP address), and wouldn't ever really need to explicitly open it.Redesign of the TUI
The current TUI uses
gocui, an unmaintained framework.bubbletea, from the folks atcharmbracelet, is a powerful TUI framework that is actively maintained. Moving to this opens up support for a much richer TUI experience.Client/server architecture
Why on earth am I proposing a server?
As described throughout the rest of this document, I see the server as a necessary component for scaling
git-bugboth with the features I've described here, and for the future. This server would be lightweight, but would support features like asynchronous push/pull operations, management of multiple repositories, abstracting the management of bridges, and maybe more?Let me know what you think!
All reactions