Repository navigation
ci: weekly release-only lazy.nvim updates, with a reproducible plugin restore - #53
Merged
Merged
Conversation
Dependabot has no lazy.nvim ecosystem. A scheduled workflow runs .github/scripts/lazy-update.lua, which moves lazy-lock.json only to new tagged releases (patch, minor or major, forward-only) and holds plugins without releases, then smoke-tests and opens or refreshes one PR. defaults.version = "*" makes tagged plugins resolve to releases. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A bare `Lazy! restore` on a cache miss lets lazy.nvim's first-run install rewrite the lockfile before LazyVim's imported specs are known, leaving those plugins at their upstream target. Install first, copy the committed lock back, restore, and cmp the result -- the same sequence lazy-update.yml uses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…/ci-fresh-restore
…tor/ci-shared-setup
ci.yml's test job and lazy-update.yml both built a kapi-vim package, put it on PATH and ran the checked lazy.nvim restore, with the restore sequence and its comment duplicated. .github/actions/setup-kapi-vim now does all three, plus the plugin cache. The cache is split into restore/save so lazy-update can read CI's cache without writing its updated plugins under the old lockfile's key; the save also moves to straight after the checked restore. The key changes from runs-on to OS/arch since a composite action can't see the matrix, so the first run after this misses once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
potsrevennil
marked this pull request as ready for review
October 20, 2026 08:24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dependabot can't update
lazy-lock.json, and:Lazy syncmoves every plugin to its branch head, which is what made #49 a 16-plugin bump. This adds a weekly workflow that moves plugins only when upstream cuts a release. It also fixes CI's plugin restore, which the workflow depends on, and shares the setup between the two workflows.Release-only updates.
lua/config/lazy.luasetsdefaults = { version = "*" }, so plugins with semver tags resolve to releases..github/scripts/lazy-update.luaupdates only plugins whose target is a newer release and labels each bump patch / minor / major in the PR body. Plugins with an explicitbranch,version = false(nvim-cmp) or no tags stay at their locked commit.lazy-update.ymlruns Mondays at 07:00 UTC: it smoke-tests the result, opens or refreshes onechore/lazy-updatePR, and starts CI on it withworkflow_dispatch, since PRs opened withGITHUB_TOKENdon't trigger workflows.CI restore fix. A bare
Lazy! restoreon a fresh runner doesn't reproduce the lockfile. lazy.nvim's first-run install handles LazyVim before the plugins its specs import are known, rewrites the lock without them, and installs those at their upstream target. On master today, a fresh restore leaves 6 plugins off their locked commits; CI only gets it right on a warm cache. The restore now installs first, puts the committed lock back, restores, andcmps the result.Shared setup.
.github/actions/setup-kapi-vimbuilds the package, puts nvim on PATH, handles the plugin cache and runs the checked restore.ci.yml's test job andlazy-update.ymlboth call it. It's a composite action rather than a reusable workflow because lazy-update runs its update step between the restore and the smoke test.lazy-update.lua. Most plugins are locked past their last tag (plenary's last release is from 2023), so "latest release" would be a downgrade. A release the locked commit already contains is skipped; releases cut from a separate branch (neo-tree's v3.x) are compared by version.cache/restorepluscache/savelet lazy-update read CI's cache withsave-cache: 'false', so bumped plugins are never stored under the old lockfile's key. The save runs straight after the checked restore. The key changes frommatrix.runs-ontorunner.os/runner.arch(an action can't see the matrix), so expect one cache miss.lazy.manage.git,lazy.manage.semverandplugin._.updates, not a public API, so a lazy.nvim update can break it. It then fails at the check or update step rather than writing a bad lockfile.cmppasses on both a cold and a warm cache.Stacked on #49. Includes what was #54 (restore fix) and #57 (shared action).
🤖 Generated with Claude Code