core/lib/versions.nix

73 lines
1.4 KiB
Nix
Raw Normal View History

2024-06-30 08:16:52 +00:00
# Version string functions.
2024-05-01 22:14:04 +00:00
{ lib }:
rec {
2024-06-30 08:16:52 +00:00
/*
Break a version string into its component parts.
2024-05-01 22:14:04 +00:00
2024-06-30 08:16:52 +00:00
Example:
splitVersion "1.2.3"
=> ["1" "2" "3"]
2024-05-01 22:14:04 +00:00
*/
splitVersion = builtins.splitVersion;
2024-06-30 08:16:52 +00:00
/*
Get the major version string from a string.
2024-05-01 22:14:04 +00:00
Example:
major "1.2.3"
=> "1"
*/
major = v: builtins.elemAt (splitVersion v) 0;
2024-06-30 08:16:52 +00:00
/*
Get the minor version string from a string.
2024-05-01 22:14:04 +00:00
Example:
minor "1.2.3"
=> "2"
*/
minor = v: builtins.elemAt (splitVersion v) 1;
2024-06-30 08:16:52 +00:00
/*
Get the patch version string from a string.
2024-05-01 22:14:04 +00:00
Example:
patch "1.2.3"
=> "3"
*/
patch = v: builtins.elemAt (splitVersion v) 2;
2024-06-30 08:16:52 +00:00
/*
Get string of the first two parts (major and minor)
of a version string.
2024-05-01 22:14:04 +00:00
2024-06-30 08:16:52 +00:00
Example:
majorMinor "1.2.3"
=> "1.2"
2024-05-01 22:14:04 +00:00
*/
2024-06-30 08:16:52 +00:00
majorMinor = v: builtins.concatStringsSep "." (lib.take 2 (splitVersion v));
2024-05-01 22:14:04 +00:00
2024-06-30 08:16:52 +00:00
/*
Pad a version string with zeros to match the given number of components.
2024-05-01 22:14:04 +00:00
2024-06-30 08:16:52 +00:00
Example:
pad 3 "1.2"
=> "1.2.0"
pad 3 "1.3-rc1"
=> "1.3.0-rc1"
pad 3 "1.2.3.4"
=> "1.2.3"
2024-05-01 22:14:04 +00:00
*/
2024-06-30 08:16:52 +00:00
pad =
n: version:
let
numericVersion = lib.head (lib.splitString "-" version);
versionSuffix = lib.removePrefix numericVersion version;
in
lib.concatStringsSep "." (lib.take n (lib.splitVersion numericVersion ++ lib.genList (_: "0") n))
+ versionSuffix;
2024-05-01 22:14:04 +00:00
}