gnome.updateScript: More Python
This was prompted by the need to capture exit status of `find-latest-version.py` in the next commit. I had to drop `errexit` (if I did not want to result to even worse hacks) but that concealed errors like the following, when I accidentally used an incorrect equals operator in numeric comparison: line 24: ((: 1 = 1 : attempted assignment to non-variable (error token is "= 1 ") Converting the plumbing in `gnome/update.nix` to Python also makes it slightly easier to read. For now, `find-latest-version.py` is still invoked as a separate process (rather than being imported as a Python module), as `update.nix` might be replaced by `genericUpdater` in the future.
This commit is contained in:
parent
511468c36c
commit
68505781e3
1 changed files with 46 additions and 16 deletions
|
@ -1,4 +1,4 @@
|
||||||
{ stdenv, bash, pkgs, lib, writeScript, python3, common-updater-scripts }:
|
{ stdenv, pkgs, lib, writeScript, python3, common-updater-scripts }:
|
||||||
{ packageName, attrPath ? packageName, versionPolicy ? "tagged", freeze ? false }:
|
{ packageName, attrPath ? packageName, versionPolicy ? "tagged", freeze ? false }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -20,24 +20,54 @@ let
|
||||||
else
|
else
|
||||||
throw "“freeze” argument needs to be either a boolean, or a version string.";
|
throw "“freeze” argument needs to be either a boolean, or a version string.";
|
||||||
updateScript = writeScript "gnome-update-script" ''
|
updateScript = writeScript "gnome-update-script" ''
|
||||||
#!${bash}/bin/bash
|
#!${python}/bin/python
|
||||||
set -o errexit
|
import json
|
||||||
attr_path="$1"
|
import os
|
||||||
package_name="$2"
|
import subprocess
|
||||||
package_version="$3"
|
import sys
|
||||||
version_policy="$4"
|
|
||||||
|
|
||||||
flvFlags=("$package_name" "$version_policy" "''${GNOME_UPDATE_STABILITY:-stable}")
|
_, attr_path, package_name, package_version, version_policy, *remaining_args = sys.argv
|
||||||
|
|
||||||
if (( $# >= 5 )); then
|
flv_args = [
|
||||||
upper_bound="$5"
|
package_name,
|
||||||
flvFlags+=("--upper-bound=$upper_bound")
|
version_policy,
|
||||||
fi
|
os.environ.get("GNOME_UPDATE_STABILITY", "stable"),
|
||||||
|
]
|
||||||
|
|
||||||
PATH=${lib.makeBinPath [ common-updater-scripts python ]}
|
match remaining_args:
|
||||||
latest_tag=$(python "${./find-latest-version.py}" "''${flvFlags[@]}")
|
case []:
|
||||||
update-source-version "$attr_path" "$latest_tag"
|
pass
|
||||||
echo '[ { "commitBody": "https://gitlab.gnome.org/GNOME/'$package_name'/-/compare/'$package_version'...'$latest_tag'" } ]'
|
case [upper_bound]:
|
||||||
|
flv_args.append(f"--upper-bound={upper_bound}")
|
||||||
|
case other:
|
||||||
|
print("gnome-update-script: Received too many arguments.", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
latest_tag = subprocess.check_output(
|
||||||
|
[
|
||||||
|
"${python}/bin/python",
|
||||||
|
"${./find-latest-version.py}",
|
||||||
|
*flv_args,
|
||||||
|
],
|
||||||
|
encoding="utf-8",
|
||||||
|
)
|
||||||
|
latest_tag = latest_tag.strip()
|
||||||
|
subprocess.run(
|
||||||
|
[
|
||||||
|
"${common-updater-scripts}/bin/update-source-version",
|
||||||
|
attr_path,
|
||||||
|
latest_tag,
|
||||||
|
],
|
||||||
|
check=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
report = [
|
||||||
|
{
|
||||||
|
"commitBody": f"https://gitlab.gnome.org/GNOME/{package_name}/-/compare/{package_version}...{latest_tag}",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
print(json.dumps(report))
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
name = "gnome-update-script";
|
name = "gnome-update-script";
|
||||||
|
|
Loading…
Reference in a new issue