Skip to content

Commit

Permalink
gnome3.updateScript: Add freeze functionality
Browse files Browse the repository at this point in the history
On stable releases, we will want to change the freeze parameter in pkgs/desktops/gnome-3/update.nix
to true to limit the gnome update script to only bump patch versions.
  • Loading branch information
jtojnar committed Apr 24, 2020
1 parent df3e072 commit 974f11c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
14 changes: 11 additions & 3 deletions pkgs/desktops/gnome-3/find-latest-version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import argparse
import math
import json
import requests
import sys
Expand Down Expand Up @@ -27,22 +28,29 @@ def no_policy(version, selected):
'none': no_policy,
}

def make_version_policy(version_predicate, selected):
return lambda version: version_predicate(version, selected)
def make_version_policy(version_predicate, selected, upper_bound):
if not upper_bound:
upper_bound = [math.inf, math.inf]
else:
upper_bound = version_to_list(upper_bound)

return lambda version: version_predicate(version, selected) and version_to_list(version) < upper_bound

parser = argparse.ArgumentParser(description='Find latest version for a GNOME package by crawling their release server.')
parser.add_argument('package-name', help='Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.')
parser.add_argument('version-policy', help='Policy determining which versions are considered stable. For most GNOME packages, odd minor versions are unstable but there are exceptions.', choices=version_policies.keys(), nargs='?', default='odd-unstable')
parser.add_argument('requested-release', help='Most of the time, we will want to update to stable version but sometimes it is useful to test.', choices=['stable', 'unstable'], nargs='?', default='stable')
parser.add_argument('--upper-bound', dest='upper-bound', help='Only look for versions older than this one (useful for pinning dependencies).')


if __name__ == '__main__':
args = parser.parse_args()

package_name = getattr(args, 'package-name')
requested_release = getattr(args, 'requested-release')
upper_bound = getattr(args, 'upper-bound')
version_predicate = version_policies[getattr(args, 'version-policy')]
version_policy = make_version_policy(version_predicate, requested_release)
version_policy = make_version_policy(version_predicate, requested_release, upper_bound)

# The structure of cache.json: https://gitlab.gnome.org/Infrastructure/sysadmin-bin/blob/master/ftpadmin#L762
cache = json.loads(requests.get('https://ftp.gnome.org/pub/GNOME/sources/{}/cache.json'.format(package_name)).text)
Expand Down
16 changes: 13 additions & 3 deletions pkgs/desktops/gnome-3/update.nix
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
{ stdenv, lib, writeScript, python3, common-updater-scripts }:
{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable" }:
{ stdenv, pkgs, lib, writeScript, python3, common-updater-scripts }:
{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable", freeze ? false }:

let
python = python3.withPackages (p: [ p.requests ]);
upperBoundFlag =
let
package = lib.getAttrFromPath (lib.splitString "." 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;
nextMinor = builtins.fromJSON minorVersion + 1;
upperBound = "${lib.versions.major packageVersion}.${builtins.toString nextMinor}";
in lib.optionalString (minorAvailable && freeze) ''--upper-bound="${upperBound}"'';
updateScript = writeScript "gnome-update-script" ''
#!${stdenv.shell}
set -o errexit
package_name="$1"
attr_path="$2"
version_policy="$3"
PATH=${lib.makeBinPath [ common-updater-scripts python ]}
latest_tag=$(python "${./find-latest-version.py}" "$package_name" "$version_policy" "stable")
latest_tag=$(python "${./find-latest-version.py}" "$package_name" "$version_policy" "stable" ${upperBoundFlag})
update-source-version "$attr_path" "$latest_tag"
'';
in [ updateScript packageName attrPath versionPolicy ]

3 comments on commit 974f11c

@vcunat
Copy link
Member

@vcunat vcunat commented on 974f11c Apr 25, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This causes issues for the tarball job, as apparently multiple packages don't call this with correct attrPath. Example: https://hydra.nixos.org/build/117588120/nixlog/1/tail

@jtojnar: I wonder, perhaps we don't want block on these, so instead let's only throw a message when the attrPath doesn't exist?

@jtojnar
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, should be fixed in 03c0ab3 and f544c29.

@vcunat
Copy link
Member

@vcunat vcunat commented on 974f11c Apr 25, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great. I confirm the build is fixed now.

Please sign in to comment.