Skip to content

fix: Windows update entrypoint locking and idempotent releases - #73

Merged
Jason Robert (jrob5756) merged 1 commit into
mainfrom
fix/windows-update-and-release
Apr 4, 2026
Merged

fix: Windows update entrypoint locking and idempotent releases#73
Jason Robert (jrob5756) merged 1 commit into
mainfrom
fix/windows-update-and-release

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

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
Jason Robert (jrob5756) merged commit 82b9752 into mainApr 4, 2026
7 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/windows-update-and-release branch April 4, 2026 21:38
Sign up for freeto 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

@jrob5756