Skip to content

Show a Github PR's combined checks state in branches list (and main view for selected branch) - #5874

Merged
stefanhaller merged 4 commits into
masterfrom
github-checks
Aug 2, 2026
Merged

Show a Github PR's combined checks state in branches list (and main view for selected branch)#5874
stefanhaller merged 4 commits into
masterfrom
github-checks

Conversation

@stefanhaller

@stefanhaller stefanhaller commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

For a while now we have been showing Github icons in the branches panel to indicate which branches have an associated pull request. This PR changes this so that open PRs (which used to show a green Github icon) now show a colored symbol indicating the combined state of the Github checks (if any are configured for this repo):

image

This lets you see at a glance which of your PRs are ready to merge. (Note however that this feature knows nothing about which of the checks are required for merging, so a branch showing a failure icon may still be ready to merge if the failing checks are not required ones.)

It may be a little confusing for new users to see two green checkmarks for a branch, one to the left of the name and one to the right; they mean very different things. Still, seeing the Github checks state in the branches list is so useful that I think it's a good compromise; hopefully users will learn quickly enough what all the icons mean.

When selecting a branch that has a pull request, the main view already showed some information about the PR (its title, pr number, and the state (open/closed/merged). This PR adds an aggregated pull request checks field to this, indicating the overall checks state (passed/failed/pending/...). It has a hyperlink taking you directly to the checks tab on Github.

CleanShot 2026-07-30 at 12 32 25@2x

The update frequency of the checks badge is tied to the auto-fetch cadence for now (once every minute by default); you can fetch manually to force an update, and some user actions (including the focus-in refresh) update the PR states too, but anything more fancy (e.g. fetching just the checks state of the selected branch) would have been more work, and I want to see if this is good enough.

@stefanhaller stefanhaller added the enhancement New feature or request label Jul 30, 2026
@stefanhaller stefanhaller changed the title Show Github checks state in main view for selected branch Show a Github PR's combined checks state in main view for selected branch Jul 30, 2026
@stefanhaller
stefanhaller force-pushed the github-checks branch 2 times, most recently from 020ad3e to b1ef033 Compare July 30, 2026 18:39
@TyceHerrman

Copy link
Copy Markdown
Contributor

I tried this out locally and lgtm!

@stefanhaller

Copy link
Copy Markdown
Collaborator Author

I couldn't help trying to find ways to show it in the branches list too; it's just too useful there. I pushed a fixup that shows it instead of the github icon for open branches that have a state; it's potentially somewhat confusing because there's a to the left and to the right of the branch name, and they mean very different things, but I still like it enough that I'm leaning towards keeping it. Feedback welcome.

The fetch currently combines transport, JSON decoding, and model
conversion, which makes response changes difficult to verify without
exercising the network. Put the deterministic work behind a small parser
so later payload changes can be covered with raw GraphQL fixtures.
GitHub exposes a combined status for the head commit without requiring
individual check contexts. Include that rollup in the existing request
and startup cache so every consumer sees the same state without making a
second network request.
The branch controller should decide which pull request to show, not how its
header is styled and linked. Move the existing formatter and state badge next
to the branch presentation helpers so subsequent header changes stay in one
layer.
In the branches list we show the checks icon (✓, ✗ etc) instead of the
gihub icon for branches that are open and have a state. It is a little
confusing, because the ✓ in front of the name means something very
different than the ✓ after it, but the checks status is just too useful
to see in the list.

In the main view we show it as a compact status before the PR title,
with a hyperlink that takes you directly to the checks tab in Github.
@stefanhaller stefanhaller changed the title Show a Github PR's combined checks state in main view for selected branch Show a Github PR's combined checks state in branches list (and main view for selected branch) Aug 2, 2026
@stefanhaller
stefanhaller merged commit 669c445 into master Aug 2, 2026
14 checks passed
@stefanhaller
stefanhaller deleted the github-checks branch August 2, 2026 17:08
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 11, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) | minor | `v0.63.1` → `v0.64.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>jesseduffield/lazygit (jesseduffield/lazygit)</summary>

### [`v0.64.0`](https://github.com/jesseduffield/lazygit/releases/tag/v0.64.0)

[Compare Source](jesseduffield/lazygit@v0.63.1...v0.64.0)

<!-- Release notes generated using configuration in .github/release.yml at v0.64.0 -->

#### What's Changed

This release has massive changes, but most of them should hopefully not be visible: I completely overhauled lazygit's concurrency model, which was, let's say, less than robust; there were lots of data races, and we were just lucky that this didn't result in crashes or misbehavior more often. We now have a robust concurrency model with no known data races, and in fact we run our integration test suite on CI with the `-race` flag to prove that. The user visible part of this is that some operations run a little more smoothly now; for example, there used to be an ugly spinner freeze at the end of checking out a branch, which is now gone.

However, since the changes were so massive there's a higher-than-usual chance of regressions, so please report any that you find.

Apart from that, we also have a few useful enhancements; the most notable one is probably that we now show the Github checks status of pull requests in the branches panel.

##### Enhancements 🔥

- Show a spinner for more long-running operations by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5765](jesseduffield/lazygit#5765)
- Remove the BLOCK\_UI refresh mode by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5790](jesseduffield/lazygit#5790)
- Support a `{{diffContext}}` template variable in external diff command by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5841](jesseduffield/lazygit#5841)
- Some small UI polish by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5853](jesseduffield/lazygit#5853)
- Auto-scroll when dragging to create range selection in staging view by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5855](jesseduffield/lazygit#5855)
- Create a range selection in list views by dragging with the mouse by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5856](jesseduffield/lazygit#5856)
- Reorder commits (or rebase todos) by dragging with the mouse by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5857](jesseduffield/lazygit#5857)
- Rework the custom pager config (rename to diff renderer) by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5870](jesseduffield/lazygit#5870)
- Show a Github MR's combined checks state in branches list (and main view for selected branch) by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5874](jesseduffield/lazygit#5874)

##### Fixes 🔧

- Fix stuck inline status when pushing/fetching by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5768](jesseduffield/lazygit#5768)
- Escape the merge conflicts view before prompting to continue the rebase by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5822](jesseduffield/lazygit#5822)
- Fix side panel rendering when branches/commits are not their panel's first tab by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5825](jesseduffield/lazygit#5825)
- Suppress output from a few git commands that pollute the command log by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5834](jesseduffield/lazygit#5834)
- Fix stall with ctrl+z and fg by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5830](jesseduffield/lazygit#5830)
- Fix more problems related to concurrent repo switch and background refresh by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5839](jesseduffield/lazygit#5839)
- Fix Windows crash when switching to fullscreen mode with a custom pager by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5838](jesseduffield/lazygit#5838)
- Fix multi-selection of files with common prefix not working in commit files panel by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5868](jesseduffield/lazygit#5868)
- Support absolute paths when detecting edit preset from EDITOR env var by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5876](jesseduffield/lazygit#5876)
- Exclude more commit trailers from auto-wrapping by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5871](jesseduffield/lazygit#5871)
- Prevent stale index.lock files from diffs rendered through a pty on Windows by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5888](jesseduffield/lazygit#5888)
- Fix orphaned processes on Windows when quickly navigating between commits by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5885](jesseduffield/lazygit#5885)

##### Maintenance ⚙️

- Perform refresh model and view updates on the UI thread instead of using mutexes by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5767](jesseduffield/lazygit#5767)
- Fix data race with status string by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5777](jesseduffield/lazygit#5777)
- Fix data race with command log by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5779](jesseduffield/lazygit#5779)
- Make integration tests using commits more robust by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5782](jesseduffield/lazygit#5782)
- Synchronize ViewBufferManager.Close with a starting task by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5786](jesseduffield/lazygit#5786)
- Make model<->view index conversions independent of rendering by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5785](jesseduffield/lazygit#5785)
- Fix idle notification deadlock by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5821](jesseduffield/lazygit#5821)
- Bump tcell to an unreleased snapshot to fix a shutdown race by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5824](jesseduffield/lazygit#5824)
- Fix command log streaming race by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5789](jesseduffield/lazygit#5789)
- Synchronize async view rendering by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5791](jesseduffield/lazygit#5791)
- Run tests with race detection on CI by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5792](jesseduffield/lazygit#5792)
- Gocui mouse event fixes by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5854](jesseduffield/lazygit#5854)
- Move Github MR cache out of state.yml into a separate file by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5884](jesseduffield/lazygit#5884)
- Make justfile commands available in the Nix development shell by [@&#8203;TyceHerrman](https://github.com/TyceHerrman) in [#&#8203;5890](jesseduffield/lazygit#5890)

##### Docs 📖

- Clarify contribution policy by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5809](jesseduffield/lazygit#5809)

##### I18n 🌎

- Update translations from Crowdin by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5891](jesseduffield/lazygit#5891)

##### Performance Improvements 📊

- Make scrolling down a very long diff with the scroll wheel much smoother by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5780](jesseduffield/lazygit#5780)

#### New Contributors

- [@&#8203;TyceHerrman](https://github.com/TyceHerrman) made their first contribution in [#&#8203;5890](jesseduffield/lazygit#5890)

**Full Changelog**: <jesseduffield/lazygit@v0.63.1...v0.64.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants