bulk versions.json
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"base": "10.0",
|
||||
"release": "20251222",
|
||||
"hash": "sha256-S5i8RBbrPAlsYYavzzhTFanLU3uyLT3OQRpX9S6pPE0="
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"base": "10.0",
|
||||
"release": "20251222",
|
||||
"hash": "sha256-tw1/uX4qZX3cQKyzsss8l+wHKLoJF2/8B+6RUIQt4oQ="
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"base": "10.0",
|
||||
"release": "20251222",
|
||||
"hash": "sha256-1+6nCUc93vVZg3j4oSwuM7DYOZ2bNbLIjbH+8OUOSAQ="
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"base": "10.0",
|
||||
"release": "20251222",
|
||||
"hash": "sha256-W7cC4pi8WED4rOEXYVXIio1tiUNvArzqsTl6xKwy/mY="
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"base": "10",
|
||||
"release": "26",
|
||||
"hash": "sha256-4v/Z0qHs4wtdo9PcnO2qgodQCNHJhLXvx2ZsAoID+ds="
|
||||
}
|
||||
@@ -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}"
|
||||
''
|
||||
|
||||
69
packages/proton-cachyos/version.json
Normal file
69
packages/proton-cachyos/version.json
Normal 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."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user