Trunk-based development manager for a solo developer. https://git.kemitix.net/kemitix/git-next
Find a file
Paul Campbell 0d57ee7bc0
All checks were successful
ci/woodpecker/push/cron-docker-builder Pipeline was successful
ci/woodpecker/push/tag-created Pipeline was successful
ci/woodpecker/push/push-next Pipeline was successful
refactor(gitforge): migrate some types from forge
2024-04-18 19:18:27 +01:00
.cargo build: Add cargo config file 2024-04-06 18:51:37 +01:00
.git-hooks chore: add cc-cli support for conventional commits 2024-04-06 17:50:25 +01:00
.woodpecker build(woodpecker): restore dropped cargo build 2024-04-10 07:24:38 +01:00
src refactor(gitforge): migrate some types from forge 2024-04-18 19:18:27 +01:00
.git-next.toml chore(git-next): add config file 2024-04-09 11:00:29 +01:00
.gitignore feat(dev): Add recipe for exposing webhook server 2024-04-15 17:26:21 +01:00
.rgignore build(woodpecker): TODO checker ignores git hook samples 2024-04-07 17:17:49 +01:00
bacon.toml build(bacon): Add bacon.toml config 2024-04-07 16:06:10 +01:00
Cargo.toml feat(server/gitforge): replace git abstraction 2024-04-18 08:22:55 +01:00
default.toml feat(init): define default repo config 2024-04-09 10:56:15 +01:00
Dockerfile build(docker): include default toml files in build context 2024-04-11 18:58:30 +01:00
Dockerfile.builder build(docker): add Dockerfile and builder 2024-04-07 16:20:04 +01:00
justfile feat(dev): Add recipe for exposing webhook server 2024-04-15 17:26:21 +01:00
LICENSE docs(license): update copyright name 2024-04-08 20:32:10 +01:00
README.md docs(readme): rewrite README 2024-04-12 11:27:04 +01:00
renovate.json chore: Configure Renovate (#5) 2024-04-07 12:42:17 +01:00
server-default.toml feat(config)!: Add webhook URL field to server config 2024-04-13 14:09:57 +01:00

git-next

git-next is a combined server and command-line tool that enables trunk-based development workflows where each commit must pass CI before being included in the main branch.

status-badge

Features

  • Enforce the requirement for each commit to pass the CI pipeline before being included in the main branch
  • Provide a server component that manages the trunk-based development process
  • Ensure a consistent, high-quality codebase by preventing untested changes from being merged

Installation

You can install git-next using Cargo:

cargo install git-next

Configuration

  • The repo has a .git-next.toml file in it's root. (N.B. see #28 for a planned alternative)
  • CI checks should be configured to run when the next branch is pushed.
  • The dev branch must have the main branch as an ancestor.
  • The next branch must have the main branch as an ancestor.

Behaviour

Development happens on the dev branch, where each commit is expected to be able to pass the CI checks.

(Note: in the diagrams, mermaid isn't capable of showing main and next on the same commit, so we show next as empty)

gitGraph
    commit
    commit

    branch next

    branch dev
    commit
    commit
    commit

When the git-next server sees that the dev branch is ahead of the next branch, it will push the next branch fast-forward one commit along the dev branch.

gitGraph
    commit
    commit

    branch next
    commit

    branch dev
    commit
    commit

It will then wait for the CI checks to pass for the newly updated next branch. When the CI checks for the next branch pass, it will push the main branch fast-forward to the next branch.

gitGraph
    commit
    commit
    commit

    branch next

    branch dev
    commit
    commit

If the CI checks should fail for the next branch, the developer should amend that commit in the history of their dev branch. They should then force-push their rebased dev branch.

gitGraph
    commit
    commit

    branch next
    commit

    checkout main

    branch dev
    commit

    commit
    commit

git-next will then detect that the next branch is no longer part of the dev branch ancestory, and reset next back to main. We then return to the top, where git-next sees that dev is ahead of next.

Important

The dev branch should have the next branch as an ancestor.

If the git-next server finds that this isn't the case, it will force-push the next branch back to the same commit as the main branch.

In short, the next branch belongs to git-next.

Getting Started

To use git-next for trunk-based development, follow these steps:

Initialise the repo

You need to specify which branches you are using

To create the default config file, run this command in the root of your repo:

git next init

This will create a .git-next.toml file. Default

By default the expected branches are main, next and dev. Each of these three branches must exist in your repo.

Initialise the server

The server uses the file git-next-server.toml for configuration.

The create the default config file, run this command:

git next server init

This will create a git-next-server.toml file. Default

Edit this file to your needs.

Specify the access token.

The branch parameter for the repo identies the branch where the .git-next.toml file should be found.

Run the server

In the directory with your git-next-server.toml file, run the command:

git next server start

Contributing

Contributions to git-next are welcome! If you find a bug or have a feature request, please create an issue. If you'd like to contribute code, feel free to submit a merge request.

Before you start committing, run the just install-hooks command to setup the Git Hooks. (Get Just)

License

git-next is released under the MIT License.