2018-08-04 18:17:08 -07:00
|
|
|
Maintaining the Neovim project
|
|
|
|
==============================
|
|
|
|
|
|
|
|
Notes on maintaining the Neovim project.
|
|
|
|
|
2019-01-10 17:20:15 -07:00
|
|
|
General guidelines
|
|
|
|
------------------
|
|
|
|
|
|
|
|
* Decide by cost-benefit
|
|
|
|
* Write down what was decided
|
|
|
|
* Constraints are good
|
|
|
|
* Use automation to solve problems
|
2021-09-14 10:20:33 -07:00
|
|
|
* Never break the API... but sometimes break the UI
|
2019-01-10 17:20:15 -07:00
|
|
|
|
2022-10-09 05:21:52 -07:00
|
|
|
Issue triage
|
|
|
|
------------
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2021-09-14 10:20:33 -07:00
|
|
|
In practice we haven't found a way to forecast more precisely than "next" and
|
|
|
|
"after next". So there are usually one or two (at most) planned milestones:
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2022-10-09 05:21:52 -07:00
|
|
|
* Next bugfix-release (1.0.x)
|
|
|
|
* Next feature-release (1.x.0)
|
2018-08-04 18:17:08 -07:00
|
|
|
|
|
|
|
The forecasting problem might be solved with an explicit priority system (like
|
|
|
|
Bram's todo.txt). Meanwhile the Neovim priority system is defined by:
|
|
|
|
|
2022-10-09 05:21:52 -07:00
|
|
|
* PRs nearing completion.
|
|
|
|
* Issue labels. E.g. the `+plan` label increases the ticket's priority merely
|
2019-01-10 17:20:15 -07:00
|
|
|
for having a plan written down: it is _closer to completion_ than tickets
|
|
|
|
without a plan.
|
2022-10-09 05:21:52 -07:00
|
|
|
* Comment activity or new information.
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2021-09-14 10:20:33 -07:00
|
|
|
Anything that isn't in the next milestone, and doesn't have a finished PR—is
|
2018-08-04 18:17:08 -07:00
|
|
|
just not something you care very much about, by construction. Post-release you
|
|
|
|
can review open issues, but chances are your next milestone is already getting
|
2021-09-14 10:20:33 -07:00
|
|
|
full... :)
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2019-08-25 16:00:52 -07:00
|
|
|
Release policy
|
2018-08-04 18:17:08 -07:00
|
|
|
--------------
|
|
|
|
|
2019-01-10 17:20:15 -07:00
|
|
|
Release "often", but not "early".
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2019-01-10 17:20:15 -07:00
|
|
|
The (unreleased) `master` branch is the "early" channel; it should not be
|
2019-04-27 09:25:55 -07:00
|
|
|
released if it's not stable. High-risk changes may be merged to `master` if
|
2019-08-25 16:00:52 -07:00
|
|
|
the next release is not imminent.
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2019-04-27 09:25:55 -07:00
|
|
|
For maintenance releases, create a `release-x.y` branch. If the current release
|
|
|
|
has a major bug:
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2019-01-10 17:20:15 -07:00
|
|
|
1. Fix the bug on `master`.
|
|
|
|
2. Cherry-pick the fix to `release-x.y`.
|
2019-04-27 09:25:55 -07:00
|
|
|
3. Cut a release from `release-x.y`.
|
2022-10-09 05:21:52 -07:00
|
|
|
* Run `./scripts/release.sh`
|
|
|
|
* Update (force-push) the remote `stable` tag.
|
|
|
|
* The [CI job](https://github.com/neovim/neovim/blob/3d45706478cd030c3ee05b4f336164bb96138095/.github/workflows/release.yml#L11-L13)
|
|
|
|
will update the release assets and force-push to the `stable` tag.
|
2019-08-25 16:00:52 -07:00
|
|
|
|
2022-10-09 05:21:52 -07:00
|
|
|
### Release automation
|
2021-10-26 08:45:15 -07:00
|
|
|
|
2022-10-09 05:21:52 -07:00
|
|
|
Neovim automation includes a [backport bot](https://github.com/zeebe-io/backport-action).
|
|
|
|
Trigger the action by labeling a PR with `backport release-X.Y`. See `.github/workflows/backport.yml`.
|
2021-09-26 17:24:20 -07:00
|
|
|
|
2022-10-09 05:21:52 -07:00
|
|
|
Third-party dependencies
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
These "bundled" dependencies can be updated by bumping their versions in `cmake.deps/CMakeLists.txt`.
|
|
|
|
Some can be auto-bumped by `scripts/bump-deps.sh`.
|
|
|
|
|
|
|
|
* [LuaJIT](https://github.com/LuaJIT/LuaJIT)
|
|
|
|
* [Lua](https://www.lua.org/download.html)
|
|
|
|
* [Luv](https://github.com/luvit/luv)
|
|
|
|
* [gettext](https://ftp.gnu.org/pub/gnu/gettext/)
|
|
|
|
* [libiconv](https://ftp.gnu.org/pub/gnu/libiconv)
|
|
|
|
* [libtermkey](https://github.com/neovim/libtermkey)
|
|
|
|
* [libuv](https://github.com/libuv/libuv)
|
|
|
|
* [libvterm](http://www.leonerd.org.uk/code/libvterm/)
|
|
|
|
* [lua-compat](https://github.com/keplerproject/lua-compat-5.3)
|
|
|
|
* [msys2](https://github.com/msys2/MINGW-packages) (for mingw Windows build)
|
|
|
|
* Changes to mingw can [break our mingw build](https://github.com/msys2/MINGW-packages/issues/9946).
|
|
|
|
* [tree-sitter](https://github.com/tree-sitter/tree-sitter)
|
|
|
|
* [unibilium](https://github.com/neovim/unibilium)
|
|
|
|
|
|
|
|
### Vendored dependencies
|
|
|
|
|
|
|
|
These dependencies are "vendored" (inlined), we must update the sources manually:
|
|
|
|
|
|
|
|
* `src/mpack/`: [libmpack](https://github.com/libmpack/libmpack)
|
|
|
|
* send improvements upstream!
|
|
|
|
* `src/xdiff/`: [xdiff](https://github.com/git/git/tree/master/xdiff)
|
|
|
|
* `src/cjson/`: [lua-cjson](https://github.com/openresty/lua-cjson)
|
|
|
|
* `src/nvim/lib/`: [Klib](https://github.com/attractivechaos/klib)
|
|
|
|
* `runtime/lua/vim/inspect.lua`: [inspect.lua](https://github.com/kikito/inspect.lua)
|
|
|
|
* `src/nvim/tui/terminfo_defs.h`: terminfo definitions
|
|
|
|
* Run `scripts/update_terminfo.sh` to update these definitions.
|
|
|
|
* [treesitter parsers](https://github.com/neovim/neovim/blob/fcc24e43e0b5f9d801a01ff2b8f78ce8c16dd551/cmake.deps/CMakeLists.txt#L197-L210)
|
|
|
|
|
|
|
|
### Forks
|
|
|
|
|
|
|
|
We may maintain forks, if we are waiting on upstream changes: https://github.com/neovim/neovim/wiki/Deps
|
2021-09-26 17:24:20 -07:00
|
|
|
|
2019-08-25 16:00:52 -07:00
|
|
|
See also
|
|
|
|
--------
|
2018-08-04 18:17:08 -07:00
|
|
|
|
2022-10-09 05:21:52 -07:00
|
|
|
* https://github.com/neovim/neovim/issues/862
|
|
|
|
* https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt
|