Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Track busy/idle state for integration tests #2765

Merged
merged 19 commits into from
Jul 10, 2023
Merged

Conversation

jesseduffield
Copy link
Owner

@jesseduffield jesseduffield commented Jul 8, 2023

For a better explanation than this now-outdated PR description gives, see here

This PR tracks pending tasks so that integration tests only run assertions and send keypresses when lazygit isn't in the middle of something.

We could use this logic in-app to create a generic loader but I like the fact that all our loaders currently have labels telling you what's happening, and I'm happy to just have it be a pattern that we should always use loaders for long-running actions.

The logic works like this: we maintain a global counter that tells us whether there's a pending action. If we're on the UI thread the counter will always be above zero, and if we're running something in the background (this is done via OnBackgroundThread()) we increment the counter before spawning a goroutine and then within that goroutine we defer decrementing the counter again. This means that the counter should be zero if nothing is happening (except for long-running goroutines that aren't associated with actions).

The following stuff happens on the UI thread:

  • handling of keypresses
  • handling of terminal events like resizes
  • functions passed to the OnUIThread() function

Background stuff is done via OnBackgroundThread

If you want to spawn a goroutine that is long-running and doesn't relate to actions you can just spawn a regular goroutine.

There are a couple places where we need to manually increment and decrement the action counter, because goroutines are involved that stick around despite us no longer considering an action to be pending:

  • When rendering to the main view, we increment the counter before we run the command and we decrement after we've loaded the first page, given that we don't bother loading anything more until the user themselves scrolls.
  • When running a git command that can request credentials, we decrement the counter before prompting the user for a credential, and then increment it again afterwards. This means we're not telling the user that we're loading something when we're actually waiting on them to enter a credential. It's assumed (reasonably) that the counter will start above zero given that the git command is running in the first place.

If the counter ever goes below zero, there's a bug somewhere, and so we panic. This may be overkill but I really don't want any bugs in this code.

At the moment I'm seeing if we can remove all exponential backoffs in assertions by having tests progress whenever we're told that there are no more pending actions. This will speed things up and prevent false positives. But so far it's a bit flakey.

Things I'm not sure about:

  • Using the 'Thread' terminology is a bit weird given we're dealing with goroutines, not threads, but 'UI Thread' is something everybody understands
  • It's probably possible to refactor the two places we're manually incrementing/decrementing the counter to use the existing helper method 'OnBackgroundThread' but when I gave this a go in the context of git commands with credentials, it got pretty complicated pretty quickly.
  • Please check if the PR fulfills these requirements
  • Cheatsheets are up-to-date (run go run scripts/cheatsheet/main.go generate)
  • Code has been formatted (see here)
  • Tests have been added/updated (see here for the integration test guide)
  • Text is internationalised (see here)
  • Docs (specifically docs/Config.md) have been updated if necessary
  • You've read through your own file changes for silly mistakes etc

@stefanhaller
Copy link
Collaborator

This is great!

There seems to be a problem at startup, somehow. I ran all tests in a loop to see if I get any to fail occasionally, and the ones that I have seen fail so far are initial_open.go and push_follow_tags.go. In both cases, they failed on the first check in their Run function, and in both cases I got an empty screen as output of Final Lazygit state:.

@jesseduffield
Copy link
Owner Author

@stefanhaller thanks :)

My current theory with the failing tests is that there is a race condition where before we first load everything and render the screen, there is some other event that happens on the UI thread or a background thread which begins and completes before anything else happens, meaning that the test is notified that lazygit isn't busy and so it runs the first assertion before everything is ready.

I've spent a bit of time looking for the cause of the issue with no luck so far (I can't actually get failures locally). But I'll keep looking!

@stefanhaller
Copy link
Collaborator

I can't actually get failures locally

Interesting. Doing while go test pkg/integration/clients/*.go; do : ; done always fails for me eventually; sometimes after three iterations, sometimes after like 12. Never had to wait more than 20 iterations so far.

@jesseduffield
Copy link
Owner Author

@stefanhaller ah nice I'll give that a go

@jesseduffield jesseduffield force-pushed the track-pending-actions branch 2 times, most recently from e452642 to d2257c9 Compare July 8, 2023 12:23
This includes new gocui logic for tracking busy/idle program state
@jesseduffield jesseduffield force-pushed the track-pending-actions branch 2 times, most recently from 31b78fb to 70df6f6 Compare July 8, 2023 12:30
@jesseduffield
Copy link
Owner Author

I've fixed those bugs, cleaned up my commits, and added a doc explaining the logic.

Some good news to report: tests are reliably passing even if I disable test retries! I've also fixed one of the issues causing an index.lock error, and I've re-enabled a test which was disabled due to that error.

@jesseduffield
Copy link
Owner Author

(Scratch that: the index.lock test still fails locally. But other tests with intermittent index.lock failures were indeed fixed!)

Integration tests need to be notified when Lazygit is idle so they can progress to the next assertion / user action.
I don't know if this is a hack or not: we run a git command and increment the pending action
count to 1 but at some point the command requests a username or password, so we need to prompt
the user to enter that. At that point we don't want to say that there is a pending action,
so we decrement the action count before prompting the user and then re-increment it again afterward.

Given that we panic when the counter goes below zero, it's important that it's not zero
when we run the git command (should be impossible anyway).

I toyed with a different approach using channels and a long-running goroutine that
handles all commands that request credentials but it feels over-engineered compared to this
commit's approach.
Turns out we're just running our refresh functions one after the other which isn't ideal but we can fix that separately.
As it stands this wait group isn't doing anything.
We were doing this already for fetching but not for refreshing files so I'm making it consistent.
@jesseduffield jesseduffield force-pushed the track-pending-actions branch 2 times, most recently from 35d4ba1 to ef7c5e3 Compare July 8, 2023 12:56
@jesseduffield jesseduffield changed the title WIP: track pending tasks Track busy/idle state for integration tests Jul 8, 2023
@jesseduffield
Copy link
Owner Author

@stefanhaller any thoughts on the code before I merge?

@jesseduffield
Copy link
Owner Author

I've actually just pushed a new commit which changes the approach, going from a global counter to a global map of 'tasks' which can each be paused/continued. This is much more discoverable, but at the cost of bloating some function signatures.

@@ -0,0 +1,88 @@
# Knowing when Lazygit is busy/idle
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is fantastic, thanks for taking the time to write this up. Unfortunately, a lot of this is now out of date after the last commit you pushed; it would be great to adapt this document to the current state.

@stefanhaller
Copy link
Collaborator

When running the tests in a loop again with the latest version (f6d49b5), I got this failure in the 7th iteration:

--- FAIL: TestIntegration (0.19s)
    --- FAIL: TestIntegration/sync/pull_rebase_interactive_conflict (0.65s)
        go_test.go:46:
            	Error Trace:	/Users/stk/Stk/Dev/Builds/lazygit/go_test.go:46
            	Error:      	Received unexpected error:
            	            	fatal error: concurrent map read and map write
Full log
--- FAIL: TestIntegration (0.19s)
  --- FAIL: TestIntegration/sync/pull_rebase_interactive_conflict (0.65s)
      go_test.go:46:
          	Error Trace:	/Users/stk/Stk/Dev/Builds/lazygit/go_test.go:46
          	Error:      	Received unexpected error:
          	            	fatal error: concurrent map read and map write

          	            	goroutine 99 [running]:
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_config.(*CachedGitConfig).Get(0x1400000c1e0, {0x10270cc88, 0x19})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_config/cached_git_config.go:38 +0x44
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*ConfigCommands).GetShowUntrackedFiles(0x14000487c78?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/config.go:81 +0x34
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*FileLoader).GetStatusFiles(0x14000404510, {0x0?})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/file_loader.go:38 +0x3c
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshStateFiles(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:443 +0x26c
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshFilesAndSubmodules(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:390 +0x120
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).Refresh.func1.5()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:116 +0x20
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).Refresh.func1.1.1(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:91 +0x24
          	            	github.com/jesseduffield/gocui.(*Gui).onWorkerAux(0x0?, 0x0?, 0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:741 +0x60
          	            	github.com/jesseduffield/gocui.(*Gui).OnWorker.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:728 +0x2c
          	            	created by github.com/jesseduffield/gocui.(*Gui).OnWorker
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:727 +0x9c

          	            	goroutine 1 [runnable]:
          	            	github.com/jesseduffield/gocui.tcellSetCell(0x8?, 0x31?, 0x20?, 0x0?, 0x0?, 0x4?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/tcell_driver.go:101 +0xf4
          	            	github.com/jesseduffield/gocui.(*View).clearRunes(0x14000322780)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/view.go:1124 +0xb0
          	            	github.com/jesseduffield/gocui.(*View).draw(0x14000322780)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/view.go:937 +0xc8
          	            	github.com/jesseduffield/gocui.(*Gui).draw(0x14000438000, 0x14000322780)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:1251 +0x178
          	            	github.com/jesseduffield/gocui.(*Gui).flush(0x14000438000)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:1203 +0x110
          	            	github.com/jesseduffield/gocui.(*Gui).processEvent(0x14000438000)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:827 +0x1ec
          	            	github.com/jesseduffield/gocui.(*Gui).MainLoop(0x14000438000)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:800 +0xa0
          	            	github.com/jesseduffield/lazygit/pkg/gui.(*Gui).Run(0x14000434000, {{0x0, 0x0}, {0x0, 0x0}, {0x1029fa6e0, 0x140002defa0}})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/gui.go:630 +0x528
          	            	github.com/jesseduffield/lazygit/pkg/gui.(*Gui).RunAndHandleError.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/gui.go:636 +0x40
          	            	github.com/jesseduffield/lazygit/pkg/utils.SafeWithError(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:119 +0x60
          	            	github.com/jesseduffield/lazygit/pkg/gui.(*Gui).RunAndHandleError(0x14000434000, {{0x0, 0x0}, {0x0, 0x0}, {0x1029fa6e0, 0x140002defa0}})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/gui.go:635 +0xbc
          	            	github.com/jesseduffield/lazygit/pkg/app.(*App).Run(...)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/app/app.go:258
          	            	github.com/jesseduffield/lazygit/pkg/app.Run({0x102a03750?, 0x14000315ae0?}, 0x140002f6c00, {{0x0, 0x0}, {0x0, 0x0}, {0x1029fa6e0, 0x140002defa0}})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/app/app.go:48 +0x8c
          	            	github.com/jesseduffield/lazygit/pkg/app.Start(0x140001d3f28, {0x1029fa6e0, 0x140002defa0})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/app/entry_point.go:151 +0x9b8
          	            	main.main()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/clients/injector/main.go:32 +0x50

          	            	goroutine 25 [select]:
          	            	github.com/jesseduffield/gocui.(*Gui).pollEvent(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/tcell_driver.go:241 +0x88
          	            	github.com/jesseduffield/gocui.(*Gui).MainLoop.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:790 +0x30
          	            	created by github.com/jesseduffield/gocui.(*Gui).MainLoop
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:784 +0x60

          	            	goroutine 27 [chan receive]:
          	            	github.com/jesseduffield/lazygit/pkg/gui.(*GuiDriver).PressKey(0x140008ee580, {0x1026e090c?, 0x102636800?})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/gui_driver.go:46 +0x118
          	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*TestDriver).press(0x140008dcd00, {0x1026e090c, 0x1})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/test_driver.go:35 +0x5c
          	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*ViewDriver).Press(0x140008a6ec0, {0x1026e090c, 0x1})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/view_driver.go:367 +0x3c
          	            	github.com/jesseduffield/lazygit/pkg/integration/tests/sync.glob..func33(_, {{{0x1026e090d, 0x1}, {0x1026e32bf, 0x5}, {0x1026e332d, 0x5}, {0x1028592e8, 0x1}, {0x1026e3346, ...}, ...}, ...})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/tests/sync/pull_rebase_interactive_conflict.go:43 +0x23c
          	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*IntegrationTest).Run(0x140002defa0, {0x102a037c0?, 0x140008ee580})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/test.go:167 +0x2b0
          	            	github.com/jesseduffield/lazygit/pkg/gui.(*Gui).handleTestMode.func2()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/test_mode.go:35 +0xb0
          	            	created by github.com/jesseduffield/lazygit/pkg/gui.(*Gui).handleTestMode
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/test_mode.go:32 +0x208

          	            	goroutine 28 [sleep]:
          	            	time.Sleep(0x9502f9000)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/runtime/time.go:195 +0x118
          	            	github.com/jesseduffield/lazygit/pkg/gui.(*Gui).handleTestMode.func3()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/test_mode.go:49 +0x28
          	            	github.com/jesseduffield/lazygit/pkg/utils.Safe.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:108 +0x24
          	            	github.com/jesseduffield/lazygit/pkg/utils.SafeWithError(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:119 +0x60
          	            	github.com/jesseduffield/lazygit/pkg/utils.Safe(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:108 +0x34
          	            	created by github.com/jesseduffield/lazygit/pkg/gui.(*Gui).handleTestMode
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/test_mode.go:48 +0x230

          	            	goroutine 98 [semacquire]:
          	            	sync.runtime_Semacquire(0x140001024e0?)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/runtime/sema.go:62 +0x2c
          	            	sync.(*WaitGroup).Wait(0x140002d43c0)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/sync/waitgroup.go:116 +0x78
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshCommits(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:249 +0x174
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).Refresh.func1.1.1(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:91 +0x24
          	            	github.com/jesseduffield/gocui.(*Gui).onWorkerAux(0x0?, 0x1020925b4?, 0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:741 +0x60
          	            	github.com/jesseduffield/gocui.(*Gui).OnWorker.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:728 +0x2c
          	            	created by github.com/jesseduffield/gocui.(*Gui).OnWorker
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:727 +0x9c

          	            	goroutine 145 [runnable]:
          	            	github.com/jesseduffield/gocui.(*Gui).StartTicking.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:1497 +0x160
          	            	created by github.com/jesseduffield/gocui.(*Gui).StartTicking
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:1490 +0x94

          	            	goroutine 73 [runnable]:
          	            	os/exec.(*Cmd).Start.func3()
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:716
          	            	runtime.goexit()
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/runtime/asm_arm64.s:1172 +0x4
          	            	created by os/exec.(*Cmd).Start
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:716 +0x7f4

          	            	goroutine 177 [runnable]:
          	            	github.com/sasha-s/go-deadlock.lock.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/sasha-s/go-deadlock/deadlock.go:182
          	            	created by github.com/sasha-s/go-deadlock.lock
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/sasha-s/go-deadlock/deadlock.go:182 +0x170

          	            	goroutine 162 [runnable]:
          	            	bufio.(*Scanner).Scan(0x140003fb828)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/bufio/scan.go:204 +0x3f0
          	            	github.com/fsmiamoto/git-todo-parser/todo.Parse({0x1029f73e0?, 0x140003ac750?}, 0x10?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/fsmiamoto/git-todo-parser/todo/parse.go:25 +0x94
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*CommitLoader).getInteractiveRebasingCommits(0x140000842a0)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/commit_loader.go:310 +0x118
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*CommitLoader).getRebasingCommits(0x14000484ae8?, 0x10210c090?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/commit_loader.go:244 +0x5c
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*CommitLoader).getHydratedRebasingCommits(0x140000842a0, 0x1032e4a68?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/commit_loader.go:192 +0x28
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*CommitLoader).MergeRebasingCommits(0x140000842a0, {0x102fff1c8, 0x0, 0x0})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/commit_loader.go:136 +0x120
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*CommitLoader).GetCommits(0x140000842a0, {0x1, {0x0, 0x0}, 0x1, {0x1026e182d, 0x4}, 0x0})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/commit_loader.go:80 +0x7c
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshCommitsWithLimit(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:256 +0x274
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshCommits.func2()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:230 +0x2c
          	            	github.com/jesseduffield/lazygit/pkg/utils.Safe.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:108 +0x24
          	            	github.com/jesseduffield/lazygit/pkg/utils.SafeWithError(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:119 +0x60
          	            	github.com/jesseduffield/lazygit/pkg/utils.Safe(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:108 +0x34
          	            	created by github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshCommits
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:229 +0x16c

          	            	goroutine 161 [runnable]:
          	            	internal/poll.runtime_pollWait(0x12a6b7a68, 0x72)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/runtime/netpoll.go:306 +0xa0
          	            	internal/poll.(*pollDesc).wait(0x14000886f00?, 0x14000aa4000?, 0x1)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/internal/poll/fd_poll_runtime.go:84 +0x28
          	            	internal/poll.(*pollDesc).waitRead(...)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/internal/poll/fd_poll_runtime.go:89
          	            	internal/poll.(*FD).Read(0x14000886f00, {0x14000aa4000, 0x1000, 0x1000})
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/internal/poll/fd_unix.go:167 +0x200
          	            	os.(*File).read(...)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/file_posix.go:31
          	            	os.(*File).Read(0x14000884208, {0x14000aa4000?, 0x10?, 0x14000882c60?})
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/file.go:118 +0x5c
          	            	bufio.(*Scanner).Scan(0x14000485c20)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/bufio/scan.go:214 +0x948
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*cmdObjRunner).RunAndProcessLines(0x20?, {0x102a0af40, 0x140008faf00}, 0x1400088b200)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj_runner.go:160 +0x250
          	            	github.com/jesseduffield/lazygit/pkg/commands.(*gitCmdObjRunner).RunAndProcessLines(0x20?, {0x102a0af40?, 0x140008faf00?}, 0x140008faf00?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_cmd_obj_runner.go:29 +0x30
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*CmdObj).RunAndProcessLines(0x140008eef80?, 0x14000a96af0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj.go:195 +0x3c
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*ReflogCommitLoader).GetReflogCommits(0x1400000c288, 0x140004181e0, {0x0, 0x0})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/reflog_commit_loader.go:39 +0x5a4
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshReflogCommits.func1(0x14000000358, {0x0, 0x0})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:500 +0x60
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshReflogCommits(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:513 +0x8c
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshReflogCommitsConsideringStartup(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:211 +0x60
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshCommits.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:223 +0x2c
          	            	github.com/jesseduffield/lazygit/pkg/utils.Safe.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:108 +0x24
          	            	github.com/jesseduffield/lazygit/pkg/utils.SafeWithError(0x1400044377e?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:119 +0x60
          	            	github.com/jesseduffield/lazygit/pkg/utils.Safe(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/utils/utils.go:108 +0x34
          	            	created by github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshCommits
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:222 +0xd0

          	            	goroutine 100 [runnable]:
          	            	github.com/jesseduffield/gocui.(*Gui).OnWorker.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:727
          	            	created by github.com/jesseduffield/gocui.(*Gui).OnWorker
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:727 +0x9c

          	            	goroutine 101 [syscall]:
          	            	syscall.syscall6(0x1032e6b38?, 0x17?, 0x5?, 0x14000809800?, 0x140008098e8?, 0x900001010185b4?, 0x14000a96c40?)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/runtime/sys_darwin.go:45 +0x68
          	            	syscall.wait4(0x14000809898?, 0x102106698?, 0x90?, 0x1029c96a0?)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/syscall/zsyscall_darwin_arm64.go:43 +0x4c
          	            	syscall.Wait4(0x140004869b8?, 0x140008098d4, 0x14000392258?, 0x14000884240?)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/syscall/syscall_bsd.go:144 +0x28
          	            	os.(*Process).wait(0x140001361e0)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec_unix.go:43 +0x80
          	            	os.(*Process).Wait(...)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec.go:132
          	            	os/exec.(*Cmd).Wait(0x140008d8840)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:890 +0x38
          	            	os/exec.(*Cmd).Run(0x0?)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:590 +0x38
          	            	os/exec.(*Cmd).CombinedOutput(0x140008d8840)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:1005 +0xb8
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*cmdObjRunner).RunWithOutputAux(0x14000410120, {0x102a0af40, 0x140008faff0})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj_runner.go:105 +0x148
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*cmdObjRunner).RunWithOutput(0x90?, {0x102a0af40, 0x140008faff0})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj_runner.go:70 +0x1ac
          	            	github.com/jesseduffield/lazygit/pkg/commands.(*gitCmdObjRunner).RunWithOutput(0x1?, {0x102a0af40?, 0x140008faff0?})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_cmd_obj_runner.go:21 +0x30
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*CmdObj).RunWithOutput(0x140008eefe0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj.go:187 +0x38
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*TagLoader).GetTags(0x1400000c2b8)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/tag_loader.go:32 +0x20c
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshTags(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:324 +0x3c
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).Refresh.func1.7()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:124 +0x20
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).Refresh.func1.1.1(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:91 +0x24
          	            	github.com/jesseduffield/gocui.(*Gui).onWorkerAux(0x0?, 0x0?, 0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:741 +0x60
          	            	github.com/jesseduffield/gocui.(*Gui).OnWorker.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:728 +0x2c
          	            	created by github.com/jesseduffield/gocui.(*Gui).OnWorker
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:727 +0x9c

          	            	goroutine 102 [runnable]:
          	            	sync.runtime_SemacquireRWMutexR(0x10?, 0x60?, 0x14000805701?)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/runtime/sema.go:82 +0x28
          	            	sync.(*RWMutex).RLock(...)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/sync/rwmutex.go:71
          	            	os.Pipe()
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/pipe_unix.go:17 +0x7c
          	            	os/exec.(*Cmd).writerDescriptor(0x1400048e2c0, {0x1029f7400, 0x14000b0fe00})
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:552 +0x5c
          	            	os/exec.(*Cmd).childStdout(...)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:524
          	            	os/exec.(*Cmd).Start(0x1400048e2c0)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:676 +0x2b0
          	            	os/exec.(*Cmd).Run(0x0?)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:587 +0x20
          	            	os/exec.(*Cmd).CombinedOutput(0x1400048e2c0)
          	            		/opt/homebrew/Cellar/go/1.20.5/libexec/src/os/exec/exec.go:1005 +0xb8
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*cmdObjRunner).RunWithOutputAux(0x14000410120, {0x102a0af40, 0x1400049cb90})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj_runner.go:105 +0x148
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*cmdObjRunner).RunWithOutput(0x90?, {0x102a0af40, 0x1400049cb90})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj_runner.go:70 +0x1ac
          	            	github.com/jesseduffield/lazygit/pkg/commands.(*gitCmdObjRunner).RunWithOutput(0x1?, {0x102a0af40?, 0x1400049cb90?})
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_cmd_obj_runner.go:21 +0x30
          	            	github.com/jesseduffield/lazygit/pkg/commands/oscommands.(*CmdObj).RunWithOutput(0x14000b0d2f0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/oscommands/cmd_obj.go:187 +0x38
          	            	github.com/jesseduffield/lazygit/pkg/commands/git_commands.(*RemoteLoader).GetRemotes(0x14000412320)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/commands/git_commands/remote_loader.go:35 +0x1dc
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).refreshRemotes(0x14000031600)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:531 +0x74
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).Refresh.func1.8()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:128 +0x20
          	            	github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers.(*RefreshHelper).Refresh.func1.1.1(0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/controllers/helpers/refresh_helper.go:91 +0x24
          	            	github.com/jesseduffield/gocui.(*Gui).onWorkerAux(0x0?, 0x0?, 0x0?)
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:741 +0x60
          	            	github.com/jesseduffield/gocui.(*Gui).OnWorker.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:728 +0x2c
          	            	created by github.com/jesseduffield/gocui.(*Gui).OnWorker
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/jesseduffield/gocui/gui.go:727 +0x9c

          	            	goroutine 107 [runnable]:
          	            	github.com/sasha-s/go-deadlock.lock.func1()
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/sasha-s/go-deadlock/deadlock.go:182
          	            	created by github.com/sasha-s/go-deadlock.lock
          	            		/Users/stk/Stk/Dev/Builds/lazygit/vendor/github.com/sasha-s/go-deadlock/deadlock.go:182 +0x170
          	Test:       	TestIntegration/sync/pull_rebase_interactive_conflict

@stefanhaller
Copy link
Collaborator

I pushed a trivial fixup for CI.yml.

@jesseduffield jesseduffield force-pushed the track-pending-actions branch 2 times, most recently from c182cb0 to b451ca5 Compare July 9, 2023 10:54
I want to see how we go removing all retry logic within a test. Lazygit should be trusted to tell us when it's no longer busy,
and if it that proves false we should fix the issue in the code rather than being lenient in the tests
We had a race condition due to refreshing branches in two different places, one which refreshed reflog commits
beforehand. The race condition meant that upon load we wouldn't see recency values (provided by the reflog commits)
against the branches
I was able to get all integration tests passing 20 times in a row without any retries so I'm going to see
if we can rely on that in CI
The global counter approach is easy to understand but it's brittle and depends on implicit behaviour that is not very discoverable.

With a global counter, if any goroutine accidentally decrements the counter twice, we'll think lazygit is idle when it's actually busy.
Likewise if a goroutine accidentally increments the counter twice we'll think lazygit is busy when it's actually idle.
With the new approach we have a map of tasks where each task can either be busy or not. We create a new task and add it to the map
when we spawn a worker goroutine (among other things) and we remove it once the task is done.

The task can also be paused and continued for situations where we switch back and forth between running a program and asking for user
input.

In order for this to work with `git push` (and other commands that require credentials) we need to obtain the task from gocui when
we create the worker goroutine, and then pass it along to the commands package to pause/continue the task as required. This is
MUCH more discoverable than the old approach which just decremented and incremented the global counter from within the commands package,
but it's at the cost of expanding some function signatures (arguably a good thing).

Likewise, whenever you want to call WithWaitingStatus or WithLoaderPanel the callback will now have access to the task for pausing/
continuing. We only need to actually make use of this functionality in a couple of places so it's a high price to pay, but I don't
know if I want to introduce a WithWaitingStatusTask and WithLoaderPanelTask function (open to suggestions).
This fixes a race condition caused by a concurrent map read and write
@jesseduffield
Copy link
Owner Author

@stefanhaller damn. I'll take a look

By using an interface for tasks we can use a fake implementation in tests with extra methods
I've simplifiied the code because it was too complex for the current requirements, and this fixed the misc/initial_open
test which was occasionally failing due to a race condition around busy tasks
It's not clear what was happening but it seemed like we sometimes weren't
fully writing to our stdout buffer (which is used for the error message)
even though we had returned from cmd.Wait().

Not sure what the cause was but removing an unnecessary goroutine fixed it.
@stefanhaller
Copy link
Collaborator

Great work, it's great to see how this gets better.

I hate to say it, but I still got a test failure (after just four iterations):

Test output
   --- FAIL: TestIntegration/file/discard_all_dir_changes (1.22s)
       go_test.go:46:
           	Error Trace:	/Users/stk/Stk/Dev/Builds/lazygit/go_test.go:46
           	Error:      	Received unexpected error:
           	            	confirmation view title Expected 'Error' to equal 'Continue'
           	            	Final Lazygit state:
           	            	┌─Status─────────────────────────┐┌─Unstaged changes───────────────────────────────────────────────┐
           	            	│ (merging) repo → conflict_secon││diff --cc dir/both-added.txt                                    ▲
           	            	└────────────────────────────────┘│index 8944a13,907b308..0000000                                  █
           	            	┌─Files - Submodules─────────────┐│--- a/dir/both-added.txt                                        █
           	            	│▼ dir                           ││+++ b/dir/both-added.txt                                        █
           	            	│  UA added-them-changed-us.txt  ││@@@ -1,1 -1,1 +1,5 @@@                                          █
           	            	│  AA both-added.txt             ││++<<<<<<< HEAD                                                  █
           	            	│  DD both-deleted.txt           ││ +blah2                                                         █
           	            	│  UU both-modded.txt            ││++=======                                                       █
           	            	│  AU changed-them-added-us.txt  ││+ blah                                                          █
           	            	│  UD deleted-them.txt           ││++>>>>>>> conflict                                              █
           	            	│  DU deleted-us.txt             ││diff --cc dir/both-modded.txt                                   █
           	            	│                                ││index fa938d9,4d8452f..0000000                                  █
           	            	│                                ││--- a/dir/both-modded.txt                                       █
           	            	│                                ││+++ b/dir/both-modded.txt                                       █
           	            	│                                ││@@@ -1,1 -1,1 +1,5 @@@                                          █
           	            	│                                ││++<<<<<<< HEAD                                                  █
           	            	│                                ││ +mod2                                                          █
           	            	│                                ││++=======                                                       │
           	            	│                                ││+ mod1                                                          │
           	            	│                                ││++>>>>>>> conflict                                              │
           	            	│                                ││diff --git a/dir/added-changed.txt b/dir/added-changed.txt      │
           	            	│                                ││index 90be1f3..294186e 100644                                   │
           	            	│                                ││--- a/dir/added-changed.txt                                     │
           	            	│                                ││+++ b/dir/added-changed.txt                                     │
           	            	│                                ││@@ -1 +1 @@                                                     │
           	            	│                                ││-before                                                         │
           	            	│                                ││+after                                                          │
           	            	│                                ││* Unmerged path dir/added-them-changed-us.txt                   │
           	            	│                                ││* Unmerged path dir/both-deleted.txt                            │
           	            	│                                ││diff --git a/dir/change-delete.txt b/dir/change-delete.txt      │
           	            	│                                ││deleted file mode 100644                                        │
           	            	│                                ││index 48f9387..0000000                                          │
           	            	└─────────────────────────1 of 8─┘│--- a/dir/change-delete.txt                                     │
           	            	┌─Local branches - Remotes - Tag─┐│+++ /dev/null                                                   │
           	            	│  * conflict_second             ││@@ -1 +0,0 @@                                                   │
           	            	│1s  conflict                    ││-change-delete2                                                 │
           	            	│                                ││* Unmerged path dir/changed-them-added-us.txt                   │
           	            	│                                ││* Unmerged path dir/deleted-them.txt                            │
           	            	│                                ││* Unmerged path dir/deleted-us.txt                              │
           	            	│                                ││diff --git a/dir/deleted.txt b/dir/deleted.txt                  │
           	            	│                                ││deleted file mode 100644                                        │
           	            	│                                ││index abaddc0..0000000                                          │
           	            	│                                ││--- a/dir/deleted.txt                                           ▼
           	            	│                                │└────────────────────────────────────────────────────────────────┘
           	            	│         ┌─Error─────────────────────────────────────────────────────────────────────────┐────────┐
           	            	│         │fatal: Unable to create '/Users/stk/Stk/Dev/Builds/lazygit/test/results/file/di│xt      ▲
           	            	│         │scard_all_dir_changes/actual/repo/.git/index.lock': File exists.               │        █
           	            	│         │                                                                               │        █
           	            	│         │Another git process seems to be running in this repository, e.g.               │        █
           	            	│         │an editor opened by 'git commit'. Please make sure all processes               │        █
           	            	│         │are terminated then try again. If it still fails, a git process                │        █
           	            	│         │may have crashed in this repository earlier:                                   │        █
           	            	│         │remove the file manually to continue.                                          │        █
           	            	│         └───────────────────────────────────────────────────────────────────────────────┘        █
           	            	│                                ││* Unmerged path dir/both-deleted.txt                            █
           	            	│                                ││* Unmerged path dir/both-modded.txt                             █
           	            	│                                ││diff --git a/dir/change-delete.txt b/dir/change-delete.txt      █
           	            	│                                ││index 47966dc..48f9387 100644                                   █
           	            	│                                ││--- a/dir/change-delete.txt                                     █
           	            	│                                ││+++ b/dir/change-delete.txt                                     █
           	            	│                                ││@@ -1 +1 @@                                                     █
           	            	│                                ││-change-delete                                                  █
           	            	│                                ││+change-delete2                                                 │
           	            	└─────────────────────────1 of 2─┘│* Unmerged path dir/changed-them-added-us.txt                   │
           	            	┌─Commits - Reflog───────────────┐│diff --git a/dir/delete-change.txt b/dir/delete-change.txt      │
           	            	│60b29466 CI three               ││deleted file mode 100644                                        │
           	            	│997279f5 CI both-deleted.txt ren││index a1e09c2..0000000                                          │
           	            	│6ca837cc CI one                 ││--- a/dir/delete-change.txt                                     │
           	            	│                                ││+++ /dev/null                                                   │
           	            	│                                ││@@ -1 +0,0 @@                                                   │
           	            	│                                ││-delete-change                                                  │
           	            	│                                ││diff --git a/dir/deleted-staged.txt b/dir/deleted-staged.txt    │
           	            	│                                ││deleted file mode 100644                                        │
           	            	│                                ││index abaddc0..0000000                                          │
           	            	│                                ││--- a/dir/deleted-staged.txt                                    │
           	            	│                                ││+++ /dev/null                                                   │
           	            	│                                ││@@ -1 +0,0 @@                                                   │
           	            	│                                ││-del                                                            │
           	            	│                                ││* Unmerged path dir/deleted-them.txt                            │
           	            	│                                ││* Unmerged path dir/deleted-us.txt                              │
           	            	│                                ││diff --git a/dir/double-modded.txt b/dir/double-modded.txt      │
           	            	│                                ││index 3f7bd8f..5be4a41 100644                                   │
           	            	│                                ││--- a/dir/double-modded.txt                                     │
           	            	│                                ││+++ b/dir/double-modded.txt                                     │
           	            	│                                ││@@ -1 +1 @@                                                     │
           	            	│                                ││-double-modded                                                  │
           	            	│                                ││+change1                                                        ▼
           	            	│                                │└────────────────────────────────────────────────────────────────┘
           	            	│                                │┌─Command log────────────────────────────────────────────────────┐
           	            	│                                ││You can hide/focus this panel by pressing '@'                   │
           	            	│                                ││                                                                │
           	            	│                                ││Random tip: In flat file view, merge conflicts are sorted to the│
           	            	│                                ││ top. To switch to flat file view press '`'                     │
           	            	│                                ││Discard all changes in directory                                │
           	            	└─────────────────────────1 of 3─┘│  git reset -- dir/added-them-changed-us.txt                    │
           	            	┌─Stash──────────────────────────┐│                                                                │
           	            	│                                ││                                                                │
           	            	└─────────────────────────0 of 0─┘└────────────────────────────────────────────────────────────────┘
           	            	 <enter>: Confirm, <esc>: Close/Cancel                                              Merging (Reset)

           	            	Upon failure, focused view was 'confirmation'.
           	            	Log:
           	            	Discard all changes in directory
           	            	git reset -- dir/added-them-changed-us.txt
           	            	panic: Test failed

           	            	goroutine 10 [running]:
           	            	github.com/jesseduffield/lazygit/pkg/gui.(*GuiDriver).Fail(0x1400051db30, {0x14000c2f4c0, 0x3c})
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/gui_driver.go:82 +0x1e8
           	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*assertionHelper).fail(...)
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/assertion_helper.go:28
           	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*assertionHelper).assertWithRetries(0x1400051db40, 0x0?)
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/assertion_helper.go:23 +0x44
           	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*ViewDriver).Title(0x1400061a700, 0x14000976550?)
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/view_driver.go:56 +0x4c
           	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*ConfirmationDriver).Title(0x14000976518, 0x1046bef31?)
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/confirmation_driver.go:15 +0x2c
           	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*Common).ContinueOnConflictsResolved(0x1400052b540?)
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/common.go:30 +0x80
           	            	github.com/jesseduffield/lazygit/pkg/integration/tests/file.glob..func6.2(...)
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/tests/file/discard_all_dir_changes.go:96
           	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*ViewDriver).Tap(...)
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/view_driver.go:530
           	            	github.com/jesseduffield/lazygit/pkg/integration/tests/file.glob..func6(_, {{{0x1046b882d, 0x1}, {0x1046bb1df, 0x5}, {0x1046bb24d, 0x5}, {0x104831258, 0x1}, {0x1046bb266, ...}, ...}, ...})
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/tests/file/discard_all_dir_changes.go:95 +0x32c
           	            	github.com/jesseduffield/lazygit/pkg/integration/components.(*IntegrationTest).Run(0x14000232fa0, {0x1049db360?, 0x1400051db30})
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/integration/components/test.go:167 +0x2b0
           	            	github.com/jesseduffield/lazygit/pkg/gui.(*Gui).handleTestMode.func2()
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/test_mode.go:35 +0xb0
           	            	created by github.com/jesseduffield/lazygit/pkg/gui.(*Gui).handleTestMode
           	            		/Users/stk/Stk/Dev/Builds/lazygit/pkg/gui/test_mode.go:32 +0x208
           	Test:       	TestIntegration/file/discard_all_dir_changes ```
</details>

@jesseduffield
Copy link
Owner Author

Yep, I've got the following tests intermittently failing (not very often)

patch_building/start_new_patch.go
patch_building/move_to_index_with_conflict
patch_building/move_to_index_partial
file/discard_staged_changes
file/discard_all_dir_changes

The discard changes ones are from index.lock issues, and the others seem to be from a main panel not refreshing before the test runs an assertion. I've spent some time on both of these issues have can't work out what the issue is.

With the index.lock issue I'm especially confused: we're not running these commands concurrently and I doubt the issue is that some other git process died midway and left behind the lock file because if that was a common thing we should see it in other tests

@stefanhaller
Copy link
Collaborator

and I doubt the issue is that some other git process died midway and left behind the lock file because if that was a common thing we should see it in other tests

Also, the file would then still exist after the test finished. It didn't in my case.

@jesseduffield
Copy link
Owner Author

Ah that's good to know.

I've tested out adding a global mutex to pkg/commands/oscommands/cmd_obj_runner.go so that no two commands can run at the same time and I still get the index.lock error.

@stefanhaller
Copy link
Collaborator

That's very weird.

I don't have any great ideas how to diagnose this. Except maybe add some debugging code that dumps the output of pstree whenever a command fails, so that we can get an idea what git process it is that's running concurrently.

@stefanhaller
Copy link
Collaborator

I see that we used to have some retry logic related to index.lock, but it got removed in bed185e. What was the reason?

@jesseduffield
Copy link
Owner Author

Wish I was in the habit of writing better commit messages back then! The PR description gives a clue: we were getting a useless error appear on some commands (I think ones that stream output perhaps) and the lock retry logic was behind it. Though I don't recall the specifics. I'm happy to re-instate it and see if the other issue pops up again.

@jesseduffield
Copy link
Owner Author

Ah, just tested with that and found the issue again: exec: Stdout already set. Digging deeper

I don't know why we're getting index.lock errors but they're impossile to stop
anyway given that other processes can be calling git commands. So we're retrying
a few times before re-raising. To do this we need to clone the command and the current
implementation for that is best-effort.

I do worry about the maintainability of that but we'll see how it goes.

Also, I thought you'd need to clone the task (if it exists) but now I think not;
as long as you don't call done twice on it you should be fine, and you shouldn't
be done'ing a task as part of running a command: that should happen higher up.
@jesseduffield
Copy link
Owner Author

Okay so the issue there was that we need to clone the cmd in order to re-use it (something I didn't realise or wasn't bothered to fix when I originally removed the retry logic).

That's fixed the issue on my end.

@jesseduffield
Copy link
Owner Author

I was able to get 24 runs of the test suite before hitting another failure (stash/stash_staged). I think we've got less flakyness with this PR than we have on master so I'm happy to merge and investigate more flakyness later.

Though I'm conscious that the PR has some sweeping changes so I'd like to take a look at your PRs before merging this one so that you're not swamped with merge conflicts (apologies for not getting around to them yet)

@stefanhaller
Copy link
Collaborator

Nice. I just ran this for over 100 iterations without failures. I agree that this looks less flaky now than what we had on master.

I'm happy for this to get merged. Don't worry about my branches so much, I can rebase them onto this once it's merged. (And then I'd appreciate reviews at some point. 😄)

@jesseduffield jesseduffield merged commit 2dddd90 into master Jul 10, 2023
6 checks passed
@jesseduffield jesseduffield deleted the track-pending-actions branch July 10, 2023 11:41
@jesseduffield jesseduffield added the maintenance For refactorings, CI changes, tests, version bumping, etc label Jul 19, 2023
renovate bot added a commit to scottames/dots that referenced this pull request Aug 1, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[GoogleContainerTools/skaffold](https://github.com/GoogleContainerTools/skaffold)
| patch | `v2.6.1` -> `v2.6.2` |
| [aquaproj/aqua](https://github.com/aquaproj/aqua) | minor | `v2.9.0`
-> `v2.10.1` |
|
[aquaproj/aqua-installer](https://github.com/aquaproj/aqua-installer)
| patch | `v2.1.1` -> `v2.1.2` |
| [aquaproj/aqua-registry](https://github.com/aquaproj/aqua-registry)
| minor | `v4.26.0` -> `v4.32.0` |
|
[bitnami-labs/sealed-secrets](https://github.com/bitnami-labs/sealed-secrets)
| minor | `v0.22.0` -> `v0.23.0` |
| [charmbracelet/gum](https://github.com/charmbracelet/gum) | minor |
`v0.10.0` -> `v0.11.0` |
| [cli/cli](https://github.com/cli/cli) | patch | `v2.32.0` ->
`v2.32.1` |
| [jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) |
minor | `v0.38.2` -> `v0.39.4` |
|
[kubernetes-sigs/kustomize](https://github.com/kubernetes-sigs/kustomize)
| patch | `v5.1.0` -> `v5.1.1` |
| [kubernetes/kubectl](https://github.com/kubernetes/kubectl) | patch
| `1.27.3` -> `1.27.4` |
| [kubernetes/minikube](https://github.com/kubernetes/minikube) |
minor | `v1.30.1` -> `v1.31.1` |
| [marcosnils/bin](https://github.com/marcosnils/bin) | minor |
`v0.16.2` -> `v0.17.0` |
| [starship/starship](https://github.com/starship/starship) | minor |
`v1.15.0` -> `v1.16.0` |
| [twpayne/chezmoi](https://github.com/twpayne/chezmoi) | minor |
`v2.34.3` -> `v2.36.1` |
| [weaveworks/eksctl](https://github.com/weaveworks/eksctl) | minor |
`v0.149.0` -> `v0.150.0` |

---

### Release Notes

<details>
<summary>GoogleContainerTools/skaffold
(GoogleContainerTools/skaffold)</summary>

###
[`v2.6.2`](https://github.com/GoogleContainerTools/skaffold/releases/tag/v2.6.2):
Release

[Compare
Source](https://github.com/GoogleContainerTools/skaffold/compare/v2.6.1...v2.6.2)

### v2.6.2 Release - 2023-07-19

**Linux amd64**
`curl -Lo skaffold
https://storage.googleapis.com/skaffold/releases/v2.6.2/skaffold-linux-amd64
&& chmod +x skaffold && sudo mv skaffold /usr/local/bin`

**Linux arm64**
`curl -Lo skaffold
https://storage.googleapis.com/skaffold/releases/v2.6.2/skaffold-linux-arm64
&& chmod +x skaffold && sudo mv skaffold /usr/local/bin`

**macOS amd64**
`curl -Lo skaffold
https://storage.googleapis.com/skaffold/releases/v2.6.2/skaffold-darwin-amd64
&& chmod +x skaffold && sudo mv skaffold /usr/local/bin`

**macOS arm64**
`curl -Lo skaffold
https://storage.googleapis.com/skaffold/releases/v2.6.2/skaffold-darwin-arm64
&& chmod +x skaffold && sudo mv skaffold /usr/local/bin`

**Windows**

https://storage.googleapis.com/skaffold/releases/v2.6.2/skaffold-windows-amd64.exe

**Docker image**
`gcr.io/k8s-skaffold/skaffold:v2.6.2`

**Full Changelog**:
https://github.com/GoogleContainerTools/skaffold/compare/v2.6.1...v2.6.2

</details>

<details>
<summary>aquaproj/aqua (aquaproj/aqua)</summary>

### [`v2.10.1`](https://github.com/aquaproj/aqua/releases/tag/v2.10.1)

[Compare
Source](https://github.com/aquaproj/aqua/compare/v2.10.0...v2.10.1)

[Pull
Requests](https://github.com/aquaproj/aqua/pulls?q=is%3Apr+milestone%3Av2.10.1)
|
[Issues](https://github.com/aquaproj/aqua/issues?q=is%3Aissue+milestone%3Av2.10.1)
| https://github.com/aquaproj/aqua/compare/v2.10.0...v2.10.1

##### Bug Fixes

[#&#8203;2119](https://github.com/aquaproj/aqua/issues/2119) Stop
outputting checksum file paths except for `aqua update-checksum`

This is a bug of aqua
[v2.10.0](https://github.com/aquaproj/aqua/releases/tag/v2.10.0)
[#&#8203;2108](https://github.com/aquaproj/aqua/issues/2108)

### [`v2.10.0`](https://github.com/aquaproj/aqua/releases/tag/v2.10.0)

[Compare
Source](https://github.com/aquaproj/aqua/compare/v2.9.1...v2.10.0)

[Pull
Requests](https://github.com/aquaproj/aqua/pulls?q=is%3Apr+milestone%3Av2.10.0)
|
[Issues](https://github.com/aquaproj/aqua/issues?q=is%3Aissue+milestone%3Av2.10.0)
| https://github.com/aquaproj/aqua/compare/v2.9.1...v2.10.0

##### Features

[#&#8203;2111](https://github.com/aquaproj/aqua/issues/2111) Add a
subcommand `info`
[#&#8203;2108](https://github.com/aquaproj/aqua/issues/2108)
update-checksum: Output created or updated file names

##### Others

[#&#8203;2110](https://github.com/aquaproj/aqua/issues/2110) Update
aqua-proxy v1.2.0 to v1.2.1

https://github.com/aquaproj/aqua-proxy/releases/tag/v1.2.1

##### Features - Add a subcommand `info`

[#&#8203;2111](https://github.com/aquaproj/aqua/issues/2111)

e.g.

```console
$ aqua info
{
  "version": "2.10.0",
  "commit_hash": "b80f805489c317d83d7fe0b182f3ef5c82a06725",
  "os": "darwin",
  "arch": "arm64",
  "pwd": "/Users/(USER)/Documents/aqua/info",
  "root_dir": "/Users/(USER)/.local/share/aquaproj-aqua",
  "env": {
    "AQUA_GITHUB_TOKEN": "(masked)",
    "AQUA_GLOBAL_CONFIG": "/Users/(USER)/repos/src/github.com/aquaproj/aqua-registry/aqua-all.yaml"
  },
  "config_files": [
    {
      "path": "/Users/(USER)/Documents/aqua/info/aqua/aqua.yaml"
    }
  ]
}
```

GitHub Access Token and user name are masked.

This is useful for troubleshooting.
Please paste the result of this command to your support issues.

##### Features - update-checksum: Output created or updated file names

[#&#8203;2108](https://github.com/aquaproj/aqua/issues/2108)

```console
$ aqua update-checksum
```

This is useful to commit and push created or updated files in CI.

### [`v2.9.1`](https://github.com/aquaproj/aqua/releases/tag/v2.9.1)

[Compare
Source](https://github.com/aquaproj/aqua/compare/v2.9.0...v2.9.1)

[Pull
Requests](https://github.com/aquaproj/aqua/pulls?q=is%3Apr+milestone%3Av2.9.1)
|
[Issues](https://github.com/aquaproj/aqua/issues?q=is%3Aissue+milestone%3Av2.9.1)
| https://github.com/aquaproj/aqua/compare/v2.9.0...v2.9.1

##### Bug Fixes

[#&#8203;2098](https://github.com/aquaproj/aqua/issues/2098) Fix the
Windows support. Fix a bug that aqua skips renaming files mistakenly on
Windows.

This bug affects only Windows.
Windows can't execute files without file extension, but some packages
release executable files without file extension.
So aqua renames files to add file extension such as `.exe` on Windows
when aqua installs them.

This release fixes a bug that this feature doesn't work well.

##### Others

[#&#8203;2091](https://github.com/aquaproj/aqua/issues/2091) Update Go
1.20.5 to 1.20.6

</details>

<details>
<summary>aquaproj/aqua-installer (aquaproj/aqua-installer)</summary>

###
[`v2.1.2`](https://github.com/aquaproj/aqua-installer/releases/tag/v2.1.2)

[Compare
Source](https://github.com/aquaproj/aqua-installer/compare/v2.1.1...v2.1.2)


[Issues](https://github.com/aquaproj/aqua-installer/issues?q=is%3Aissue+milestone%3Av2.1.2)
| [Pull
Requests](https://github.com/aquaproj/aqua-installer/pulls?q=is%3Apr+milestone%3Av2.1.2)
| https://github.com/aquaproj/aqua-installer/compare/v2.1.1...v2.1.2

##### Fixes

[#&#8203;432](https://github.com/aquaproj/aqua-installer/issues/432)
Fix typo
[#&#8203;461](https://github.com/aquaproj/aqua-installer/issues/461)
[#&#8203;463](https://github.com/aquaproj/aqua-installer/issues/463)
Fix a bug that action doesn't work in a container

##### Fix a bug that action doesn't work in a container

[#&#8203;461](https://github.com/aquaproj/aqua-installer/issues/461)
[#&#8203;463](https://github.com/aquaproj/aqua-installer/issues/463)

GitHub Actions supports running a job in a container.


https://docs.github.com/en/actions/using-jobs/running-jobs-in-a-container

But in a container the variable `${{ github.action_path }}` is wrong, so
action can't access the script `aqua-installer`.
This is a known issue of GitHub Actions.

-
[https://github.com/actions/runner/issues/2185](https://github.com/actions/runner/issues/2185)

To solve the issue, we copy the content of the script `aqua-installer`
into action itself, then action don't have to access the script
`aqua-installer`.

</details>

<details>
<summary>aquaproj/aqua-registry (aquaproj/aqua-registry)</summary>

###
[`v4.32.0`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.32.0)

[Compare
Source](https://github.com/aquaproj/aqua-registry/compare/v4.31.0...v4.32.0)


[Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.32.0)
| [Pull
Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.32.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.31.0...v4.32.0

#### 🎉 New Packages


[#&#8203;13691](https://github.com/aquaproj/aqua-registry/issues/13691)
[#&#8203;14174](https://github.com/aquaproj/aqua-registry/issues/14174)
[Scalingo/cli](https://github.com/Scalingo/cli): Command Line client
for Scalingo PaaS

[#&#8203;14209](https://github.com/aquaproj/aqua-registry/issues/14209)
[connectrpc/connect-go/protoc-gen-connect-go](https://github.com/connectrpc/connect-go):
Simple, reliable, interoperable. A better gRPC
[@&#8203;ichizero](https://github.com/ichizero)

:bulb: https://github.com/bufbuild/connect-go was relocated to
https://github.com/connectrpc/connect-go


[#&#8203;14173](https://github.com/aquaproj/aqua-registry/issues/14173)
[segmentio/topicctl](https://github.com/segmentio/topicctl): Tool for
declarative management of Kafka topics

#### 🎉 New Contributors

Thank you for your contribution!

[@&#8203;ichizero](https://github.com/ichizero)
[#&#8203;14209](https://github.com/aquaproj/aqua-registry/issues/14209)

###
[`v4.31.0`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.31.0)

[Compare
Source](https://github.com/aquaproj/aqua-registry/compare/v4.30.0...v4.31.0)


[Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.31.0)
| [Pull
Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.31.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.30.0...v4.31.0

#### 🎉 New Packages


[#&#8203;14076](https://github.com/aquaproj/aqua-registry/issues/14076)
[b4b4r07/vtest](https://github.com/b4b4r07/vtest): Unix `test` command
for Version comparison

[#&#8203;14097](https://github.com/aquaproj/aqua-registry/issues/14097)
[bflad/tfproviderdocs](https://github.com/bflad/tfproviderdocs):
Terraform Provider Documentation Tool
[@&#8203;ponkio-o](https://github.com/ponkio-o)

[#&#8203;14099](https://github.com/aquaproj/aqua-registry/issues/14099)
[golangci/misspell](https://github.com/golangci/misspell): Correct
commonly misspelled English words in source files
[@&#8203;ponkio-o](https://github.com/ponkio-o)

[#&#8203;14102](https://github.com/aquaproj/aqua-registry/issues/14102)
[hashicorp/copywrite](https://github.com/hashicorp/copywrite):
Automate copyright headers and license files at scale
[@&#8203;ponkio-o](https://github.com/ponkio-o)

[#&#8203;14101](https://github.com/aquaproj/aqua-registry/issues/14101)
[pavius/impi](https://github.com/pavius/impi): Verify proper golang
import directives, beyond the capability of gofmt and goimports
[@&#8203;ponkio-o](https://github.com/ponkio-o)

#### Fixes


[#&#8203;14078](https://github.com/aquaproj/aqua-registry/issues/14078)
stoplightio/spectral: Follow up changes of spectral v6.7.0

[#&#8203;14077](https://github.com/aquaproj/aqua-registry/issues/14077)
hhatto/gocloc: Follow up changes of gocloc v0.5.1

###
[`v4.30.0`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.30.0)

[Compare
Source](https://github.com/aquaproj/aqua-registry/compare/v4.29.1...v4.30.0)


[Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.30.0)
| [Pull
Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.30.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.29.1...v4.30.0

#### 🎉 New Packages


[#&#8203;13987](https://github.com/aquaproj/aqua-registry/issues/13987)
[snaplet/cli](https://www.snaplet.dev/): Seed your PostgreSQL database
with production-like data so you can code, debug, and test with ease
[@&#8203;Gowiem](https://github.com/Gowiem)

#### Improvements


[#&#8203;14005](https://github.com/aquaproj/aqua-registry/issues/14005)
[#&#8203;14026](https://github.com/aquaproj/aqua-registry/issues/14026)
aws/aws-cli: Support macOS

#### Fixes


[#&#8203;14021](https://github.com/aquaproj/aqua-registry/issues/14021)
apache/camel-k: Follow up changes of camel-k

[#&#8203;14004](https://github.com/aquaproj/aqua-registry/issues/14004)
mattn/efm-langserver: Ignore v0.0.45
[@&#8203;4513ECHO](https://github.com/4513ECHO)

[#&#8203;14022](https://github.com/aquaproj/aqua-registry/issues/14022)
watchexec/watchexec: Follow up changes of watchexec v1.20.6

###
[`v4.29.1`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.29.1)

[Compare
Source](https://github.com/aquaproj/aqua-registry/compare/v4.29.0...v4.29.1)


[Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.29.1)
| [Pull
Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.29.1)
| https://github.com/aquaproj/aqua-registry/compare/v4.29.0...v4.29.1

#### Fixes


[#&#8203;13979](https://github.com/aquaproj/aqua-registry/issues/13979)
arttor/helmify: Follow up changes of helmify v0.4.5

[#&#8203;13974](https://github.com/aquaproj/aqua-registry/issues/13974)
birdayz/kaf: Follow up changes of kaf v0.2.6

[#&#8203;13971](https://github.com/aquaproj/aqua-registry/issues/13971)
caarlos0/fork-cleaner: Follow up change of fork-cleaner

[#&#8203;13969](https://github.com/aquaproj/aqua-registry/issues/13969)
charmbracelet/vhs: Follow up changes of vhs

[#&#8203;13980](https://github.com/aquaproj/aqua-registry/issues/13980)
google/mtail: Follow up changes of mtail

[#&#8203;13978](https://github.com/aquaproj/aqua-registry/issues/13978)
kyverno/kyverno: Follow up changes of kyverno

[#&#8203;13975](https://github.com/aquaproj/aqua-registry/issues/13975)
tmknom/actdocs: Follow up changes of actdocs v0.5.0

###
[`v4.29.0`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.29.0)

[Compare
Source](https://github.com/aquaproj/aqua-registry/compare/v4.28.0...v4.29.0)


[Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.29.0)
| [Pull
Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.29.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.28.0...v4.29.0

#### 🎉 New Packages


[#&#8203;13931](https://github.com/aquaproj/aqua-registry/issues/13931)
[k0kubun/xremap/gnome](https://github.com/k0kubun/xremap): Key
remapper for X11 and Wayland (for GNOME Wayland)
[@&#8203;4513ECHO](https://github.com/4513ECHO)

[#&#8203;13931](https://github.com/aquaproj/aqua-registry/issues/13931)
[k0kubun/xremap/hypr](https://github.com/k0kubun/xremap): Key remapper
for X11 and Wayland (for Hyprland)
[@&#8203;4513ECHO](https://github.com/4513ECHO)

[#&#8203;13931](https://github.com/aquaproj/aqua-registry/issues/13931)
[k0kubun/xremap/kde](https://github.com/k0kubun/xremap): Key remapper
for X11 and Wayland (for KDE-Plasma Wayland)
[@&#8203;4513ECHO](https://github.com/4513ECHO)

[#&#8203;13931](https://github.com/aquaproj/aqua-registry/issues/13931)
[k0kubun/xremap/sway](https://github.com/k0kubun/xremap): Key remapper
for X11 and Wayland (for Sway)
[@&#8203;4513ECHO](https://github.com/4513ECHO)

[#&#8203;13931](https://github.com/aquaproj/aqua-registry/issues/13931)
[k0kubun/xremap/x11](https://github.com/k0kubun/xremap): Key remapper
for X11 and Wayland (for X11)
[@&#8203;4513ECHO](https://github.com/4513ECHO)

#### Fixes


[#&#8203;13930](https://github.com/aquaproj/aqua-registry/issues/13930)
sheepla/fzwiki: Follow up changes of fzwiki v0.1.0-alpha
[@&#8203;4513ECHO](https://github.com/4513ECHO)

###
[`v4.28.0`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.28.0)

[Compare
Source](https://github.com/aquaproj/aqua-registry/compare/v4.27.0...v4.28.0)


[Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.28.0)
| [Pull
Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.28.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.27.0...v4.28.0

#### 🎉 New Packages


[#&#8203;13862](https://github.com/aquaproj/aqua-registry/issues/13862)
[JohnnyMorganz/StyLua](https://github.com/JohnnyMorganz/StyLua): An
opinionated Lua code formatter
[@&#8203;4513ECHO](https://github.com/4513ECHO)

[#&#8203;13863](https://github.com/aquaproj/aqua-registry/issues/13863)
[itchyny/maze](https://github.com/itchyny/maze): A maze command
written in Go [@&#8203;4513ECHO](https://github.com/4513ECHO)

###
[`v4.27.0`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.27.0)

[Compare
Source](https://github.com/aquaproj/aqua-registry/compare/v4.26.0...v4.27.0)


[Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.27.0)
| [Pull
Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.27.0)
| https://github.com/aquaproj/aqua-registry/compare/v4.26.0...v4.27.0

#### 🎉 New Packages


[#&#8203;13784](https://github.com/aquaproj/aqua-registry/issues/13784)
[crates.io/shellharden](https://crates.io/crates/shellharden): The
corrective bash syntax highlighter
[@&#8203;hituzi-no-sippo](https://github.com/hituzi-no-sippo)

</details>

<details>
<summary>bitnami-labs/sealed-secrets
(bitnami-labs/sealed-secrets)</summary>

###
[`v0.23.0`](https://github.com/bitnami-labs/sealed-secrets/blob/HEAD/RELEASE-NOTES.md#v0230)

[Compare
Source](https://github.com/bitnami-labs/sealed-secrets/compare/v0.22.0...v0.23.0)

##### Changelog

- Add option for custom annotations and labels on sealing keypairs
([#&#8203;1250](https://github.com/bitnami-labs/sealed-secrets/pull/1250))
- Add option to patch secrets instead of clobbering them
([#&#8203;1259](https://github.com/bitnami-labs/sealed-secrets/pull/1259))
- Improve CLI UX error message while service is not found
([#&#8203;1256](https://github.com/bitnami-labs/sealed-secrets/pull/1256))
- Add namespaced roles support to Helm chart
([#&#8203;1240](https://github.com/bitnami-labs/sealed-secrets/pull/1240))
- add --log-info-stdout to chart
([#&#8203;1238](https://github.com/bitnami-labs/sealed-secrets/pull/1238))
- Fix networkpolicy port + add egress
([#&#8203;1243](https://github.com/bitnami-labs/sealed-secrets/pull/1243))
- Create index for Sealed Secrets public documentation
([#&#8203;1264](https://github.com/bitnami-labs/sealed-secrets/pull/1264))
- Getting started page
([#&#8203;1253](https://github.com/bitnami-labs/sealed-secrets/pull/1253))
- Create a FAQ document for Sealed Secrets public documentation
([#&#8203;1269](https://github.com/bitnami-labs/sealed-secrets/pull/1269))
- Create a cryptography document for Sealed Secrets public documentation
([#&#8203;1267](https://github.com/bitnami-labs/sealed-secrets/pull/1267))
- Validate existing Sealed Secrets document
([#&#8203;1266](https://github.com/bitnami-labs/sealed-secrets/pull/1266))
- added support policy to readme
([#&#8203;1265](https://github.com/bitnami-labs/sealed-secrets/pull/1265))
- Add missing document seperator
([#&#8203;1260](https://github.com/bitnami-labs/sealed-secrets/pull/1260))
- Enable full linter support for golangci-lint
([#&#8203;1262](https://github.com/bitnami-labs/sealed-secrets/pull/1262))
- Update minikube K8S versions
([#&#8203;1251](https://github.com/bitnami-labs/sealed-secrets/pull/1251))
- Bump github.com/onsi/ginkgo/v2 from 2.10.0 to 2.11.0
([#&#8203;1254](https://github.com/bitnami-labs/sealed-secrets/pull/1254))
- Bump k8s.io/code-generator from 0.27.2 to 0.27.3
([#&#8203;1255](https://github.com/bitnami-labs/sealed-secrets/pull/1255))
- Bump golang.org/x/crypto from 0.10.0 to 0.11.0
([#&#8203;1268](https://github.com/bitnami-labs/sealed-secrets/pull/1268))
- Bump github.com/prometheus/client_golang from 1.15.1 to 1.16.0
([#&#8203;1247](https://github.com/bitnami-labs/sealed-secrets/pull/1247))
- Bump golang.org/x/crypto from 0.9.0 to 0.10.0
([#&#8203;1248](https://github.com/bitnami-labs/sealed-secrets/pull/1248))
- Bump k8s.io/client-go from 0.27.2 to 0.27.3
([#&#8203;1244](https://github.com/bitnami-labs/sealed-secrets/pull/1244))

</details>

<details>
<summary>charmbracelet/gum (charmbracelet/gum)</summary>

###
[`v0.11.0`](https://github.com/charmbracelet/gum/releases/tag/v0.11.0)

[Compare
Source](https://github.com/charmbracelet/gum/compare/v0.10.0...v0.11.0)

### Pager Search, Timeouts, and Bug fixes

This release of Gum includes several features and bug fixes to make your
Gum usage more smooooth! 🧈

<img width="600"
src="https://github.com/charmbracelet/gum/assets/42545625/b1dcd04b-fc79-4976-9035-899ead036f3c"
/>

#### What’s Changed
##### New

- Pager search functionality (by
[@&#8203;MikaelFangel](https://github.com/MikaelFangel)) in
[https://github.com/charmbracelet/gum/pull/321](https://github.com/charmbracelet/gum/pull/321)
- Strip ANSI for `gum filter` and `gum choose` when output is not a TTY
- Non-positive widths will cause `gum write` will use the entire
terminal width
-   `GUM_FORMAT_THEME` / `GUM_FORMAT_LANGUAGE` environment variables
-   `--no-sort` flag for `gum filter`
-   Customizable cursor modes
-   Customizable cursor line text
- Add `--timeout` flag to all subcommands (by
[@&#8203;deicon](https://github.com/deicon))

##### Fixed

-   Respect file path argument in filepicker

##### Other stuff

- Switch to `termenv.EnvColorProfile()` by
[@&#8203;kennyp](https://github.com/kennyp) in
[https://github.com/charmbracelet/gum/pull/387](https://github.com/charmbracelet/gum/pull/387)

#### New Contributors

- [@&#8203;hopefulTex](https://github.com/hopefulTex) made their first
contribution in
[https://github.com/charmbracelet/gum/pull/303](https://github.com/charmbracelet/gum/pull/303)
- [@&#8203;vahnrr](https://github.com/vahnrr) made their first
contribution in
[https://github.com/charmbracelet/gum/pull/374](https://github.com/charmbracelet/gum/pull/374)
- [@&#8203;kennyp](https://github.com/kennyp) made their first
contribution in
[https://github.com/charmbracelet/gum/pull/387](https://github.com/charmbracelet/gum/pull/387)

**Full Changelog**:
https://github.com/charmbracelet/gum/compare/v0.10.0...v0.11.0

***

<a href="https://charm.sh/"><img alt="The Charm logo"
src="https://stuff.charm.sh/charm-badge.jpg" width="400"></a>

Thoughts? Questions? We love hearing from you. Feel free to reach out on
[Twitter](https://twitter.com/charmcli), [The
Fediverse](https://mastodon.technology/@&#8203;charm), or on
[Discord](https://charm.sh/chat).

</details>

<details>
<summary>cli/cli (cli/cli)</summary>

### [`v2.32.1`](https://github.com/cli/cli/releases/tag/v2.32.1):
GitHub CLI 2.32.1

[Compare Source](https://github.com/cli/cli/compare/v2.32.0...v2.32.1)

#### What's Changed

- `pr checks`: Fix regression making it unusable in GHES versions older
than 3.9 by [@&#8203;samcoe](https://github.com/samcoe) in
[https://github.com/cli/cli/pull/7725](https://github.com/cli/cli/pull/7725)
- `pr edit`: Do not make reviewer update request if there are no
reviewer changes by [@&#8203;samcoe](https://github.com/samcoe) in
[https://github.com/cli/cli/pull/7730](https://github.com/cli/cli/pull/7730)
- `repo view`: Sanitize file contents before displaying them by
[@&#8203;samcoe](https://github.com/samcoe) in
[https://github.com/cli/cli/pull/7694](https://github.com/cli/cli/pull/7694)
- `release download`: Use filepath.Clean to sanitize path for archive
downloads by [@&#8203;samcoe](https://github.com/samcoe) in
[https://github.com/cli/cli/pull/7720](https://github.com/cli/cli/pull/7720)
- `auth`: Do not add auth token to redirect requests which do not have
the same host as the initial request by
[@&#8203;samcoe](https://github.com/samcoe) in
[https://github.com/cli/cli/pull/7692](https://github.com/cli/cli/pull/7692)
- Use asciisanitization package from go-gh by
[@&#8203;samcoe](https://github.com/samcoe) in
[https://github.com/cli/cli/pull/7745](https://github.com/cli/cli/pull/7745)

**Full Changelog**: https://github.com/cli/cli/compare/v2.32.0...v2.32.1

</details>

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

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

[Compare
Source](https://github.com/jesseduffield/lazygit/compare/v0.39.3...v0.39.4)

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

#### What's Changed

##### Enhancements 🔥

- Prompt for commit message when moving a custom patch to a new commit
by [@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2800](https://github.com/jesseduffield/lazygit/pull/2800)

##### Fixes 🔧

- Support typing special characters like '\[' on non-english keyboards
by [@&#8203;Calvin1602](https://github.com/Calvin1602) in
[https://github.com/jesseduffield/lazygit/pull/2818](https://github.com/jesseduffield/lazygit/pull/2818)
- Fix infinite wait on push/pull on windows by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2821](https://github.com/jesseduffield/lazygit/pull/2821)

##### Docs 📖

- Add Gentoo installation documentation to README by
[@&#8203;cova-fe](https://github.com/cova-fe) in
[https://github.com/jesseduffield/lazygit/pull/2811](https://github.com/jesseduffield/lazygit/pull/2811)

#### New Contributors

- [@&#8203;cova-fe](https://github.com/cova-fe) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2811](https://github.com/jesseduffield/lazygit/pull/2811)
- [@&#8203;Calvin1602](https://github.com/Calvin1602) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2818](https://github.com/jesseduffield/lazygit/pull/2818)

**Full Changelog**:
https://github.com/jesseduffield/lazygit/compare/v0.39.3...v0.39.4

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

[Compare
Source](https://github.com/jesseduffield/lazygit/compare/v0.39.2...v0.39.3)

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

#### What's Changed

##### Enhancements 🔥

- Include more commit authors in author suggestions by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2807](https://github.com/jesseduffield/lazygit/pull/2807)
- Use fuzzy search when filtering a view by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2808](https://github.com/jesseduffield/lazygit/pull/2808)
- Better tag creation UX by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2809](https://github.com/jesseduffield/lazygit/pull/2809)
- Better word wrap by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2812](https://github.com/jesseduffield/lazygit/pull/2812)

##### Fixes 🔧

- Fix crash caused by simultaneous read/write of scanner buffer by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2813](https://github.com/jesseduffield/lazygit/pull/2813)

**Full Changelog**:
https://github.com/jesseduffield/lazygit/compare/v0.39.2...v0.39.3

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

[Compare
Source](https://github.com/jesseduffield/lazygit/compare/v0.39.1...v0.39.2)

This release fixes an issue on windows where the main view would stop
rendering new content. This issue mostly affected users running git
through a shim. Thanks to
[@&#8203;AndrewSav](https://github.com/AndrewSav) for the
investigation and fix
[https://github.com/jesseduffield/lazygit/pull/2806](https://github.com/jesseduffield/lazygit/pull/2806)

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

[Compare
Source](https://github.com/jesseduffield/lazygit/compare/v0.38.2...v0.39.1)

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

**Full Changelog**:
https://github.com/jesseduffield/lazygit/compare/v0.39.0...v0.39.1

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

#### What's Changed

There's lots of stuff in this release! Some favourites of mine include:

- Filter functionality for branches (and some other list views)
activated by '/'
- Showing commit hashes against branches (opt-in with
`gui.showBranchCommitHash: true`)
-   Various improvements to rebasing functionality
-   Nerd font 3 support

As you can see [@&#8203;stefanhaller](https://github.com/stefanhaller)
is behind many of the improvements in this release so kudos to you
Stefan! And thanks to all the contributors who made this release
possible.

In the next release we're adding worktree support. It's a big feature so
we want to get it right! If you use worktrees as part of your daily flow
please respond to the poll (and even test out the draft PR) in the
[Worktree UX
discussion](https://github.com/jesseduffield/lazygit/discussions/2803)

##### Enhancements 🔥

- Support filtering on some views with '/' by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2680](https://github.com/jesseduffield/lazygit/pull/2680)
- Allow scrolling side views without changing selected item by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2608](https://github.com/jesseduffield/lazygit/pull/2608)
- Speed up Lazygit on windows by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2661](https://github.com/jesseduffield/lazygit/pull/2661)
- Show commit hashes against branches (opt-in) by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2274](https://github.com/jesseduffield/lazygit/pull/2274)
- Add config for nerd fonts version by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2731](https://github.com/jesseduffield/lazygit/pull/2731)
- Show rebase todo entry for conflicted commit by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2682](https://github.com/jesseduffield/lazygit/pull/2682)
- Don't keep commits that become empty during a rebase by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2644](https://github.com/jesseduffield/lazygit/pull/2644)
- Show menu instead of prompt when there are conflicts in a rebase or
merge by [@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2694](https://github.com/jesseduffield/lazygit/pull/2694)
- Make "merged" take precedence over "unpushed" by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2628](https://github.com/jesseduffield/lazygit/pull/2628)
- Add config for main branches by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2619](https://github.com/jesseduffield/lazygit/pull/2619)
- Visualize the "ignore whitespace" config by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2641](https://github.com/jesseduffield/lazygit/pull/2641)
- Support dynamically generated suggestions in custom commands prompt by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2686](https://github.com/jesseduffield/lazygit/pull/2686)
- Add suggestions presets to prompts in custom commands by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2685](https://github.com/jesseduffield/lazygit/pull/2685)
- Allow checking for merge conflicts after running a custom command by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2773](https://github.com/jesseduffield/lazygit/pull/2773)
- Use sentence case everywhere by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2672](https://github.com/jesseduffield/lazygit/pull/2672)
- Our casing as all over the place so now we're using 'Sentence case'
for everything.
- More compact and flexible date format by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2676](https://github.com/jesseduffield/lazygit/pull/2676)
- Add nvim and kakoune editor presets by
[@&#8203;screendriver](https://github.com/screendriver) in
[https://github.com/jesseduffield/lazygit/pull/2591](https://github.com/jesseduffield/lazygit/pull/2591)
- Add helix editor preset by [@&#8203;dvic](https://github.com/dvic)
in
[https://github.com/jesseduffield/lazygit/pull/2668](https://github.com/jesseduffield/lazygit/pull/2668)
- Fetch from all remotes by default by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2692](https://github.com/jesseduffield/lazygit/pull/2692)
- Better prompt for discarding old file changes by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2707](https://github.com/jesseduffield/lazygit/pull/2707)
- Use remote upstreams of main branches to determine merged status of
commits by [@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2725](https://github.com/jesseduffield/lazygit/pull/2725)
- Always show branch heads in diff pane by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2748](https://github.com/jesseduffield/lazygit/pull/2748)
- Rely on .gitconfig for verbose commit messages by
[@&#8203;scallaway](https://github.com/scallaway) in
[https://github.com/jesseduffield/lazygit/pull/2664](https://github.com/jesseduffield/lazygit/pull/2664)
- Show all tags in commits panel by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2776](https://github.com/jesseduffield/lazygit/pull/2776)
- Update gitlab merge request URL to match new routing by
[@&#8203;mazharz](https://github.com/mazharz) in
[https://github.com/jesseduffield/lazygit/pull/2656](https://github.com/jesseduffield/lazygit/pull/2656)
- Right-align key labels in menu by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2652](https://github.com/jesseduffield/lazygit/pull/2652)
- Indicate reserved menu keybindings to reduce confusion by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2651](https://github.com/jesseduffield/lazygit/pull/2651)

##### Fixes 🔧

- Fix to show commitPrefixes in commit message with a new blank commit
by [@&#8203;longlhh90](https://github.com/longlhh90) in
[https://github.com/jesseduffield/lazygit/pull/2612](https://github.com/jesseduffield/lazygit/pull/2612)
- Fix intermittent rebase continue prompt failure by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2629](https://github.com/jesseduffield/lazygit/pull/2629)
- Fix bug where discarding merge conflict file failed by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2662](https://github.com/jesseduffield/lazygit/pull/2662)
- Better default text colour on light theme terminals by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2696](https://github.com/jesseduffield/lazygit/pull/2696)
- Fix rendering issues in commits view by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2700](https://github.com/jesseduffield/lazygit/pull/2700)
- Fix interactive rebase with git 2.25.1 and earlier by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2747](https://github.com/jesseduffield/lazygit/pull/2747)
- Fix crash when a background fetch prompts for credentials by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2789](https://github.com/jesseduffield/lazygit/pull/2789)
- fix kakoune binary name by
[@&#8203;enricozb](https://github.com/enricozb) in
[https://github.com/jesseduffield/lazygit/pull/2708](https://github.com/jesseduffield/lazygit/pull/2708)
- Fix focus issue when opening recent-repos menu at launch by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2715](https://github.com/jesseduffield/lazygit/pull/2715)
- Allow discarding changes only from local commits by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2712](https://github.com/jesseduffield/lazygit/pull/2712)
- Honour configured comment char on interactive rebase by
[@&#8203;gustavopcassol](https://github.com/gustavopcassol) in
[https://github.com/jesseduffield/lazygit/pull/2639](https://github.com/jesseduffield/lazygit/pull/2639)
- Fix the title and text of the Discard Changes prompt by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2706](https://github.com/jesseduffield/lazygit/pull/2706)
- Fix broken `git init` prompt by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2771](https://github.com/jesseduffield/lazygit/pull/2771)
- Fix potentially wrong help text in commit message panel by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2777](https://github.com/jesseduffield/lazygit/pull/2777)
- Fix incorrect focus in accordion mode by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2792](https://github.com/jesseduffield/lazygit/pull/2792)
- Fix crash on empty menu by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2799](https://github.com/jesseduffield/lazygit/pull/2799)
- Only apply right-alignment on first column of keybindings menu by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2801](https://github.com/jesseduffield/lazygit/pull/2801)
- Stop hiding underscores for VSCode by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2699](https://github.com/jesseduffield/lazygit/pull/2699)

##### Maintenance ⚙️

- Run integration tests with all supported git versions by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2754](https://github.com/jesseduffield/lazygit/pull/2754)
- Add ability to update yaml path while preserving comments by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2620](https://github.com/jesseduffield/lazygit/pull/2620)
- Refactor for better encapsulation by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2519](https://github.com/jesseduffield/lazygit/pull/2519)
- Add convenience builder for git commands by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2645](https://github.com/jesseduffield/lazygit/pull/2645)
- Construct arg vector manually rather than parse string by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2655](https://github.com/jesseduffield/lazygit/pull/2655)
- Allow global logging when developing by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2671](https://github.com/jesseduffield/lazygit/pull/2671)
- remove `github.com/jesseduffield/yaml` package by
[@&#8203;Ryooooooga](https://github.com/Ryooooooga) in
[https://github.com/jesseduffield/lazygit/pull/2508](https://github.com/jesseduffield/lazygit/pull/2508)
- Update seconds ago function and add tests by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2695](https://github.com/jesseduffield/lazygit/pull/2695)
- Support matchers on integers in integration tests by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2704](https://github.com/jesseduffield/lazygit/pull/2704)
- Improve yaml_utils by
[@&#8203;stefanhaller](https://github.com/stefanhaller) in
[https://github.com/jesseduffield/lazygit/pull/2718](https://github.com/jesseduffield/lazygit/pull/2718)
- Fix typo 'EnteRefName' by
[@&#8203;letavocado](https://github.com/letavocado) in
[https://github.com/jesseduffield/lazygit/pull/2750](https://github.com/jesseduffield/lazygit/pull/2750)
- Track busy/idle state for integration tests by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2765](https://github.com/jesseduffield/lazygit/pull/2765)
- Add test for cmd obj cloning by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2780](https://github.com/jesseduffield/lazygit/pull/2780)
- Update release notes config and add CI check by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2797](https://github.com/jesseduffield/lazygit/pull/2797)
- Add release config for generating release notes by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2793](https://github.com/jesseduffield/lazygit/pull/2793)
- Remove Uffizzi by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2690](https://github.com/jesseduffield/lazygit/pull/2690)
- Bump golang.org/x/net from 0.0.0-20220722155237-a158d28d115b to 0.7.0
by [@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/jesseduffield/lazygit/pull/2490](https://github.com/jesseduffield/lazygit/pull/2490)

##### Docs 📖

- Add package statuses to readme by
[@&#8203;jesseduffield](https://github.com/jesseduffield) in
[https://github.com/jesseduffield/lazygit/pull/2717](https://github.com/jesseduffield/lazygit/pull/2717)

##### I18n 🌎

- Add Traditional Chinese support by
[@&#8203;tzengyuxio](https://github.com/tzengyuxio) in
[https://github.com/jesseduffield/lazygit/pull/2688](https://github.com/jesseduffield/lazygit/pull/2688)
- Add russian translation by
[@&#8203;letavocado](https://github.com/letavocado) in
[https://github.com/jesseduffield/lazygit/pull/2729](https://github.com/jesseduffield/lazygit/pull/2729)

#### New Contributors

- [@&#8203;screendriver](https://github.com/screendriver) made their
first contribution in
[https://github.com/jesseduffield/lazygit/pull/2591](https://github.com/jesseduffield/lazygit/pull/2591)
- [@&#8203;longlhh90](https://github.com/longlhh90) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2612](https://github.com/jesseduffield/lazygit/pull/2612)
- [@&#8203;mazharz](https://github.com/mazharz) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2656](https://github.com/jesseduffield/lazygit/pull/2656)
- [@&#8203;dvic](https://github.com/dvic) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2668](https://github.com/jesseduffield/lazygit/pull/2668)
- [@&#8203;dependabot](https://github.com/dependabot) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2490](https://github.com/jesseduffield/lazygit/pull/2490)
- [@&#8203;tzengyuxio](https://github.com/tzengyuxio) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2688](https://github.com/jesseduffield/lazygit/pull/2688)
- [@&#8203;enricozb](https://github.com/enricozb) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2708](https://github.com/jesseduffield/lazygit/pull/2708)
- [@&#8203;letavocado](https://github.com/letavocado) made their first
contribution in
[https://github.com/jesseduffield/lazygit/pull/2729](https://github.com/jesseduffield/lazygit/pull/2729)
- [@&#8203;gustavopcassol](https://github.com/gustavopcassol) made
their first contribution in
[https://github.com/jesseduffield/lazygit/pull/2639](https://github.com/jesseduffield/lazygit/pull/2639)

If you contributed to this release but don't see your name here, let me
know!

**Full Changelog**:
https://github.com/jesseduffield/lazygit/compare/v0.38.2...v0.39.1

</details>

<details>
<summary>kubernetes-sigs/kustomize (kubernetes-sigs/kustomize)</summary>

###
[`v5.1.1`](https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize/v5.1.1)

[Compare
Source](https://github.com/kubernetes-sigs/kustomize/compare/kustomize/v5.1.0...kustomize/v5.1.1)

Built with go 1.20.6 to address CVEs in previous go versions.


[#&#8203;5245](https://github.com/kubernetes-sigs/kustomize/issues/5245):
Fix typo in help for the create subcommand

</details>

<details>
<summary>kubernetes/kubectl (kubernetes/kubectl)</summary>

###
[`v1.27.4`](https://github.com/kubernetes/kubectl/compare/kubernetes-1.27.3...kubernetes-1.27.4)

[Compare
Source](https://github.com/kubernetes/kubectl/compare/kubernetes-1.27.3...kubernetes-1.27.4)

</details>

<details>
<summary>kubernetes/minikube (kubernetes/minikube)</summary>

###
[`v1.31.1`](https://github.com/kubernetes/minikube/releases/tag/v1.31.1)

[Compare
Source](https://github.com/kubernetes/minikube/compare/v1.31.0...v1.31.1)

📣😀 **Please fill out our [fast 5-question
survey](https://forms.gle/Gg3hG5ZySw8c1C24A)** so that we can learn how
& why you use minikube, and what improvements we should make. Thank you!
💃🎉

#### Release Notes

#### Version 1.31.1 - 2023-07-20

- cni: Fix regression in auto selection
[#&#8203;16912](https://github.com/kubernetes/minikube/pull/16912)

For a more detailed changelog, see
[CHANGELOG.md](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md).

Thank you to our contributors for this release!

-   Jeff MAURY
-   Medya Ghazizadeh
-   Steven Powell

Thank you to our triage members for this release!

-   afbjorklund (5 comments)
-   torenware (5 comments)
-   mprimeaux (3 comments)
-   prezha (3 comments)
-   spowelljr (1 comments)

Check out our [contributions
leaderboard](https://minikube.sigs.k8s.io/docs/contrib/leaderboard/v1.31.1/)
for this release!

#### Installation

See [Getting Started](https://minikube.sigs.k8s.io/docs/start/)

#### Binary Checksums

darwin-amd64:
`a465e5b537b63ac8e6624396f490dd79516fd625c1110cbf1f49e7b55c1dfcf6`
darwin-arm64:
`b58bfb3eaa9f5ab04ced7f6e23184c04fdaadb4ac06cf982e2c50c37466e465a`
linux-amd64:
`ebcdfb0a520e9e746360a9dd954a9006ca75770e53fcdae493b6ac9a20026733`
linux-arm:
`372414001ac449f6b33d7189b7fad68980169136221b94dca5cf5e1a9d90259f`
linux-arm64:
`1bc6dd8bb2f7f0eaae49a3f5685cda0472abdc6e870f5105681e877017826281`
linux-ppc64le:
`ce979d3698c573eb39ec6fe4d013a714aafcb15331d6c0fed2e38b5f91000162`
linux-s390x:
`5d9a2cedfa79fbcbfd85a3034eed747da1baf8d1d4004fc4cd18bcafdfe3f6f5`
windows-amd64.exe:
`a08699d25fede796e6fdc56d8630380bd5864fb291592fc2be24fe881656d064`

#### ISO Checksums

amd64:
`4cc52896d9ab0444300737ddae6d49dd2dbcf67c14579bf3b975d55213ce96ae`\
arm64:
`355556716c1de155eeb04e37ed289808f12f2a650e6aa2967f61ab4539241eb6`

###
[`v1.31.0`](https://github.com/kubernetes/minikube/releases/tag/v1.31.0)

[Compare
Source](https://github.com/kubernetes/minikube/compare/v1.30.1...v1.31.0)

📣😀 **Please fill out our [fast 5-question
survey](https://forms.gle/Gg3hG5ZySw8c1C24A)** so that we can learn how
& why you use minikube, and what improvements we should make. Thank you!
💃🎉

#### Release Notes

#### Version 1.31.0 - 2023-07-18

Features:

- Add back VMware driver support
[#&#8203;16796](https://github.com/kubernetes/minikube/pull/16796)
- `docker-env` supports the containerd runtime (experimental)
[#&#8203;15452](https://github.com/kubernetes/minikube/pull/15452)
[#&#8203;16761](https://github.com/kubernetes/minikube/pull/16761)
- Automatically renew expired kubeadm certs
[#&#8203;16249](https://github.com/kubernetes/minikube/pull/16249)
- New addon inspektor-gadget
[#&#8203;15869](https://github.com/kubernetes/minikube/pull/15869)

Major Improvements:

- VM drivers: Fix all images getting removed on stop/start (40% start
speedup)
[#&#8203;16655](https://github.com/kubernetes/minikube/pull/16655)
- Addon registry: Add support for all architectures
[#&#8203;16577](https://github.com/kubernetes/minikube/pull/16577)
- QEMU: Fix failing to interact with cluster after upgrading QEMU
version
[#&#8203;16853](https://github.com/kubernetes/minikube/pull/16853)
- macOS/QEMU: Auto unblock bootpd from firewall if blocking socket_vmnet
network
[#&#8203;16714](https://github.com/kubernetes/minikube/pull/16714)
[#&#8203;16789](https://github.com/kubernetes/minikube/pull/16789)
- `minikube cp` supports providing directory as a target
[#&#8203;15519](https://github.com/kubernetes/minikube/pull/15519)

Minor Improvements:

- Always use cni unless running with dockershim
[#&#8203;14780](https://github.com/kubernetes/minikube/pull/14780)
- none driver: Check for CNI plugins before starting cluster
[#&#8203;16419](https://github.com/kubernetes/minikube/pull/16419)
- QEMU: Add ability to create extra disks
[#&#8203;15887](https://github.com/kubernetes/minikube/pull/15887)
- \--kubernetes-version: Assume latest patch version if not specified
[#&#8203;16569](https://github.com/kubernetes/minikube/pull/16569)
- audit: Set default max file size
[#&#8203;16543](https://github.com/kubernetes/minikube/pull/16543)
- service: Fail if no pods available
[#&#8203;15079](https://github.com/kubernetes/minikube/pull/15079)
- docker/podman driver: Use buildx for `image build` command
[#&#8203;16252](https://github.com/kubernetes/minikube/pull/16252)
- Addon gvisor: Simplify runtime configuration and use latest version
[#&#8203;14996](https://github.com/kubernetes/minikube/pull/14996)
- Add PowerShell code completion
[#&#8203;16232](https://github.com/kubernetes/minikube/pull/16232)
- build: Support DOS-style path for Dockerfile path
[#&#8203;15074](https://github.com/kubernetes/minikube/pull/15074)

Bugs:

- none driver: Fix `minikube start` not working without `sudo`
[#&#8203;16408](https://github.com/kubernetes/minikube/pull/16408)
- none driver: Fix `minikube image build`
[#&#8203;16386](https://github.com/kubernetes/minikube/pull/16386)
- Fix only allowing one global tunnel
[#&#8203;16839](https://github.com/kubernetes/minikube/pull/16839)
- Fix enabling addons when --no-kubernetes
[#&#8203;15003](https://github.com/kubernetes/minikube/pull/15003)
- Fix enabling addons on a paused cluster
[#&#8203;15868](https://github.com/kubernetes/minikube/pull/15868)
- Fix waiting for kicbase downloads on VM drivers
[#&#8203;16695](https://github.com/kubernetes/minikube/pull/16695)
- image list: Fix only outputting single tag of image with multiple tags
[#&#8203;16578](https://github.com/kubernetes/minikube/pull/16578)
- Addons: Fix cloud-spanner and headlamp incorrect file permissions
[#&#8203;16413](https://github.com/kubernetes/minikube/pull/16413)
- Fix csi-hostpath not allowing custom registry
[#&#8203;16395](https://github.com/kubernetes/minikube/pull/16395)
- Fix mount cleaning mechanism
[#&#8203;15782](https://github.com/kubernetes/minikube/pull/15782)
- Fix kubectl tab-completion and improve error messages
\[[#&#8203;14868](https://github.com/kubernetes/minikube/issues/14868)]\[https://github.com/kubernetes/minikube/pull/14868](https://github.com/kubernetes/minikube/pull/14868)8
- Fix help text not being translated
[#&#8203;16850](https://github.com/kubernetes/minikube/pull/16850)
[#&#8203;16852](https://github.com/kubernetes/minikube/pull/16852)

New ISO Modules:

- Add BINFMT_MISC
[#&#8203;16712](https://github.com/kubernetes/minikube/pull/16712)
- Add BPF_SYSCALL to arm64
[#&#8203;15164](https://github.com/kubernetes/minikube/pull/15164)
- Add GENEVE
[#&#8203;15665](https://github.com/kubernetes/minikube/pull/15665)
- add BLK_DEV_RBD & CEPH_LIB to arm64
[#&#8203;16019](https://github.com/kubernetes/minikube/pull/16019)

Version Upgrades:

- Bump Kubernetes version default: v1.27.3 and latest: v1.27.3
[#&#8203;16718](https://github.com/kubernetes/minikube/pull/16718)
- Addon cloud-spanner: Update cloud-spanner-emulator/emulator image from
1.5.2 to 1.5.7
[#&#8203;16248](https://github.com/kubernetes/minikube/pull/16248)
[#&#8203;16352](https://github.com/kubernetes/minikube/pull/16352)
[#&#8203;16587](https://github.com/kubernetes/minikube/pull/16587)
[#&#8203;16652](https://github.com/kubernetes/minikube/pull/16652)
[#&#8203;16845](https://github.com/kubernetes/minikube/pull/16845)
- Addon gcp-auth: Update ingress-nginx/kube-webhook-certgen image from
v20230312-helm-chart-4.5.2-28-g66a760794 to v20230407
[#&#8203;16601](https://github.com/kubernetes/minikube/pull/16601)
- Addon gcp-auth: Update k8s-minikube/gcp-auth-webhook image from
v0.0.14 to v0.1.0
[#&#8203;16573](https://github.com/kubernetes/minikube/pull/16573)
- Addon headlamp: Update headlamp-k8s/headlamp image version from
v0.16.0 to v0.18.0
[#&#8203;16399](https://github.com/kubernetes/minikube/pull/16399)
[#&#8203;16540](https://github.com/kubernetes/minikube/pull/16540)
[#&#8203;16721](https://github.com/kubernetes/minikube/pull/16721)
- Addon ingress: Update ingress-nginx/controller image from v1.7.0 to
v1.8.1
[#&#8203;16601](https://github.com/kubernetes/minikube/pull/16601)
[#&#8203;16832](https://github.com/kubernetes/minikube/pull/16832)
- Addon ingress: Update ingress-nginx/kube-webhook-certgen image from
v20230312-helm-chart-4.5.2-28-g66a760794 to v20230407
[#&#8203;16601](https://github.com/kubernetes/minikube/pull/16601)
- Addon kong: Update kong image from 2.7 to 3.2
[#&#8203;16424](https://github.com/kubernetes/minikube/pull/16424)
- Addon kong: Update kong/kubernetes-ingress-controller image from 2.1.1
to 2.9.3
[#&#8203;16424](https://github.com/kubernetes/minikube/pull/16424)
- CNI calico: Update from v3.24.5 to v3.26.1
[#&#8203;16144](https://github.com/kubernetes/minikube/pull/16144)
[#&#8203;16596](https://github.com/kubernetes/minikube/pull/16596)
[#&#8203;16732](https://github.com/kubernetes/minikube/pull/16732)
- CNI flannel: Update from v0.20.2 to v0.22.0
[#&#8203;16074](https://github.com/kubernetes/minikube/pull/16074)
[#&#8203;16435](https://github.com/kubernetes/minikube/pull/16435)
[#&#8203;16597](https://github.com/kubernetes/minikube/pull/16597)
- CNI kindnet: Update from v20230330-48f316cd to v20230511-dc714da8
[#&#8203;16488](https://github.com/kubernetes/minikube/pull/16488)
- Kicbase: Update base image from ubuntu:focal-20230308 to
ubuntu:jammy-20230624
[#&#8203;16069](https://github.com/kubernetes/minikube/pull/16069)
[#&#8203;16632](https://github.com/kubernetes/minikube/pull/16632)
[#&#8203;16731](https://github.com/kubernetes/minikube/pull/16731)
[#&#8203;16834](https://github.com/kubernetes/minikube/pull/16834)
- Kicbase/ISO: Update buildkit from v0.11.4 to v0.11.6
[#&#8203;16426](https://github.com/kubernetes/minikube/pull/16426)
- Kicbase/ISO: Update cni-plugins from v0.8.5 to v1.3.0
[#&#8203;16582](https://github.com/kubernetes/minikube/pull/16582)
- Kicbase/ISO: Update containerd from v1.7.0 to v1.7.1
[#&#8203;16501](https://github.com/kubernetes/minikube/pull/16501)
- Kicbase/ISO: Update containerd from v1.7.1 to v1.7.2
[#&#8203;16634](https://github.com/kubernetes/minikube/pull/16634)
- Kicbase/ISO: Update cri-dockerd from v0.3.1 to v0.3.3
[#&#8203;16506](https://github.com/kubernetes/minikube/pull/16506)
[#&#8203;16703](https://github.com/kubernetes/minikube/pull/16703)
- Kicbase/ISO: Update docker from 20.10.23 to 24.0.4
[#&#8203;16572](https://github.com/kubernetes/minikube/pull/16572)
[#&#8203;16612](https://github.com/kubernetes/minikube/pull/16612)
[#&#8203;16875](https://github.com/kubernetes/minikube/pull/16875)
- Kicbase/ISO: Update runc from v1.1.5 to v1.1.7
[#&#8203;16417](https://github.com/kubernetes/minikube/pull/16417)

For a more detailed changelog, see
[CHANGELOG.md](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md).

Thank you to our contributors for this release!

-   AiYijing
-   Aleksandr Chebotov
-   Anders F Björklund
-   Armel Soro
-   Asbjørn Apeland
-   Begula
-   Blaine Gardner
-   Bogdan Luca
-   Fabricio Voznika
-   Jeff MAURY
-   Joe Bowbeer
-   Juan Martín Loyola
-   Judah Nouriyelian
-   Kemal Akkoyun
-   Max Cascone
-   Medya Ghazizadeh
-   Michele Sorcinelli
-   Oldřich Jedlička
-   Ricky Sadowski
-   Sharran
-   Steven Powell
-   Terry Moschou
-   Tongyao Si
-   Vedant
-   Viktor Gamov
-   W. Duncan Fraser
-   Yuiko Mouri
-   aiyijing
-   cui fliter
-   guoguangwu
-   himalayanZephyr
-   joaquimrocha
-   lixin18
-   piljoong
-   salasberryfin
-   shixiuguo
-   sunyuxuan
-   syxunion
-   tianlj
-   tzzcfrank
-   vgnshiyer
-   winkelino
-   x7upLime
-   yolossn
-   zhengtianbao
-   Товарищ программист

Thank you to our PR reviewers for this release!

-   spowelljr (180 comments)
-   medyagh (64 comments)
-   eiffel-fl (16 comments)
-   afbjorklund (11 comments)
-   aiyijing (9 comments)
-   atoato88 (6 comments)
-   BenTheElder (2 comments)
-   travisn (2 comments)
-   ComradeProgrammer (1 comments)
-   Kimi450 (1 comments)
-   alban (1 comments)
-   mprimeaux (1 comments)
-   sha

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 4pm on thursday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://github.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/scottames/dots).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMS4wIiwidXBkYXRlZEluVmVyIjoiMzYuMjQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
maintenance For refactorings, CI changes, tests, version bumping, etc
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants