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''