Releases: git-bug/git-bug
0.8.0
More than 800 commits and a long long time after, git-bug v0.8.0
is now available.
Once again, this release represent a push towards making git-bug generally useful and correct. The two main improvements are a new Entity framework and write-capable WebUI.
Introduced in this version, the code handling the data model and conflict resolution has been improved to support fully p2p sharing model, and generalized into an easily reusable framework Documentation 1, Documentation 2. This is a huge step forward as it means writing new entities (configuration, pull-request, board ...) becomes nearly as simple as for a CRUD application.
This entity framework makes it easy to extend git-bug, but also to use it as a library to create brand new applications using the same techniques as git-bug.
Additionally, the underlying data model has been improved and fix earlier shortcoming. Notably, operations can now be represented in a DAG with concurrent editions across machines while still supporting proper merge conflict, instead of the enforced linear structure as before. Before, things were working OK with a star topology of git remotes (that is, a central repository) but would break down with anything more complicated. No more! The new data model also becomes fully immutable (aka append-only), which is much more conductive with cryptographic signatures and encryption.
Breaking changes
- changes in the data model makes it a requirement to use the migration tool to to update any previous repo.
- remove the legacy identities that were directly embedded in bugs
Core
- introduce a reusable
entity
package capable of handling all the complex operations of anEntity
(bug, board, config ...): operations, DAG manipulation, conflict merge, signature, integrity ... to greatly simplify writing and maintaining an entity. Documentation 1, Documentation 2 - introduce
CombinedId
, a new kind of identifier for an item within anEntity
(for example a comment in a bug), that hold two partial identifiers interleaved for fast addressing. Documentation - introduce the concept of resolvers, so that entities can link to another
- use
go-git
to manipulate the git repository, instead of executing the localgit
binary - add support for signing the git commit with the author's signature, and verifying
- add support for git config includes by @mindriot101
- rework of the
Repository
layer for modularity, simplicity and testing, allowing more easily to plug an alternative storage - support for full text search in bug comments
- support application namespace in the repository so that other app can use the entity package as a framework by @smoyer64
Commands
- auto-completion of bug identifier, bridge names, credentials, labels, remote, identity and flags 🎉 by @krobelus
- complete refactoring to avoid global variables and be more conductive to testing
- new command
comment edit
to edit a bug's comment - new command
rm
to remove a bug by @vincetiu8 ls
andshow
learned different output format with--format=<format>
, with format being one ofdefault
,plain
,json
,compact
andorg-mode
by @vincetiu8 and @karlicoss- allow
user create
without interactive prompt by @cvhariharan
Query language
- support filtering on bugs having no labels
- support filtering on metadata by @vmiklos
Bug
- complete rework using the new
entity
framework
Cache
- introduce a LRU to have a limit of entities loaded in memory and effectively cap the memory usage of long running processes by @vincetiu8
- proper locking for concurrent access by @vincetiu8
Bridges
- core: support for remote bug tracker rate limiting by @rng-dynamics
- core: support to indicate that the configuration wizard is executed non-interactively and should have all the required parameters set by @GlancingMind
- Github: revamped client and iterator with proper rate limiting handling by @rng-dynamics
- Github: revamped credentials creation following Github removing the previous API by @rng-dynamics
- Github: support new token format by @ellsclytn
- Github: extended tests by @rng-dynamics
- Github: fix push then pull creating duplicates by @rng-dynamics
- Gitlab: revamped client to use the much better
event
API to replace thenote
API that was hard to use and caused a lot of problems and headaches by @5nord - Gitlab: fix access token settings by @remram44
- Gitlab: cleanup titles on import by @vincetiu8
- Gitlab: support new token format by @gaelj
- Jira: fix incorrect client creation reusing the same credential
API
- new HTTP handler to access files stored in git
- new HTTP handler to upload a file to git
GraphQL
- strong typing for identifiers
- prepare for external authentication
- introduce
addCommentAndClose
andaddCommentAndReopen
mutations, to comment and change a bug state in a single atomic operation by @GlancingMind - introduce
editComment
mutation to edit comments
TermUI
- fix a crash when trying to open a bug when there are none by @vojta001
- properly trim spaces in titles by @wavexx
- make the help visually easier to parse
- denser bug list view by @wavexx
- fixed readability on bright terminal by @zdenek-crha
WebUI
- now report GraphQL errors in the console when
--log-errors
is used - large refactoring to bring good practice and simplify future work by @sandhose
- add support for read-only mode by @lukegb and @claudioantonio
- support for creating bugs by @claudioantonio
- support for closing and reopening bugs by @claudioantonio
- allow to specify the host address when launching with
--host=<host>
for easier hosting, in particular in container by @GlancingMind - allow specifying the initial query with
--query
by @vmiklos - dark mode by @GlancingMind
- show count of comment on each bug in the list by @GlancingMind
- improved navigation by @GlancingMind
- comment edition and show edit history by @GlancingMind
- bug list filtering by @GlancingMind
- add user profile by @GlancingMind
- show placeholder for empty comment preview by @GlancingMind
🚀 ☀️
New Contributors
- @mindriot101 made their first contribution in #371
- @vojta001 made their first contribution in #378
- @ogirginc made their first contribution in #380
- @westurner made their first contribution in #382
- @lcook made their first contribution in #388
- @tbm made their first contribution in #404
- @vincetiu8 made their first contribution in #403
- @lukegb made their first contribution in #407
- @karlicoss made their first contribution in #425
- @wavexx made their first contribution in #427
- @zdenek-crha made their first contribution in #457
- @6543 made their first contribution in #471
- @xloem made their first contribution in #490
- @rng-dynamics made their first contribution in #496
- @kenrestivo made their first contribution in #502
- @claudioantonio made their first contribution in #538
- @5nord made their first contribution in #556
- @vmiklos made their first contribution in #568
- @GlancingMind made their first contribution in #588
- @ellsclytn made their first contribution in #636
- @cvhariharan made their first contribution in #650
- @sitiom made their first contribution in #716
- @remram44 made their first contribution in #715
- @gaelj made their first contribution in #773
- @krobelus made their first contribution in #531
- @smoyer64 made their first contribution in #808
Full Changelog: 0.7.1...v0.8.0
0.7.2
This release fix a security issue where arbitrary malicious code could be executed if someone commit a git
executable inside the repository.
More details at: security advisory
Users are advised to upgrade as soon as possible.
0.7.1
This is a bug squashing release.
Core
- cache: fix missing login in LegacyAuthorExcerpt causing panic
- query langage: introduce a proper Lexer/Parser/AST to fix the brittle parsing and unlock more possibilities in the future
Bridges
- all: fix matching between remote and local bug potentially too lax
- gitlab: fix the importer due to URL scheme change
- gitlab: fix the iterator missing labels
- gitlab: avoid trailing API call in the iterator
- jira/gitlab: fix a bad login handling in the configurator
- launchpad: fix a nil value access
🐛 🚀
0.7.0
This release mainly feature the bidirectional Jira bridge, a dramatic webUI improvement and extensive bridges internal rework.
@cheshirekow faced the Jira monster and wrote a complete bidirectional bridge. At the same time, work has been done to refactor the supporting internals, generalize and strengthen it. The next bridge will be much easier to write!
The webUI saw dramatic improvements with @sandhose and @ludovicm67 teaming up. Even though not everything is here yet, it already look and feel like a much more mature tool. The days of a fully featured webUI and even one open to user without git access are on the horizon.
Breaking changes
- bridges configuration format changed. If you had a configured bridge, you will need to remove the section in the repo git config (.git/config) and the credentials in the global git config (~/.gitconfig) and configure it again
Core
- metadata system for the bridge's credentials
- credentials identifiers are now salted to avoid a direct relationship between the identifier and the secret
- added support for login only and login/password kind of credentials
- reusable generic prompt
- fix config reader not able to read values with spaces (@cheshirekow)
- migration to go modules
Bridges
- new fully-featured Jira importer and exporter, courtesy of @cheshirekow
- all bridges got their configurator deeply reworked to be more robust and consistent
- all bridges changed how they match identity and credentials to deal with hopefully all the cornercases
- gitlab: fix exporter not pushing properly with a custom base URL
- gitlab: fix automatic token generation with a custom base URL
- github: warning with the edited comment is missing instead of a failure
GraphQL
- smart resolving to use cached data in priority to get super fast browsing in the webUI
- merge of
DefaultRepository
andRepository
WebUI
- ability to write new comment
- UI refresh
- bug filtering and sorting
- conversion to typescript for a more robust codebase
- fully working GraphQL fragment matcher
🚀 ☀️
0.6.0
This release mainly feature the Github exporter, the bidirectional Gitlab bridge, extensive bridge improvements and better text support in the TermUI.
Thanks to the work of @a-hilaly during and after the Google Summer of Code, numerous improvements have been made on the bridges. The Github workflow is now complete, a full Gitlab bridge has been added, support for cancellation and resume make them fast and robust.
An important work leading to the creation of https://github.com/MichaelMure/go-term-text has been done to provide a better text rendering in the CLI and the termUI, especially for languages with wide characters like Japanese or Chinese.
Breaking changes
- bridges configuration format changed. If you had a configured bridge, you will need to remove the section in the git config (in
.git/config
) and configure it again
Core
- Labels now have colors and are displayed in each UI and exposed in GraphQL, thanks to @ludovicm67
- text formatting for the terminal (CLI and TermUI) as been extracted into its own reusable package: https://github.com/MichaelMure/go-term-text
- a new infrastructure for storing bridge's tokens and credentials has been added by @a-hilaly. This allow in particular to reuse the same credential from multiple git repository.
- hash collision are now checked before storing a new operation
CLI
- new command
git-bug bridge push
to push updates to a remote bugtracker git bug webui
learned the--open
and--no-open
flags to control if the UI should be automatically opened in the default browser, as well as thegit-bug.webui.open
git config to control the default behavior- new command
git-bug bridge auth
to list known credentials - new command
git-bug bridge auth add-token
to store a new token - new command
git-bug bridge auth rm
to remove a credential - new command
git-bug bridge auth show
to display a credential's detail - the command
git-bug termui
learned thegit bug tui
alias - PowerShell completion is now available
Bridges
All of the following changes have been implemented by @a-hilaly , awesome work and a lot of thanks ! ❤️
- new fully-featured Github exporter
- new fully-featured Gitlab importer
- new fully-featured Gitlab exporter
- the Github configurator learned to detect candidate projects from the git remotes
- all bridges now support cancellation for import and export
- all bridges now return a stream of events so that UIs can report them appropriately
- all bridges now tag bugs with their origin and exporter only export their own bugs to avoid unexpected situations. A way to control what is imported and exported will be added later
- all bridges can now read a token from stdin during the configuration to avoid logging it in the shell history
- Github and Gitlab bridges now support resume for a much faster import after the first import
- Github and Gitlab bridges now have automated test suites
GraphQL
- mutations now conform to the Relay specification
repository.ValidLabels
is now a connection
WebUI:
- @sandhose worked at improving the code architecture to prepare for more features
- messages are now properly renderd in Markdown, thanks to @sandhose
🚀 ☀️
0.5.0
This release mainly feature a huge rework of how identities are handled. While they were previously fully embedded in every single bug operations, they are now deported in their own data structure.
Reworking git-bug
to add this whole new identity data model has been a long and arduous journey. Indeed, the concept of identity is so central in a bug tracker that it touched pretty much every file of the project. It took two months to be able to fully compile the project again. Good thing that golang allow to proceed step by step and check that everything works with a set of tests!
This work already yielded some benefits: less memory and storage usage, more performance, or simply being able to query bugs by author or participants. But the real benefit is that is will, once we add cryptographic keys to the identities, serve as a foundation to build more advanced features:
- commit signature to authenticate bug edition or even code authors
- an access right policy with different role (administrator , ...)
- encrypted comment or bugs for sensitive discussion
Note: while git-bug
will only guarantee a stable data model when the 1.0 version is reached, this huge change is backward compatible !
Core
- a whole new data model has been added to store user identities, allowing to store the identity only once, update it, and in the future, to store cryptographic keys. This change spread to the whole stack including the cache layer, all the UI and the bridges
- go 1.8 is not supported anymore due to a dependency update
- bugs now expose the list of actors and participants, thanks to @a-hilaly
- it's now possible to have empty comments, thanks to @Steap. This change was necessary to import data from external bug trackers
- the shortened version of a hash is now consistently 7 characters long, thanks to @seeduvax
Query language
- it's now possible to filter the bug list with a title pattern, thanks to @sladyn98
- it's now possible to filter the bug list by actors or participants, thanks to @a-hilaly
- multiple label filter now match bugs with either one of them instead of bugs with all of them, thanks to @njthomas and @sladyn98
- identities can now also be queried with an ID or an ID prefix (
author:3bb1db1
) in addition to the normal string pattern (author:descartes
), thanks to @a-hilaly
CLI
- new command
git bug user
to display the current identity - new command
git bug user create
to create a new identity - new command
git bug user ls
to list existing identities - new command
git bug user adopt
to select an identity as your own, for example after an import from an external bug tracker - new command
git bug ls-id [<prefix>]
to list either all bug ids or the matching ones, thanks to @sladyn98. This command is intended to help scripting. - new command
git bug version
that display a complete view of what version is running, including the git hash git bug show
can now output specific fields with--field <name>
, thanks to @seeduvax- commands now catch properly interruption signals and unlock the cache before exiting, thanks to @auyer
Building bug cache...
and friends are now properly sent tostderr
for easier filteringgit bug ls
is now super fast by using only cache data, thanks to @sladyn98- @jfacchini cleaned and improved the commands documentation !
TermUI
- the bug table now only use data from the cache, making it super fast
- text layout and display of Chinese and other non-latin languages has been fixed, big thanks to @ProgramFan
- minor layout improvements to better use the screen space
- browsing the bug is now more natural, as reaching the bottom load the next page, thanks to @Steap
- fixed a crash when trying to edit a comment while none were selected, thanks to @ludovicm67
WebUI
- the webUI now use the
Timeline
API and properly display updated comments, thanks to @sandhose - the timeline page now looks better, thanks to @sandhose
GraphQL
- now expose bug's actor and participants, thanks to @a-hilaly
- now expose valid labels, thanks to @ludovicm67
Bridges
- there is now a partial Launchpad importer (!), thanks to @Steap
And of course, the usual bug fixes and minor improvements.
🚀 ☀️
0.4.0
This release mainly feature the Github importer, support for comment edition and an extensive UX rework for the CLI commands.
A new import/export framework has been added with its first offspring, the Github importer. This incremental importer will replicate into git-bug
the Github issues, including the comment edition. Its complement, the exporter, is not that far away and will allow to use git-bug
as an offline remote for Github.
This work on the importer really was a stress test on the data model and the code architecture. Part of that effort was to add support for comment edition. A new EditCommentOperation
now allow to edit a previous comment while still keeping the data model immutable and conflict free. Due to its retroactive effect,the raw stream of operations does not anymore match what an UI should display. To remedy to that problem, the Snapshot
, compiled from the stream of operations, now feature an properly processed Timeline
.
Another important work, the CLI commands received a good UX cleanup to be generally more discoverable and better match the git
experience. Annoyed to have to type a bug id or prefix for each command ? You can now use git bug select
to have it selected implicitly for your next commands.
So, is it ready for prime time ? Not yet I'm afraid. A last needed important change to the data model is the rework of the identity management. This will likely be part of the next version, along with the Github exporter. Any help with that or any part of git-bug will be greatly appreciated. This is your time to make git-bug
your tool.
Core
- operations are now validated before being applied
- operations can now be tagged with arbitrary key/value metadata.
- core now support comment edition with a new
EditCommentOperation
CLI
- rename
git bug new
togit bug add
- new command
git bug select
to select a bug for implicit use later - new command
git bug deselect
to clear the selected bug git bug comment
now display the comments of a bug instead of adding a new comment- new command
git bug comment add
to add a new comment - new command
git bug title
to display the title of a bug - new command
git bug title edit
to change the title of a bug - new command
git bug status
to display the status of a bug open
andclose
are now sub-commands ofgit bug status
- new command
git bug label
to display the labels of a bug - new command
git bug label add
to add a new label to a bug - new command
git bug label rm
to remove a label from a bug - new command
git bug ls-labels
to list labels already used in the repository - new command
git bug bridge
to list configured bridge - new command
git bug bridge configure
to configure a new bridge - new command
git bug bridge pull
to
TermUI:
- better responsible view for the bug table
- support for opening/closing a bug, thanks to @adamslc
- support for comment edition, thanks to @adamslc
- better label edition, thanks to @adamslc
GraphQL:
- the API is now auto-documented
- the new
Timeline
is now exposed
And of course, the usual bug fixes and minor improvements.
🚀 ☀️
0.3.0
This release feature mainly the work to make git-bug both future proof and efficient.
A new caching layer has been added to serve as a backend on top of the low-level access, index bugs and keep them in memory for long lasting scenario. The index is stored on disk and allow to query a repository with 10k bugs pretty much instantly.
A query language has been implemented to be able to filter and sort the bug list.
After research, the serialization format has been changed to JSON for an easier interoperability with any other tool that may want to pickup the format. While JSON is quite verbose, it does compress very well when stored in git. The new format is also versioned to be backward compatible. Note that this is not in itself a backward compatible change, and bugs stored before will not be readable anymore. git-bug is still not considered stable for real usage, but it's fairly close now.
Thanks to @vandesign, git-bug now has a logo !
CLI:
git bug ls
now accept either a query or flags to filter and sort the list.
TermUI:
- you can now sort and filter the bug list with a query
- by default, show only open bugs
WebUI:
- labels are displayed with nice generated colors (#19)
- GraphQL API now accept a query to filter and sort bugs
And of course, the usual bug fixes and minor improvements.
🚀 ☀️
0.2.0
This release feature:
- a revamped web UI
- various fixes, especially on the terminal UI
🚀 ☀️
0.1.0
This first tagged version showcase the core features of git-bug
, including:
- data model to store bugs
- push/pull to a git remote with no-conflict merge
- a git porcelain command that serve as entry point for all the features
- a collection of CLI commands for non-interactive usage
- an interactive terminal UI
- a GraphQL API for reading and editing bugs
- a proof-of-concept rich web UI all embedded in the go binary
- bash and Zsh completion, documentations and manpages
🚀 ☀️