Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 52 lines 1.6 kB view raw
1{ lib }: 2let 3 # extractLatestVersionFromHtml :: String -> String 4 extractLatestVersionFromHtml = 5 htmlString: 6 let 7 majorMinorPatchGroup = "([0-9]+\\.[0-9]+\\.[0-9]+)"; 8 splittedVersions = builtins.split "href=\"${majorMinorPatchGroup}" htmlString; 9 stableVersions = builtins.concatLists (builtins.filter (e: builtins.isList e) splittedVersions); 10 in 11 if stableVersions == [ ] then 12 abort "Failed to extract versions from html." 13 else 14 lib.last (builtins.sort builtins.lessThan stableVersions); 15 16 # getHtml :: String -> String 17 getHtml = url: builtins.readFile (builtins.fetchurl url); 18 19 # getLatestStableVersion :: String 20 getLatestStableVersion = extractLatestVersionFromHtml ( 21 getHtml "https://download.documentfoundation.org/libreoffice/stable/" 22 ); 23 24 # extractSha256FromHtml :: String -> String 25 extractSha256FromHtml = 26 htmlString: 27 let 28 sha256 = (builtins.match ".*([0-9a-fA-F]{64}).*" htmlString); 29 in 30 if sha256 == [ ] then abort "Failed to extract sha256 from html." else builtins.head sha256; 31 32 # getSha256 :: String -> String 33 getSha256 = 34 dmgUrl: oldVersion: newVersion: 35 extractSha256FromHtml (getHtml (getSha256Url dmgUrl oldVersion newVersion)); 36 37 # getSha256Url :: String -> String -> String -> String 38 getSha256Url = 39 dmgUrl: oldVersion: newVersion: 40 (builtins.replaceStrings [ oldVersion ] [ newVersion ] dmgUrl) + ".sha256"; 41 42in 43{ 44 inherit 45 extractLatestVersionFromHtml 46 getHtml 47 getLatestStableVersion 48 extractSha256FromHtml 49 getSha256 50 getSha256Url 51 ; 52}