Skip to content

Conversation

@IanButterworth
Copy link
Contributor

@IanButterworth IanButterworth commented Oct 31, 2025

What are you trying to accomplish?

This PR:

  • Adds support for workspaces. Workspaces are a new feature in julia where multiple project files can share a common manifest, meaning that the project and manifest may not be in the same dir https://pkgdocs.julialang.org/v1/toml-files/#The-%5Bworkspace%5D-section
  • Checked-in manifests are relatively uncommon in julia, but with CompatHelper it doesn't support updating the manifest. This does and now warns the user in the PR via a notice if the relevant manifest could not be updated (implementing this required adding the ability to set notices from file_updater) i.e. for a workspace subpackage update where another subpackage doesn't have its compat updated (usually you'd group them together to avoid this..)

Warning

The Julia package manager failed to update the new dependency versions in /WorkspacePackage.jl/Manifest.toml:

Pkg resolver error: empty intersection between JSON@1.2.0 and project compatibility 0.21
  • Various fixes and tests for project and manifest handling edge cases
  • Adds some missing specs, and removes some dead code.

Anything you want to highlight for special attention from reviewers?

How will you know you've accomplished your goal?

Analysis of results.yml All 5 packages behave exactly as expected:

1. BasicPackage

  • Files updated: Project.toml only (1 file)
  • Manifest behavior: ✅ No manifest created (none existed in repo)
  • Notice: None (no manifest to update)

2. ManifestPackage

  • Files updated: Project.toml + Manifest.toml (2 files)
  • Manifest behavior: ✅ Existing Manifest.toml successfully updated
  • Notice: None (manifest update succeeded)

3. VersionedManifestPackage

  • Files updated: Project.toml + Manifest-v1.12.toml (2 files)
  • Manifest behavior: ✅ Existing Manifest-v1.12.toml successfully updated
  • Notice: None (manifest update succeeded)

4. SubPackageA

  • Files updated: Project.toml only (1 file)
  • Manifest behavior: ✅ Shared ../Manifest.toml NOT updated (conflicting sibling constraints)
  • Notice: ✅ WARNING shown with absolute path: Manifest.toml
    > [!WARNING]
    > The Julia package manager failed to update the new dependency versions in 
    > `/WorkspacePackage.jl/Manifest.toml`:
    > 
    > ```
    > Pkg resolver error: empty intersection between JSON@1.2.0 and project 
    > compatibility 0.21
    > ```
    

5. SubPackageB

  • Files updated: Project.toml only (1 file)
  • Manifest behavior: ✅ Shared ../Manifest.toml NOT updated (conflicting sibling constraints)
  • Notice: ✅ WARNING shown with absolute path: Manifest.toml
    > [!WARNING]
    > The Julia package manager failed to update the new dependency versions in 
    > `/WorkspacePackage.jl/Manifest.toml`:
    > 
    > ```
    > Pkg resolver error: empty intersection between JSON@1.2.0 and project 
    > compatibility 0.21
    > ```
    

Key Validations

No manifests created where they didn't exist - BasicPackage correctly has only Project.toml updated

Existing manifests were updated - ManifestPackage and VersionedManifestPackage both successfully updated their respective manifest files

Workspace packages show proper notices - Both SubPackageA and SubPackageB display WARNING notices when manifest update fails

Absolute paths in notices - User-facing messages show clear Manifest.toml instead of confusing ../Manifest.toml

Architecture is working - The simplified single-temp-directory approach allows Julia's Pkg to naturally discover workspace siblings and generate appropriate error messages

Checklist

  • I have run the complete test suite to ensure all tests and linters pass.
  • I have thoroughly tested my code changes to ensure they work as expected, including adding additional tests for new functionality.
  • I have written clear and descriptive commit messages.
  • I have provided a detailed description of the changes in the pull request, including the problem it addresses, how it fixes the problem, and any relevant details about the implementation.
  • I have ensured that the code is well-documented and easy to understand.
@IanButterworth IanButterworth marked this pull request as ready for review October 31, 2025 17:59
@IanButterworth IanButterworth requested a review from a team as a code owner October 31, 2025 18:00
Copy link
Contributor

@kbukum1 kbukum1 left a comment

Choose a reason for hiding this comment

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

We need to remove the following temporary dependabot yaml test file before approval.

julia/Julia-DependabotTest.yaml

@IanButterworth IanButterworth force-pushed the ib/julia4 branch 7 times, most recently from 663ab20 to ae34f88 Compare November 2, 2025 03:39
@KristofferC
Copy link

I looked at the code and it seems well tested and made sense to me. I only had two small comments that I posted inline that are not super high priority (fixing the julia compat is easy though and should probably be done).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants