Skip to content

fix: Windows update entrypoint locking and idempotent releases#73

Merged
jrob5756 merged 1 commit intomainfrom
fix/windows-update-and-release
Apr 4, 2026
Merged

fix: Windows update entrypoint locking and idempotent releases#73
jrob5756 merged 1 commit intomainfrom
fix/windows-update-and-release

Conversation

@jrob5756
Copy link
Copy Markdown
Collaborator

@jrob5756 jrob5756 commented Apr 4, 2026

Problem

Three issues with the v0.1.6 release:

  1. Windows update fails with entrypoint error: uv tool install can't overwrite conductor.exe because it's locked by the running process. Root cause: Path.rename() fails silently on Windows when .exe.old already exists from a previous interrupted update (Windows rename() doesn't overwrite).

  2. Release workflow fails: gh release create fails when the release already exists (e.g. created manually before CI runs).

  3. Missing constraints file: The v0.1.6 release had no constraints.txt artifact because the workflow failed before uploading.

Changes

src/conductor/cli/update.py

  • Extract _rename_windows_exes() helper that targets both shutil.which() result AND ~/.local/bin/conductor.exe (standard uv entrypoint location), deduplicating by resolved path
  • Use Path.replace() instead of Path.rename()replace() overwrites existing .old files from previous interrupted updates
  • Handle partial success: when uv installs the package but fails to copy the entrypoint ("Failed to install entrypoint"), report success with a restart note instead of a scary error

.github/workflows/release.yml

  • Check if release exists before creating; if so, gh release upload --clobber artifacts instead of failing

Release assets

  • Uploaded constraints.txt and constraints.txt.sha256 to the existing v0.1.6 release

Tests

  • Added test_windows_entrypoint_failure_reports_success — verifies partial success handling
  • All existing Windows update tests pass unchanged (58 tests in file, 1801 total)

- Use Path.replace() instead of Path.rename() for Windows exe rename,
  fixing failures when .exe.old exists from a previous interrupted update
- Also target ~/.local/bin/conductor.exe explicitly (the standard uv
  entrypoint location) in addition to shutil.which() result
- Handle partial success: when uv installs the package but fails to copy
  the entrypoint due to file locking, report success with a restart note
  instead of a scary error
- Make release workflow idempotent: if the release already exists, upload
  artifacts to it instead of failing
- Upload constraints.txt to existing v0.1.6 release

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756 jrob5756 merged commit 82b9752 into main Apr 4, 2026
7 checks passed
@jrob5756 jrob5756 deleted the fix/windows-update-and-release branch April 4, 2026 21:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant