fix(pyproject): track uv.lock relative to target workdir#9266
Open
nguyeda wants to merge 1 commit into
Open
Conversation
The pyproject autodiscovery crawler generated a broken shell target for any pyproject.toml discovered in a subdirectory. The target set both `workdir: <subdir>` and a changedif file of `<subdir>/uv.lock`. Since the shell resource resolves changedif files relative to workdir, the path doubled (e.g. `foo/bar/foo/bar/uv.lock`), so the post-command file check reported "Missing files" and the target failed even though `uv lock` succeeded. Projects at the scan root were unaffected because workdir is `.`. Record the lockfile path relative to the target's own workdir (`uv.lock`), matching how sibling crawlers (golang, npm, cargo) reference their lock files. Add a regression test with a nested subdirectory project (foo/bar) to cover arbitrary depth; existing scan-root scenarios are unchanged. Fixes updatecli#9265 Signed-off-by: David Nguyen <david@nguyen.eu> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSdDmyipsijMHvW4myvcEW
loispostula
approved these changes
Jun 25, 2026
loispostula
left a comment
Contributor
There was a problem hiding this comment.
thanks @nguyeda for your first contribution!
Lgtm
|
Tick the box to add this pull request to the merge queue (same as
|
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.
Current Behavior
The pyproject autodiscovery crawler generates a broken
shelltarget for anypyproject.tomldiscovered in a subdirectory. The generated target sets:workdir: <subdir>— theuv lockcommand runs here and succeeds, andchangedif(file/checksum) tracking<subdir>/uv.lock.Because the shell resource resolves
changediffiles relative toworkdir, the path doubles (e.g.foo/bar/foo/bar/uv.lock). That path doesn't exist, so the post-command file check reportsMissing filesand the target fails — even thoughuv locksucceeded. Projects at the scan root are unaffected becauseworkdiris..Fix
Record the lockfile path relative to the target's own
workdir(justuv.lock) instead of joiningworkdirinto it. Theworkdiris already emitted into the target, and the shell resource prepends it, so joining it twice was the bug. This also matches how sibling crawlers (golang,npm,cargo) reference their lock files as plain literals.Tests
Added a regression scenario (
Scenario 12) using a nested subdirectory project (testdata/subdir_project/foo/bar) to prove the fix holds at arbitrary depth. With the bug present this scenario fails (files: - "foo/bar/uv.lock"); with the fix it passes (files: - "uv.lock",workdir: 'foo/bar'). Existing scan-root scenarios are unchanged.Verified end-to-end against a real subdirectory project:
updatecli applyrunsuv lockin the subdir and rewrites<subdir>/uv.lockcorrectly, with no<subdir>/<subdir>/ever created.Fixes #9265
🤖 Generated with Claude Code