Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 pname, 3 writeScript, 4 xidel, 5 coreutils, 6 gnused, 7 gnugrep, 8 curl, 9 gnupg, 10 runtimeShell, 11 baseName ? "firefox", 12 basePath ? "pkgs/applications/networking/browsers/firefox-bin", 13 baseUrl, 14 versionSuffix ? "", 15}: 16 17writeScript "update-${pname}" '' 18 #!${runtimeShell} 19 PATH=${coreutils}/bin:${gnused}/bin:${gnugrep}/bin:${xidel}/bin:${curl}/bin:${gnupg}/bin 20 set -eux 21 pushd ${basePath} 22 23 HOME=`mktemp -d` 24 export GNUPGHOME=`mktemp -d` 25 26 curl https://keys.openpgp.org/vks/v1/by-fingerprint/09BEED63F3462A2DFFAB3B875ECB6497C1A20256 | gpg --import - 27 28 tmpfile=`mktemp` 29 url=${baseUrl} 30 31 # retriving latest released version 32 # - extracts all links from the $url 33 # - removes . and .. 34 # - this line remove everything not starting with a number 35 # - this line sorts everything with semver in mind 36 # - we remove lines that are mentioning funnelcake 37 # - this line removes beta version if we are looking for final release 38 # versions or removes release versions if we are looking for beta 39 # versions 40 # - this line pick up latest release 41 version=`xidel -s $url --extract "//a" | \ 42 sed s"/.$//" | \ 43 grep "^[0-9]" | \ 44 sort --version-sort | \ 45 grep -v "funnelcake" | \ 46 grep -e "\([[:digit:]]\|[[:digit:]][[:digit:]]\)${versionSuffix}$" | grep -v "b" | \ 47 tail -1` 48 49 curl --silent -o $HOME/shasums "$url$version/SHA256SUMS" 50 curl --silent -o $HOME/shasums.asc "$url$version/SHA256SUMS.asc" 51 gpgv --keyring=$GNUPGHOME/pubring.kbx $HOME/shasums.asc $HOME/shasums 52 53 # this is a list of sha256 and tarballs for both arches 54 # Upstream files contains python repr strings like b'somehash', hence the sed dance 55 shasums=`cat $HOME/shasums | sed -E s/"b'([a-f0-9]{64})'?(.*)"/'\1\2'/ | grep '\.\(tar\.[a-z0-9]\+\|dmg\)$' | grep -v mac-EME-free` 56 57 cat > $tmpfile <<EOF 58 { 59 version = "$version"; 60 sources = [ 61 EOF 62 for arch in linux-x86_64 linux-i686 linux-aarch64 mac; do 63 # retriving a list of all tarballs for each arch 64 # - only select tarballs for current arch 65 # - only select tarballs for current version 66 # - rename space with colon so that for loop doesnt 67 # - inteprets sha and path as 2 lines 68 IFS=$'\n' 69 for line in `echo "$shasums" | \ 70 grep $arch | \ 71 grep -i "${baseName}.$version"'\.\(tar\.[a-z0-9]\+\|dmg\)$' | \ 72 sed "s/ /:/ ; s/ /:/"`; do 73 # create an entry for every locale 74 cat >> $tmpfile <<EOF 75 { 76 url = "$url$version/`echo $line | cut -d":" -f3 | sed "s/ /%20/"`"; 77 locale = "`echo $line | cut -d":" -f3 | sed "s/$arch\///" | sed "s/\/.*//"`"; 78 arch = "$arch"; 79 sha256 = "`echo $line | cut -d":" -f1`"; 80 } 81 EOF 82 done 83 done 84 cat >> $tmpfile <<EOF 85 ]; 86 } 87 EOF 88 89 mv $tmpfile release${if versionSuffix == "" then "" else "_${versionSuffix}"}_sources.nix 90 91 popd 92''