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 }:
|
||||
|
||||
let
|
||||
|
@ -20,24 +20,54 @@ let
|
|||
else
|
||||
throw "“freeze” argument needs to be either a boolean, or a version string.";
|
||||
updateScript = writeScript "gnome-update-script" ''
|
||||
#!${bash}/bin/bash
|
||||
set -o errexit
|
||||
attr_path="$1"
|
||||
package_name="$2"
|
||||
package_version="$3"
|
||||
version_policy="$4"
|
||||
#!${python}/bin/python
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
flvFlags=("$package_name" "$version_policy" "''${GNOME_UPDATE_STABILITY:-stable}")
|
||||
_, attr_path, package_name, package_version, version_policy, *remaining_args = sys.argv
|
||||
|
||||
if (( $# >= 5 )); then
|
||||
upper_bound="$5"
|
||||
flvFlags+=("--upper-bound=$upper_bound")
|
||||
fi
|
||||
flv_args = [
|
||||
package_name,
|
||||
version_policy,
|
||||
os.environ.get("GNOME_UPDATE_STABILITY", "stable"),
|
||||
]
|
||||
|
||||
PATH=${lib.makeBinPath [ common-updater-scripts python ]}
|
||||
latest_tag=$(python "${./find-latest-version.py}" "''${flvFlags[@]}")
|
||||
update-source-version "$attr_path" "$latest_tag"
|
||||
echo '[ { "commitBody": "https://gitlab.gnome.org/GNOME/'$package_name'/-/compare/'$package_version'...'$latest_tag'" } ]'
|
||||
match remaining_args:
|
||||
case []:
|
||||
pass
|
||||
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 {
|
||||
name = "gnome-update-script";
|
||||
|
|
Loading…
Reference in a new issue