52 lines
1.5 KiB
Nix
52 lines
1.5 KiB
Nix
|
{ lib }:
|
||
|
let
|
||
|
# extractLatestVersionFromHtml :: String -> String
|
||
|
extractLatestVersionFromHtml = htmlString:
|
||
|
let
|
||
|
majorMinorPatchGroup = "([0-9]+\\.[0-9]+\\.[0-9]+)";
|
||
|
splittedVersions = builtins.split "href=\"${majorMinorPatchGroup}" htmlString;
|
||
|
stableVersions = builtins.concatLists
|
||
|
(builtins.filter (e: builtins.isList e)
|
||
|
splittedVersions);
|
||
|
in
|
||
|
if stableVersions == [ ]
|
||
|
then abort "Failed to extract versions from html."
|
||
|
else lib.last (builtins.sort builtins.lessThan stableVersions);
|
||
|
|
||
|
# getHtml :: String -> String
|
||
|
getHtml = url:
|
||
|
builtins.readFile (builtins.fetchurl url);
|
||
|
|
||
|
# getLatestStableVersion :: String
|
||
|
getLatestStableVersion =
|
||
|
extractLatestVersionFromHtml
|
||
|
(getHtml "https://download.documentfoundation.org/libreoffice/stable/");
|
||
|
|
||
|
# extractSha256FromHtml :: String -> String
|
||
|
extractSha256FromHtml = htmlString:
|
||
|
let
|
||
|
sha256 = (builtins.match ".*([0-9a-fA-F]{64}).*" htmlString);
|
||
|
in
|
||
|
if sha256 == [ ]
|
||
|
then abort "Failed to extract sha256 from html."
|
||
|
else builtins.head sha256;
|
||
|
|
||
|
# getSha256 :: String -> String
|
||
|
getSha256 = dmgUrl: oldVersion: newVersion:
|
||
|
extractSha256FromHtml (getHtml (getSha256Url dmgUrl oldVersion newVersion));
|
||
|
|
||
|
# getSha256Url :: String -> String -> String -> String
|
||
|
getSha256Url = dmgUrl: oldVersion: newVersion:
|
||
|
(builtins.replaceStrings [ oldVersion ] [ newVersion ] dmgUrl) + ".sha256";
|
||
|
|
||
|
in
|
||
|
{
|
||
|
inherit
|
||
|
extractLatestVersionFromHtml
|
||
|
getHtml
|
||
|
getLatestStableVersion
|
||
|
extractSha256FromHtml
|
||
|
getSha256
|
||
|
getSha256Url;
|
||
|
}
|