]> git.decadent.org.uk Git - dak.git/blob - wanna-build/trigger.daily
abort curl if rate falls below 5bytes/sec
[dak.git] / wanna-build / trigger.daily
1 #!/bin/sh
2 #
3 # Updates wanna-build databases after the archive maintenance
4 # finishes
5 #
6 # Files:
7 #     Sources-* == upstream fetched file
8 #     Sources.* == uncompressed, concat'd version
9 PATH="/bin:/usr/bin"
10 #testing must be before unstable so late upld don't build for testing needlessly
11 #DISTS="stable stable-security testing testing-security unstable"
12 DISTS="stable stable-security testing unstable"
13 STATS_DISTS="unstable testing stable"
14 SECTIONS="main contrib non-free"
15 ARCHS_stable="m68k arm sparc alpha powerpc i386 mips mipsel ia64 hppa s390"
16 ARCHS_testing="$ARCHS_stable"
17 ARCHS_unstable="$ARCHS_testing hurd-i386 sh"
18 TMPDIR="/org/wanna-build/tmp"
19 WGETOPT="-q -t2 -w0 -T60"
20 CURLOPT="-q -s -S -f -y 5 -K /org/wanna-build/trigger.curlrc"
21 LOCKFILE="/org/wanna-build/tmp/DB_Maintenance_In_Progress"
22
23 DAY=`date +%w`
24
25 if lockfile -! -l 3600 $LOCKFILE; then
26         echo "Cannot lock $LOCKFILE"
27         exit 1
28 fi
29
30 cleanup() {
31         rm -f "$LOCKFILE"
32 }
33 trap cleanup 0
34
35 echo Updating wanna-build databases...
36 umask 027
37
38 if [ "$DAY" = "0" ]; then
39         savelog -c 26 -p /org/wanna-build/db/merge.log
40 fi
41
42 exec >> /org/wanna-build/db/merge.log 2>&1
43
44 echo -------------------------------------------------------------------------
45 echo "merge triggered `date`"
46
47 cd $TMPDIR
48
49 #
50 # Make one big Packages and Sources file.
51 #
52 for d in $DISTS ; do
53         dist=`echo $d | sed s/-.*$//`
54         case "$dist" in
55                 stable)
56                         ARCHS="$ARCHS_stable"
57                         ;;
58                 testing)
59                         ARCHS="$ARCHS_testing"
60                         ;;
61                 *)
62                         ARCHS="$ARCHS_unstable"
63                         ;;
64         esac
65         NON_US="false" # this is changed below if sources can be found
66         rm -f Sources.$d
67         if [ "$d" = "unstable" ]; then
68                 gzip -dc /org/incoming.debian.org/buildd/Sources.gz >> Sources.$d
69         fi
70         for a in $ARCHS ; do
71                 rm -f Packages.$d.$a quinn-$d.$a
72                 if [ "$d" = "unstable" ]; then
73                         gzip -dc /org/incoming.debian.org/buildd/Packages.gz >> Packages.$d.$a
74                 fi
75         done
76
77         for s in $SECTIONS ; do
78                 if echo $d | grep -qv -- -security; then
79                         rm -f Sources.gz
80                         if wget $WGETOPT http://non-us.debian.org/debian-non-US/dists/$d/non-US/$s/source/Sources.gz; then
81                                 mv Sources.gz Sources-non-us.$d.$s.gz
82                                 NON_US="true"
83                         fi
84                         gzip -dc Sources-non-us.$d.$s.gz >> Sources.$d
85                         gzip -dc /org/ftp.debian.org/ftp/dists/$d/$s/source/Sources.gz >> Sources.$d
86                         if [ "$d" = "testing" -o "$d" = "stable" ]; then
87                                 if wget $WGETOPT http://non-us.debian.org/debian-non-US/dists/$d-proposed-updates/non-US/$s/source/Sources.gz; then
88                                         mv Sources.gz Sources-non-us.$d-p-u.$s.gz
89                                 fi
90                                 gzip -dc Sources-non-us.$d-p-u.$s.gz >> Sources.$d
91                                 gzip -dc /org/ftp.debian.org/ftp/dists/$d-proposed-updates/$s/source/Sources.gz >> Sources.$d
92                         fi
93
94                         rm -f Packages.gz
95                         for a in $ARCHS ; do
96                                 if [ "$NON_US" = "true" ]; then
97                                         if wget $WGETOPT http://non-us.debian.org/debian-non-US/dists/$d/non-US/$s/binary-$a/Packages.gz; then
98                                                 mv Packages.gz Packages-non-us.$d.$s.$a.gz
99                                         fi
100                                 fi
101                                 gzip -dc Packages-non-us.$d.$s.$a.gz >> Packages.$d.$a
102
103                                 gzip -dc /org/ftp.debian.org/ftp/dists/$d/$s/binary-$a/Packages.gz >> Packages.$d.$a
104                                 if [ "$d" = "testing" -o "$d" = "stable" ]; then
105                                         if [ "$NON_US" = "true" ]; then
106                                                 if wget $WGETOPT http://non-us.debian.org/debian-non-US/dists/$d-proposed-updates/non-US/$s/binary-$a/Packages.gz; then
107                                                         mv Packages.gz Packages-non-us.$d-p-u.$s.$a.gz
108                                                 fi
109                                         fi
110                                         gzip -dc Packages-non-us.$d-p-u.$s.$a.gz >> Packages.$d.$a
111                                         gzip -dc /org/ftp.debian.org/ftp/dists/$d-proposed-updates/$s/binary-$a/Packages.gz >> Packages.$d.$a
112                                 fi
113                                 if [ "$d" = "unstable" -a "$s" = "main" ]; then
114                                         gzip -dc /org/ftp.debian.org/ftp/dists/$d/$s/debian-installer/binary-$a/Packages.gz >> Packages.$d.$a
115                                 fi
116                         done
117                 else
118                         rm -f Sources.gz
119                         if wget $WGETOPT http://security.debian.org/debian-security/dists/$dist/updates/$s/source/Sources.gz; then
120                                 mv Sources.gz Sources-$d.$s.gz
121                         fi
122                         gzip -dc Sources-$d.$s.gz >> Sources.$d
123                         if [ "$s" = "main" ]; then
124                                 if curl $CURLOPT http://security.debian.org/buildd/$dist/Sources.gz -o Sources.gz; then
125                                         mv Sources.gz Sources-$d.accepted.gz
126                                 fi
127                                 gzip -dc Sources-$d.accepted.gz >> Sources.$d
128                                 if curl $CURLOPT http://security.debian.org/buildd/$dist/Packages.gz -o Packages.gz; then
129                                         mv Packages.gz Packages.$d.accepted.gz
130                                 fi
131                         fi
132                         rm -f Packages.gz
133                         for a in $ARCHS ; do
134                                 if wget $WGETOPT http://security.debian.org/debian-security/dists/$dist/updates/$s/binary-$a/Packages.gz; then
135                                         mv Packages.gz Packages.$d.$s.$a.gz
136                                 fi
137                                 gzip -dc Packages.$d.$s.$a.gz >> Packages.$d.$a
138                                 if [ "$s" = "main" ]; then
139                                         gzip -dc Packages.$d.accepted.gz >> Packages.$d.$a
140                                 fi
141                         done
142                 fi
143         done
144
145         for a in $ARCHS ; do
146                 if [ "$d" = "unstable" -o ! -e "quinn-unstable.$a-old" ]; then
147                         quinn-diff -A $a -a /org/buildd.debian.org/web/quinn-diff/Packages-arch-specific -s Sources.$d -p Packages.$d.$a >> quinn-$d.$a
148                 else
149                         if echo $d | grep -qv -- -security; then
150                                 quinn-diff -A $a -a /org/buildd.debian.org/web/quinn-diff/Packages-arch-specific -s Sources.$d -p Packages.$d.$a | fgrep -v -f quinn-unstable.$a-old | grep ":out-of-date\]$" >> quinn-$d.$a
151                         else
152                                 quinn-diff -A $a -a /org/buildd.debian.org/web/quinn-diff/Packages-arch-specific -s Sources.$d -p Packages.$d.$a >> quinn-$d.$a
153                         fi
154                 fi
155         done
156 done
157
158 umask 002
159 for a in $ARCHS_unstable ; do
160         wanna-build --create-maintenance-lock --database=$a/build-db
161
162         for d in $DISTS ; do
163                 dist=`echo $d | sed s/-.*$//`
164                 case "$dist" in
165                         stable)
166                                 if echo $ARCHS_stable | grep -q -v "\b$a\b"; then
167                                         continue
168                                 fi
169                                 ;;
170                         testing)
171                                 if echo $ARCHS_testing | grep -q -v "\b$a\b"; then
172                                         continue
173                                 fi
174                                 ;;
175                         *)
176                                 if echo $ARCHS_unstable | grep -q -v "\b$a\b"; then
177                                         continue
178                                 fi
179                                 ;;
180                 esac
181                 wanna-build --merge-packages --arch=$a --dist=$d --database=$a/build-db Packages.$d.$a
182                 perl -pi -e 's#^(non-US/)?(non-free)/.*$##msg' quinn-$d.$a
183                 wanna-build --merge-quinn --dist=$d --database=$a/build-db quinn-$d.$a
184                 wanna-build --merge-sources --dist=$d --database=$a/build-db Sources.$d
185                 wanna-build --clean-db --dist=$d --database=$a/build-db
186                 mv Packages.$d.$a Packages.$d.$a-old
187                 mv quinn-$d.$a quinn-$d.$a-old
188         done
189         if [ "$DAY" = "0" ]; then
190                 savelog -p -c 26 /org/wanna-build/db/$a/transactions.log
191         fi
192         wanna-build --remove-maintenance-lock --database=$a/build-db
193 done
194 umask 022
195 for d in $DISTS; do
196         mv Sources.$d Sources.$d-old
197 done
198
199 echo "merge ended `date`"
200 /org/wanna-build/bin/wb-graph >> /org/wanna-build/etc/graph-data
201 /org/wanna-build/bin/wb-graph -p >> /org/wanna-build/etc/graph2-data
202 rm -f "$LOCKFILE"
203 trap -
204 /org/buildd.debian.org/bin/makegraph
205 for a in $ARCHS_stable; do
206         echo Last Updated: `date -u` > /org/buildd.debian.org/web/stats/$a.txt
207         for d in $STATS_DISTS; do
208                 /org/wanna-build/bin/wanna-build-statistics --database=$a/build-db --dist=$d >> /org/buildd.debian.org/web/stats/$a.txt
209         done
210 done