Skip to content

Add variant field and NoGPL build support#52

Draft
gbaraldi wants to merge 4 commits intoJuliaLang:mainfrom
gbaraldi:add-nogpl-variant
Draft

Add variant field and NoGPL build support#52
gbaraldi wants to merge 4 commits intoJuliaLang:mainfrom
gbaraldi:add-nogpl-variant

Conversation

@gbaraldi
Copy link
Copy Markdown
Member

Summary

  • Add variant field ("default" / "nogpl") to the JSON schema and file metadata, so consumers can distinguish build variants
  • Add NoGPL{T} parametric wrapper type with dispatch methods for generating download URLs matching the julialang-nogpl S3 bucket structure (bin-nogpl/{os}nogpl/{arch}/{major.minor}/julia-{hash}-{tar_os}.{ext})
  • Add get_tag_commits() to resolve version tags to 10-char git commit short hashes via the GitHub tags API (nogpl filenames use commit hashes, not version numbers)
  • Add a second platform loop in main() for nogpl builds covering Linux x64, macOS x64/aarch64, and Windows x64

Test plan

  • All 30 existing + new unit tests pass (julia --project test/runtests.jl)
  • Verify generated versions.json validates against updated schema.json
  • Spot-check a few nogpl download URLs against actual S3 bucket contents

🤖 Generated with Claude Code

gbaraldi and others added 4 commits February 11, 2026 12:43
Add support for cataloging Julia's "nogpl" build variants (builds
without GPL-licensed dependencies) hosted on the julialang-nogpl S3
bucket.

- Add `variant` field ("default"/"nogpl") to schema and file metadata
- Add `NoGPL{T}` parametric wrapper type with dispatch methods for
  URL generation matching the nogpl bucket structure
- Add `get_tag_commits()` to resolve version tags to git commit hashes
  (nogpl filenames use short commit hashes instead of version numbers)
- Add nogpl platform loop in `main()` covering Linux x64, macOS
  x64/aarch64, and Windows x64

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract shared download/hash/metadata logic into `process_download!`
  helper to eliminate ~80 lines of duplication between default and
  nogpl platform loops
- Add .asc signature checking for nogpl builds (the S3 bucket has
  .asc files for nogpl archives)
- Use string(version) as meta dict key to fix compatibility with
  newer JSON.jl which requires explicit key serialization

Verified: output matches upstream versions.json with 0 mismatches
across 2,147 files and 190 versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of adding a variant field to the shared schema, generate
separate versions files per bucket:
- julialang-s3: versions.json (unchanged schema, no variant field)
- julialang-nogpl: versions.v1.json (same schema, separate file)

This keeps existing consumers unaffected. The process_download!
refactor is retained to share download/hash/metadata logic between
main() and main_nogpl().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of adding a variant field to the shared schema, generate
separate versions files per bucket:
- julialang-s3: versions.json (unchanged schema)
- julialang-nogpl: versions.v1.json (same schema, separate file)

Extract process_download! and _build_versions helpers to share
download/hash/metadata logic between main() and main_nogpl().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gbaraldi
Copy link
Copy Markdown
Member Author

@fredrikekre could you take a look?

@DilumAluthge
Copy link
Copy Markdown
Member

Can you update the PR description to reflect the new state of the PR, namely that we have different files for different buckets?

@DilumAluthge
Copy link
Copy Markdown
Member

Thinking more on this, I'm a little worried that it might get unwieldy to have multiple different versions.jsons files for different S3 buckets.

Of course, we can't just add this directly to versions.json because it is a breaking change.

I think we should do what we discussed previously: Start versioning versions.json. E.g. going forward, it will be versions.v2.json, etc. Not versions.json

So then we'll have a single versions.v2.json that covers all S3 buckets. Going forward, in CI, we'll need to build multiple versions.v*.json:

  • versions.json
  • versions.v2.json

Note: The builds don't need to be done from scratch. There should be a single CI job that collects all the info for all Julia versions and all S3 buckets, and then that job can output multiple versions.v*.json files.

@fredrikekre @gbaraldi What do you think?

@DilumAluthge DilumAluthge marked this pull request as draft April 3, 2026 05:30
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.

2 participants