From 3cce255fc1598ce9c7d0c871dbd6dbcd4271e211 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 16 Feb 2022 18:50:02 +0100 Subject: [PATCH 1/4] maintainers/scripts/update.nix: Add experimental support for customizing commit message --- maintainers/scripts/update.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/maintainers/scripts/update.py b/maintainers/scripts/update.py index 06b12a0ee04e..07e0b5c68305 100644 --- a/maintainers/scripts/update.py +++ b/maintainers/scripts/update.py @@ -88,6 +88,10 @@ async def commit_changes(name: str, merge_lock: asyncio.Lock, worktree: str, bra async with merge_lock: await check_subprocess('git', 'add', *change['files'], cwd=worktree) commit_message = '{attrPath}: {oldVersion} → {newVersion}'.format(**change) + if 'commitMessage' in change: + commit_message = change['commitMessage'] + elif 'commitBody' in change: + commit_message = commit_message + '\n\n' + change['commitBody'] await check_subprocess('git', 'commit', '--quiet', '-m', commit_message, cwd=worktree) await check_subprocess('git', 'cherry-pick', branch) From 5b8320d446e18b4fd6faefa787944d22513ac1ee Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 16 Feb 2022 18:52:36 +0100 Subject: [PATCH 2/4] gnome.updateScript: Use experimental support for custom commit messages --- maintainers/scripts/update.nix | 2 +- pkgs/desktops/gnome/update.nix | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/maintainers/scripts/update.nix b/maintainers/scripts/update.nix index d881d68301ba..1a2f06c73a2c 100755 --- a/maintainers/scripts/update.nix +++ b/maintainers/scripts/update.nix @@ -147,7 +147,7 @@ let to run update script for specific package, or - % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: builtins.isList pkg.updateScript && builtins.length pkg.updateScript >= 1 && (let script = builtins.head pkg.updateScript; in builtins.isAttrs script && script.name == "gnome-update-script"))' + % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: pkg.updateScript.name or null == "gnome-update-script")' to run update script for all packages matching given predicate, or diff --git a/pkgs/desktops/gnome/update.nix b/pkgs/desktops/gnome/update.nix index 928eac45160a..8335bb642fb1 100644 --- a/pkgs/desktops/gnome/update.nix +++ b/pkgs/desktops/gnome/update.nix @@ -3,10 +3,10 @@ let python = python3.withPackages (p: [ p.requests p.libversion ]); + package = lib.attrByPath (lib.splitString "." attrPath) (throw "Cannot find attribute ‘${attrPath}’.") pkgs; + packageVersion = lib.getVersion package; upperBoundFlag = let - package = lib.attrByPath (lib.splitString "." attrPath) (throw "Cannot find attribute ‘${attrPath}’.") pkgs; - packageVersion = lib.getVersion package; versionComponents = lib.versions.splitVersion packageVersion; minorVersion = lib.versions.minor packageVersion; minorAvailable = builtins.length versionComponents > 1 && builtins.match "[0-9]+" minorVersion != null; @@ -16,11 +16,19 @@ let updateScript = writeScript "gnome-update-script" '' #!${stdenv.shell} set -o errexit - package_name="$1" - attr_path="$2" - version_policy="$3" + attr_path="$1" + package_name="$2" + package_version="$3" + version_policy="$4" PATH=${lib.makeBinPath [ common-updater-scripts python ]} latest_tag=$(python "${./find-latest-version.py}" "$package_name" "$version_policy" "stable" ${upperBoundFlag}) update-source-version "$attr_path" "$latest_tag" + echo '[ { "commitBody": "https://gitlab.gnome.org/GNOME/'$package_name'/-/compare/'$package_version'...'$latest_tag'" } ]' ''; -in [ updateScript packageName attrPath versionPolicy ] +in { + name = "gnome-update-script"; + command = [ updateScript attrPath packageName packageVersion versionPolicy ]; + supportedFeatures = [ + "commit" + ]; +} From 86a0a335dc5fdf25c84871499c7297c8f35653e2 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 16 Feb 2022 19:13:24 +0100 Subject: [PATCH 3/4] gnome.updateScript: avoid rebuilding the derivation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, a separate derivation was needed for each upper bound. Since we are using bash specific features, let’s declare it explicitly. --- pkgs/desktops/gnome/update.nix | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pkgs/desktops/gnome/update.nix b/pkgs/desktops/gnome/update.nix index 8335bb642fb1..0b19f761a900 100644 --- a/pkgs/desktops/gnome/update.nix +++ b/pkgs/desktops/gnome/update.nix @@ -1,33 +1,41 @@ -{ stdenv, pkgs, lib, writeScript, python3, common-updater-scripts }: +{ stdenv, bash, pkgs, lib, writeScript, python3, common-updater-scripts }: { packageName, attrPath ? packageName, versionPolicy ? "tagged", freeze ? false }: let python = python3.withPackages (p: [ p.requests p.libversion ]); package = lib.attrByPath (lib.splitString "." attrPath) (throw "Cannot find attribute ‘${attrPath}’.") pkgs; packageVersion = lib.getVersion package; - upperBoundFlag = + upperBound = let versionComponents = lib.versions.splitVersion packageVersion; minorVersion = lib.versions.minor packageVersion; minorAvailable = builtins.length versionComponents > 1 && builtins.match "[0-9]+" minorVersion != null; nextMinor = builtins.fromJSON minorVersion + 1; upperBound = "${lib.versions.major packageVersion}.${builtins.toString nextMinor}"; - in lib.optionalString (freeze && minorAvailable) ''--upper-bound="${upperBound}"''; + in lib.optionals (freeze && minorAvailable) [ upperBound ]; updateScript = writeScript "gnome-update-script" '' - #!${stdenv.shell} + #!${bash}/bin/bash set -o errexit attr_path="$1" package_name="$2" package_version="$3" version_policy="$4" + + flvFlags=("$package_name" "$version_policy" "stable") + + if (( $# >= 5 )); then + upper_bound="$5" + flvFlags+=("--upper-bound=$upper_bound") + fi + PATH=${lib.makeBinPath [ common-updater-scripts python ]} - latest_tag=$(python "${./find-latest-version.py}" "$package_name" "$version_policy" "stable" ${upperBoundFlag}) + 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'" } ]' ''; in { name = "gnome-update-script"; - command = [ updateScript attrPath packageName packageVersion versionPolicy ]; + command = [ updateScript attrPath packageName packageVersion versionPolicy ] ++ upperBound; supportedFeatures = [ "commit" ]; From 00ee56846b20c3d826ff659eaf4150d4484f9410 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 16 Feb 2022 19:27:41 +0100 Subject: [PATCH 4/4] gnome.updateScript: allow updating to unstable releases It is now possible to update to GNOME pre-release by simply running: GNOME_UPDATE_STABILITY=unstable nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: pkg.updateScript.name or null == "gnome-update-script")' --argstr keep-going true --argstr commit true --- pkgs/desktops/gnome/update.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/desktops/gnome/update.nix b/pkgs/desktops/gnome/update.nix index 0b19f761a900..f5db71174ad8 100644 --- a/pkgs/desktops/gnome/update.nix +++ b/pkgs/desktops/gnome/update.nix @@ -21,7 +21,7 @@ let package_version="$3" version_policy="$4" - flvFlags=("$package_name" "$version_policy" "stable") + flvFlags=("$package_name" "$version_policy" "''${GNOME_UPDATE_STABILITY:-stable}") if (( $# >= 5 )); then upper_bound="$5"