Generate nightlies.json: the nightly channels and their (variant) files - #107
Generate nightlies.json: the nightly channels and their (variant) files#107maleadt wants to merge 2 commits into
Conversation
versions.json describes immutable release artifacts, so the in-development builds have no machine-readable listing: juliaup, setup-julia and the website each hardcode the `julia-latest-*` URL layout, and a new platform or build variant has to be added to every one of them. Add `VersionsJSONUtil.nightlies`, which writes nightlies.json next to versions.json: the `nightly` and `x.y-nightly` channels (in juliaup's vocabulary) with, per channel, the files that currently exist, described with the versions.json keys minus everything content-specific (version, size, hashes; the signature is referenced by `asc-url`), since every URL is overwritten after each build. Build variants published under julia-buildkite's `bin/<os><variant>/` layout (currently the PGO+LTO+BOLT `opt` build and the `assert` build) are listed next to the standard build with a `variants` key, which is the shape intended for variants of releases in versions.json later. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@topolarity This does not list the nogpl builds, since those are uploaded to their own bucket. Do you know why that is? Wouldn't it be cleaner to have a Also, the nogpl bucket doesn't appear to have a lifetime configured, so every nogpl nightly since 2022-11 is still there (1000+ objects under linuxnogpl/x86_64 alone). |
|
My plan is to add |
Follow the shape proposed for variants of releases in versions.json: each channel has `files` with the standard builds only, plus a sibling `variants` list (absent when empty) whose entries carry the same keys and a singular `variant` name. Consumers picking a file from `files` by platform thus never see a variant by accident, and the same model serves both files. Variants now map to a base URL, which adds the `nogpl` build from the julialang-nogpl bucket next to `opt` and `assert`. Run the workflow daily to refresh nightlies.json: the set of channels changes with release branches, not releases. Scheduled runs skip the full versions.json test and only deploy nightlies.json. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
OK, I've switched to your proposed design.
Generated output today: five channels ( "nightly": {
"files": [ { "triplet": "x86_64-linux-gnu", "os": "linux", "arch": "x86_64", "kind": "archive", "extension": "tar.gz",
"url": "https://julialangnightlies-s3.julialang.org/bin/linux/x86_64/julia-latest-linux-x86_64.tar.gz",
"asc-url": "https://julialangnightlies-s3.julialang.org/bin/linux/x86_64/julia-latest-linux-x86_64.tar.gz.asc" }, ... ],
"variants": [ { "variant": "opt", "triplet": "x86_64-linux-gnu", ..., "url": "https://julialangnightlies-s3.julialang.org/bin/linuxopt/x86_64/julia-latest-linuxopt-x86_64.tar.gz" },
{ "variant": "nogpl", "triplet": "x86_64-linux-gnu", ..., "url": "https://julialang-nogpl.s3.amazonaws.com/bin-nogpl/linuxnogpl/x86_64/julia-latest-linuxnogpl-x86_64.tar.gz" }, ... ]
}I went with a single variant string rather than a list since julia-buildkite only ever appends one suffix to the OS name. |
versions.json describes immutable release artifacts, so the in-development builds have no machine-readable listing: juliaup, setup-julia and the website each hardcode the
julia-latest-*URL layout, and a new platform or build variant has to be added to every one of them.Add
VersionsJSONUtil.nightlies, which writes nightlies.json next to versions.json: thenightlyandx.y-nightlychannels (in juliaup's vocabulary) with, per channel, the files that currently exist, described with the versions.json keys minus everything content-specific (version, size, hashes; the signature is referenced byasc-url), since every URL is overwritten after each build. Build variants published under julia-buildkite'sbin/<os><variant>/layout (currently the PGO+LTO+BOLToptbuild and theassertbuild) are listed next to the standard build with avariantskey, which is the shape intended for variants of releases in versions.json later.This is one step towards JuliaLang/juliaup#1419, so cc @topolarity. I decided against changing the existing versions.json because it has a fixed schema that requires size/hashes, and this is a good way to experiment with encoding variants before rolling this out to the main database once we have releases with variants.
The generated JSON (abbreviated):
{ "nightly": { "files": [ { "arch": "x86_64", "os": "linux", "triplet": "x86_64-linux-gnu", "kind": "archive", "extension": "tar.gz", "url": "https://julialangnightlies-s3.julialang.org/bin/linux/x86_64/julia-latest-linux-x86_64.tar.gz", "asc-url": "https://julialangnightlies-s3.julialang.org/bin/linux/x86_64/julia-latest-linux-x86_64.tar.gz.asc" }, { "arch": "i686", "os": "linux", "triplet": "i686-linux-gnu", "kind": "archive", "extension": "tar.gz", "url": ".../bin/linux/i686/julia-latest-linux-i686.tar.gz", "asc-url": ".../julia-latest-linux-i686.tar.gz.asc" }, { "arch": "aarch64", "os": "linux", "triplet": "aarch64-linux-gnu", "kind": "archive", "extension": "tar.gz", "url": ".../bin/linux/aarch64/julia-latest-linux-aarch64.tar.gz", "asc-url": ".../julia-latest-linux-aarch64.tar.gz.asc" }, { "arch": "x86_64", "os": "mac", "triplet": "x86_64-apple-darwin14", "kind": "archive", "extension": "dmg", "url": ".../bin/macos/x86_64/julia-latest-macos-x86_64.dmg" }, { "arch": "aarch64", "os": "mac", "triplet": "aarch64-apple-darwin14", "kind": "archive", "extension": "dmg", "url": ".../bin/macos/aarch64/julia-latest-macos-aarch64.dmg" }, { "arch": "x86_64", "os": "mac", "triplet": "x86_64-apple-darwin14", "kind": "archive", "extension": "tar.gz", "url": ".../bin/macos/x86_64/julia-latest-macos-x86_64.tar.gz", "asc-url": ".../julia-latest-macos-x86_64.tar.gz.asc" }, { "arch": "aarch64", "os": "mac", "triplet": "aarch64-apple-darwin14", "kind": "archive", "extension": "tar.gz", "url": ".../bin/macos/aarch64/julia-latest-macos-aarch64.tar.gz", "asc-url": ".../julia-latest-macos-aarch64.tar.gz.asc" }, { "arch": "x86_64", "os": "winnt", "triplet": "x86_64-w64-mingw32", "kind": "installer", "extension": "exe", "url": ".../bin/winnt/x64/julia-latest-win64.exe" }, { "arch": "i686", "os": "winnt", "triplet": "i686-w64-mingw32", "kind": "installer", "extension": "exe", "url": ".../bin/winnt/x86/julia-latest-win32.exe" }, { "arch": "x86_64", "os": "winnt", "triplet": "x86_64-w64-mingw32", "kind": "archive", "extension": "zip", "url": ".../bin/winnt/x64/julia-latest-win64.zip" }, { "arch": "i686", "os": "winnt", "triplet": "i686-w64-mingw32", "kind": "archive", "extension": "zip", "url": ".../bin/winnt/x86/julia-latest-win32.zip" }, { "arch": "x86_64", "os": "winnt", "triplet": "x86_64-w64-mingw32", "kind": "archive", "extension": "tar.gz", "url": ".../bin/winnt/x64/julia-latest-win64.tar.gz", "asc-url": ".../julia-latest-win64.tar.gz.asc" }, { "arch": "i686", "os": "winnt", "triplet": "i686-w64-mingw32", "kind": "archive", "extension": "tar.gz", "url": ".../bin/winnt/x86/julia-latest-win32.tar.gz", "asc-url": ".../julia-latest-win32.tar.gz.asc" }, { "arch": "x86_64", "os": "freebsd", "triplet": "x86_64-unknown-freebsd11.1", "kind": "archive", "extension": "tar.gz", "url": ".../bin/freebsd/x86_64/julia-latest-freebsd-x86_64.tar.gz", "asc-url": ".../julia-latest-freebsd-x86_64.tar.gz.asc" }, { "arch": "x86_64", "os": "linux", "triplet": "x86_64-linux-gnu", "kind": "archive", "extension": "tar.gz", "url": "https://julialangnightlies-s3.julialang.org/bin/linuxopt/x86_64/julia-latest-linuxopt-x86_64.tar.gz", "asc-url": "https://julialangnightlies-s3.julialang.org/bin/linuxopt/x86_64/julia-latest-linuxopt-x86_64.tar.gz.asc", "variants": ["opt"] }, { "arch": "x86_64", "os": "linux", "triplet": "x86_64-linux-gnu", "kind": "archive", "extension": "tar.gz", "url": "https://julialangnightlies-s3.julialang.org/bin/linuxassert/x86_64/julia-latest-linuxassert-x86_64.tar.gz", "asc-url": "https://julialangnightlies-s3.julialang.org/bin/linuxassert/x86_64/julia-latest-linuxassert-x86_64.tar.gz.asc", "variants": ["assert"] } ] }, "1.14-nightly": { "files": [ /* same 14 standard files under bin/<os>/<arch>/1.14/..., plus the opt and assert variants */ ] }, "1.13-nightly": { "files": [ /* 14 standard files under .../1.13/ — no variants (opt/assert are only built on master) */ ] }, "1.12-nightly": { "files": [ /* 14 standard files under .../1.12/ */ ] }, "1.10-nightly": { "files": [ /* 14 standard files under .../1.10/ */ ] } }