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