bulk versions.json

This commit is contained in:
mjallen18
2026-01-21 12:53:13 -06:00
parent 7cc4e8c99e
commit 2b9908e760
52 changed files with 1033 additions and 335 deletions

View File

@@ -1,5 +0,0 @@
{
"base": "10.0",
"release": "20251222",
"hash": "sha256-S5i8RBbrPAlsYYavzzhTFanLU3uyLT3OQRpX9S6pPE0="
}

View File

@@ -1,5 +0,0 @@
{
"base": "10.0",
"release": "20251222",
"hash": "sha256-tw1/uX4qZX3cQKyzsss8l+wHKLoJF2/8B+6RUIQt4oQ="
}

View File

@@ -1,5 +0,0 @@
{
"base": "10.0",
"release": "20251222",
"hash": "sha256-1+6nCUc93vVZg3j4oSwuM7DYOZ2bNbLIjbH+8OUOSAQ="
}

View File

@@ -1,5 +0,0 @@
{
"base": "10.0",
"release": "20251222",
"hash": "sha256-W7cC4pi8WED4rOEXYVXIio1tiUNvArzqsTl6xKwy/mY="
}

View File

@@ -4,24 +4,39 @@
lib,
fetchurl,
fetchzip,
# Required
versionFilename ? "cachyos-v4-version.json",
pkgs,
# Repo metadata
owner ? "CachyOS",
repo ? "proton-cachyos",
# Optional
# Behavior
withUpdateScript ? true,
# Variant selection (null -> use defaultVariant from version.json)
variant ? null,
# Packaging/customization knobs
toolTitle ? null,
toolPattern ? "proton-.*",
tarballPrefix ? "proton-",
tarballSuffix ? "-x86_64_v4.tar.xz",
releasePrefix ? "cachyos-",
releaseSuffix ? "-slr",
version ? lib.trivial.importJSON ./${versionFilename},
releaseVersion ? "${releasePrefix}${version.base}-${version.release}${releaseSuffix}",
homepage ? "https://github.com/${owner}/${repo}",
url ? "${homepage}/releases/download/${releaseVersion}/${tarballPrefix}${releaseVersion}${tarballSuffix}",
}:
let
inherit (lib.trivial) importJSON;
# Load unified version spec and select the desired variant
versionSpec = importJSON ./version.json;
versioning = import ../../lib/versioning.nix { inherit lib pkgs; };
selected = versioning.selectVariant versionSpec variant null;
vars = selected.variables or {};
base = vars.base;
release = vars.release;
# Derived values for the current variant
releaseVersion = "${releasePrefix}${base}-${release}${releaseSuffix}";
homepage = "https://github.com/${owner}/${repo}";
url = "${homepage}/releases/download/${releaseVersion}/${tarballPrefix}${releaseVersion}${tarballSuffix}";
# Choose fetcher based on file type
intake =
if lib.strings.hasSuffix ".zip" url then
{
@@ -36,11 +51,11 @@ let
in
stdenvNoCC.mkDerivation {
name = repo;
version = "${version.base}.${version.release}";
version = "${base}.${release}";
src = intake.fetcher {
inherit url;
inherit (version) hash;
hash = selected.sources.proton.hash;
};
buildCommand = ''
@@ -61,10 +76,11 @@ stdenvNoCC.mkDerivation {
tarballSuffix
releasePrefix
releaseSuffix
versionFilename
owner
repo
;
# Prefer explicit variant, otherwise use defaultVariant from the spec
variant = if variant != null then variant else (versionSpec.defaultVariant or "cachyos");
};
}
else

View File

@@ -1,5 +0,0 @@
{
"base": "10",
"release": "26",
"hash": "sha256-4v/Z0qHs4wtdo9PcnO2qgodQCNHJhLXvx2ZsAoID+ds="
}

View File

@@ -16,9 +16,10 @@
tarballSuffix,
releasePrefix,
releaseSuffix,
versionFilename,
owner,
repo,
# New: which variant to update (defaults to version.json's defaultVariant)
variant ? null,
}:
let
path = lib.makeBinPath [
@@ -38,26 +39,57 @@ writeShellScript "update-${repo}" ''
set -euo pipefail
PATH=${path}
srcJson=pkgs/proton-bin/${versionFilename}
localBase=$(jq -r .base < $srcJson)
localRelease=$(jq -r .release < $srcJson)
repoRoot="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
versionFile="$repoRoot/packages/proton-cachyos/version.json"
latestVer=$(curl 'https://github.com/${owner}/${repo}/releases.atom' | xq -r '.feed.entry[].link."@href"' | grep -Po '(?<=/)${releasePrefix}[^/]+${releaseSuffix}$' | head -n 1)
# Determine variant to update (prefer CLI arg, else defaultVariant in file)
variantEff="${variant:-}"
if [ -z "$variantEff" ]; then
variantEff="$(jq -r '.defaultVariant // empty' "$versionFile")"
fi
if [ -z "$variantEff" ]; then
variantEff="cachyos"
fi
if [ "${releasePrefix}''${localBase}-''${localRelease}${releaseSuffix}" == "$latestVer" ]; then
# Read current values from the unified version.json
localBase="$(jq -r --arg v "$variantEff" '.variants[$v].variables.base' "$versionFile")"
localRelease="$(jq -r --arg v "$variantEff" '.variants[$v].variables.release' "$versionFile")"
localHash="$(jq -r --arg v "$variantEff" '.variants[$v].sources.proton.hash' "$versionFile")"
# Discover latest release tag
latestVer="$(
curl -fsSL "https://github.com/${owner}/${repo}/releases.atom" \
| xq -r '.feed.entry[].link."@href"' \
| grep -Po "(?<=/)${releasePrefix}[^/]+${releaseSuffix}$" \
| head -n 1
)"
if [ "${releasePrefix}''${localBase}-''${localRelease}${releaseSuffix}" = "$latestVer" ]; then
echo "No update needed for variant '$variantEff' (${localBase}.${localRelease})."
exit 0
fi
latestBase=$(echo $latestVer | grep -Po '(?<=^${releasePrefix})[^-]+')
latestRelease=$(echo $latestVer | grep -Po '(?<=-)[^-]+(?=${releaseSuffix}$)')
latestSha256=$(nix-prefetch-url --type sha256 "https://github.com/${owner}/${repo}/releases/download/''${latestVer}/${tarballPrefix}''${latestVer}${tarballSuffix}")
latestHash=$(nix-hash --to-sri --type sha256 $latestSha256)
latestBase="$(echo "$latestVer" | grep -Po "(?<=^${releasePrefix})[^-]+")"
latestRelease="$(echo "$latestVer" | grep -Po "(?<=-)[^-]+(?=${releaseSuffix}$)")"
artifactUrl="https://github.com/${owner}/${repo}/releases/download/''${latestVer}/${tarballPrefix}''${latestVer}${tarballSuffix}"
latestSha256="$(nix-prefetch-url --type sha256 "$artifactUrl")"
latestHash="$(nix-hash --to-sri --type sha256 "$latestSha256")"
# Update the selected variant in version.json
tmp="$(mktemp)"
jq \
--arg latestBase "$latestBase" --arg latestRelease "$latestRelease" --arg latestHash "$latestHash" \
'.base = $latestBase | .release = $latestRelease | .hash = $latestHash' \
"$srcJson" | sponge "$srcJson"
--arg v "$variantEff" \
--arg latestBase "$latestBase" \
--arg latestRelease "$latestRelease" \
--arg latestHash "$latestHash" \
'
.variants[$v].variables.base = $latestBase
| .variants[$v].variables.release = $latestRelease
| .variants[$v].sources.proton.hash = $latestHash
' "$versionFile" > "$tmp"
mv "$tmp" "$versionFile"
git add $srcJson
git commit -m "${repo}: ''${localBase}.''${localRelease} -> ''${latestBase}.''${latestRelease}"
git -C "$repoRoot" add "packages/proton-cachyos/version.json"
git -C "$repoRoot" commit -m "${repo}(${variantEff}): ''${localBase}.''${localRelease} -> ''${latestBase}.''${latestRelease}"
''

View File

@@ -0,0 +1,69 @@
{
"schemaVersion": 1,
"defaultVariant": "cachyos-v4",
"sources": {
"proton": {
"fetcher": "none"
}
},
"variants": {
"cachyos": {
"variables": {
"base": "10.0",
"release": "20251222"
},
"sources": {
"proton": {
"hash": "sha256-W7cC4pi8WED4rOEXYVXIio1tiUNvArzqsTl6xKwy/mY="
}
}
},
"cachyos-v2": {
"variables": {
"base": "10.0",
"release": "20251222"
},
"sources": {
"proton": {
"hash": "sha256-S5i8RBbrPAlsYYavzzhTFanLU3uyLT3OQRpX9S6pPE0="
}
}
},
"cachyos-v3": {
"variables": {
"base": "10.0",
"release": "20251222"
},
"sources": {
"proton": {
"hash": "sha256-tw1/uX4qZX3cQKyzsss8l+wHKLoJF2/8B+6RUIQt4oQ="
}
}
},
"cachyos-v4": {
"variables": {
"base": "10.0",
"release": "20251222"
},
"sources": {
"proton": {
"hash": "sha256-1+6nCUc93vVZg3j4oSwuM7DYOZ2bNbLIjbH+8OUOSAQ="
}
}
},
"ge": {
"variables": {
"base": "10",
"release": "26"
},
"sources": {
"proton": {
"hash": "sha256-4v/Z0qHs4wtdo9PcnO2qgodQCNHJhLXvx2ZsAoID+ds="
}
}
}
},
"notes": {
"consumption": "default.nix currently computes the URL from base/release and suffixes. With this schema, keep using those variables (variant.variables.base/release) and the per-variant proton.hash until migrated to an explicit urlTemplate."
}
}