~xubuntu-dev/ubuntu-cdimage/xubuntu-base

« back to all changes in this revision

Viewing changes to bin/publish-release

  • Committer: Adam Conrad
  • Date: 2015-08-06 08:04:06 UTC
  • Revision ID: adconrad@0c3.net-20150806080406-altjtz2xv5tubg80
Tidy up ALL_PROJECTS a bit

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /bin/sh
2
 
set -e
3
 
 
4
 
# Publishing a release is a bit more complicated than publishing a daily. We
5
 
# have two trees: simple and full. The simple tree is intended for smaller
6
 
# mirrors and for ease of use by naïve end users. It contains a pool of
7
 
# images and a tree per release of symlinks into that pool with filenames
8
 
# that include the status of the image (e.g. preview, sounder-9, release).
9
 
#
10
 
# The full tree contains everything except the releases that are in the
11
 
# simple tree (so in practice it contains alpha/beta releases), and has a
12
 
# more complicated structure that ordinary users ultimately shouldn't have
13
 
# to pay too much attention to.
14
 
#
15
 
# Releases are always published based on a daily build. Nominate the version
16
 
# number.
17
 
 
18
 
export CDIMAGE_ROOT="${CDIMAGE_ROOT:-/srv/cdimage.ubuntu.com}"
19
 
. "$CDIMAGE_ROOT/etc/config"
20
 
 
21
 
if [ -z "$1" ] || [ -z "$2" ]; then
22
 
        echo 'Usage: publish-release [--dry-run] DAILY-SOURCE DAILY-DATE TYPE OFFICIAL [STATUS]' >&2
23
 
        echo 'OFFICIAL=yes to publish to releases.ubuntu.com, poolonly to pre-publish,' >&2
24
 
        echo 'named to publish to cdimage.ubuntu.com as $PROJECT-$VERSION-*, otherwise no.' >&2
25
 
        exit 1
26
 
fi
27
 
 
28
 
# TODO: proper option parsing
29
 
if [ "x$1" = x--dry-run ]; then
30
 
        echo=echo
31
 
        shift
32
 
else
33
 
        echo=
34
 
fi
35
 
 
36
 
SOURCE="$1"
37
 
DATE="$2"
38
 
TYPE="$3"
39
 
OFFICIAL="$4"
40
 
STATUS="$5"
41
 
 
42
 
# Do what I mean.
43
 
SOURCE="${SOURCE%/source}"
44
 
 
45
 
# Publish ports/daily to ports/releases/..., etc.
46
 
case $SOURCE in
47
 
        ubuntu-server/*/*)
48
 
                source_tail="${SOURCE#ubuntu-server/}"
49
 
                TREE_SUFFIX="/${source_tail%%/*}"
50
 
                ;;
51
 
        ubuntu-netbook/*/*)
52
 
                source_tail="${SOURCE#ubuntu-netbook/}"
53
 
                TREE_SUFFIX="/${source_tail%%/*}"
54
 
                ;;
55
 
        ubuntu-headless/*/*)
56
 
                source_tail="${SOURCE#ubuntu-headless/}"
57
 
                TREE_SUFFIX="/${source_tail%%/*}"
58
 
                ;;
59
 
        ubuntu-server/*|ubuntu-netbook/*|ubuntu-mid/*|ubuntu-headless/*)
60
 
                TREE_SUFFIX=
61
 
                ;;
62
 
        */*)
63
 
                TREE_SUFFIX="/${SOURCE%%/*}"
64
 
                ;;
65
 
        *)
66
 
                TREE_SUFFIX=
67
 
                ;;
68
 
esac
69
 
 
70
 
case $PROJECT in
71
 
        ubuntu)
72
 
                DAILY_TREE=full
73
 
                SIMPLE_TREE="simple$TREE_SUFFIX"
74
 
                FULL_TREE="full$TREE_SUFFIX"
75
 
                TORRENT_TREE="torrent$TREE_SUFFIX"
76
 
                RELDIR="$TREE_SUFFIX"
77
 
                ;;
78
 
        *)
79
 
                DAILY_TREE="full/$PROJECT"
80
 
                SIMPLE_TREE="simple/$PROJECT$TREE_SUFFIX"
81
 
                FULL_TREE="full/$PROJECT$TREE_SUFFIX"
82
 
                TORRENT_TREE="torrent/$PROJECT$TREE_SUFFIX"
83
 
                RELDIR="$PROJECT$TREE_SUFFIX"
84
 
                ;;
85
 
esac
86
 
 
87
 
METALINK=:
88
 
case $TYPE in
89
 
        netbook|mid|moblin-remix|uec|server-uec|preinstalled-*)
90
 
                METALINK=false
91
 
                ;;
92
 
        # TODO: maybe others? metalink is only supported for Wubi
93
 
esac
94
 
 
95
 
case $DIST in
96
 
        warty)
97
 
                VERSION=4.10
98
 
                ;;
99
 
        hoary)
100
 
                VERSION=5.04
101
 
                ;;
102
 
        breezy)
103
 
                VERSION=5.10
104
 
                ;;
105
 
        dapper)
106
 
                VERSION=6.06.2
107
 
                ;;
108
 
        edgy)
109
 
                VERSION=6.10
110
 
                ;;
111
 
        feisty)
112
 
                VERSION=7.04
113
 
                ;;
114
 
        gutsy)
115
 
                VERSION=7.10
116
 
                ;;
117
 
        hardy)
118
 
                VERSION=8.04.4
119
 
                ;;
120
 
        intrepid)
121
 
                VERSION=8.10
122
 
                ;;
123
 
        jaunty)
124
 
                VERSION=9.04
125
 
                ;;
126
 
        karmic)
127
 
                VERSION=9.10
128
 
                ;;
129
 
        lucid)
130
 
                VERSION=10.04.4
131
 
                ;;
132
 
        maverick)
133
 
                VERSION=10.10
134
 
                ;;
135
 
        natty)
136
 
                VERSION=11.04
137
 
                ;;
138
 
        oneiric)
139
 
                VERSION=11.10
140
 
                ;;
141
 
        precise)
142
 
                VERSION=12.04.2
143
 
                ;;
144
 
        quantal)
145
 
                VERSION=12.10
146
 
                ;;
147
 
        raring)
148
 
                VERSION=13.04
149
 
                ;;
150
 
        *)
151
 
                echo "Unknown distribution: $DIST" >&2
152
 
                exit 1
153
 
                ;;
154
 
esac
155
 
 
156
 
# "beta-2" should end up in directories named "beta-2", but with filenames
157
 
# including "beta2" (otherwise we get hyphen overload).
158
 
case $STATUS in
159
 
        release*)
160
 
                FILESTATUS=
161
 
                ;;
162
 
        *)
163
 
                FILESTATUS="$(echo "$STATUS" | sed 's/-//g')"
164
 
                ;;
165
 
esac
166
 
 
167
 
CDPREFIX="$PROJECT-$VERSION"
168
 
 
169
 
case $OFFICIAL in
170
 
        yes)
171
 
                PUBLISH_DIST=:
172
 
                PUBLISH_POOL=:
173
 
                PUBLISH_FULL=false
174
 
                CDPREFIX="$PROJECT-$VERSION"
175
 
                ;;
176
 
        poolonly)
177
 
                PUBLISH_DIST=false
178
 
                PUBLISH_POOL=:
179
 
                PUBLISH_FULL=false
180
 
                CDPREFIX="$PROJECT-$VERSION"
181
 
                ;;
182
 
        named)
183
 
                PUBLISH_DIST=false
184
 
                PUBLISH_POOL=false
185
 
                PUBLISH_FULL=:
186
 
                CDPREFIX="$PROJECT-$VERSION${FILESTATUS:+-$FILESTATUS}"
187
 
                ;;
188
 
        no)
189
 
                PUBLISH_DIST=false
190
 
                PUBLISH_POOL=false
191
 
                PUBLISH_FULL=:
192
 
                CDPREFIX="$DIST"
193
 
                ;;
194
 
esac
195
 
# Just to make sure ...
196
 
if $PUBLISH_DIST; then
197
 
        PUBLISH_POOL=:
198
 
fi
199
 
 
200
 
if [ "$DIST" != "${ALL_DISTS##* }" ]; then
201
 
        SOURCE="$DIST/$SOURCE"
202
 
        if [ "$SOURCE" = "$DIST/ubuntu-server/daily" ]; then
203
 
                SOURCE="ubuntu-server/$DIST/daily"
204
 
        fi
205
 
fi
206
 
 
207
 
DAILY="$CDIMAGE_ROOT/www/$DAILY_TREE/$SOURCE/$DATE"
208
 
if [ ! -d "$DAILY" ] && [ "${DATE#*/}" != "$DATE" ]; then
209
 
        if [ -d "$CDIMAGE_ROOT/www/full/$DATE" ]; then
210
 
                DAILY="$CDIMAGE_ROOT/www/full/$DATE"
211
 
        fi
212
 
fi
213
 
RELEASE_FULL="$CDIMAGE_ROOT/www/$FULL_TREE/releases/$DIST/${STATUS:-release}"
214
 
RELEASE_SIMPLE_POOL="$CDIMAGE_ROOT/www/$SIMPLE_TREE/.pool"
215
 
RELEASE_SIMPLE_DIST="$CDIMAGE_ROOT/www/$SIMPLE_TREE/$DIST"
216
 
RELEASE_SIMPLE_BASEDIR="$CDIMAGE_ROOT/www/simple"
217
 
RELEASE_SIMPLE_RELDIR="${RELDIR:+$RELDIR/}$DIST"
218
 
RELEASE_FULL_BASEDIR="$CDIMAGE_ROOT/www/full"
219
 
if [ "$OFFICIAL" = "named" ]; then
220
 
        RELEASE_FULL_RELDIR="${RELDIR:+$RELDIR/}releases/$VERSION/${STATUS:-release}"
221
 
else
222
 
        RELEASE_FULL_RELDIR="${RELDIR:+$RELDIR/}releases/$DIST/${STATUS:-release}"
223
 
fi
224
 
 
225
 
DIST_TO_POOL=../.pool
226
 
 
227
 
case $DATE in
228
 
        */unpacked)
229
 
                RELEASE_FULL="$RELEASE_FULL/unpacked"
230
 
                ;;
231
 
esac
232
 
 
233
 
case $TYPE in
234
 
        src)
235
 
                DAILY="$DAILY/source"
236
 
                RELEASE_FULL="$RELEASE_FULL/source"
237
 
                RELEASE_SIMPLE_DIST="$RELEASE_SIMPLE_DIST/source"
238
 
                DIST_TO_POOL=../../.pool
239
 
 
240
 
                # Sanity-check.
241
 
                if [ ! -e "$DAILY/$DIST-$TYPE-1.iso" ]; then
242
 
                        echo "No source daily for $DIST on $DATE!" >&2
243
 
                        exit 1
244
 
                fi
245
 
 
246
 
                # Perverse, but works.
247
 
                ARCHES="$(find "$DAILY" -name "$DIST-$TYPE-*.iso" \
248
 
                                -printf '%P\n' | \
249
 
                          sed "s/$DIST-$TYPE-\\(.*\\)\\.iso/\\1/")"
250
 
                ;;
251
 
esac
252
 
 
253
 
# override the arch list for these types unconditionally
254
 
case $TYPE in
255
 
        netbook|moblin-remix)
256
 
                case $ARCHES in
257
 
                        *armel*)
258
 
                                ;;
259
 
                        *)
260
 
                                ARCHES=i386
261
 
                                ;;
262
 
                esac
263
 
                ;;
264
 
        mid)
265
 
                ARCHES=lpia
266
 
                ;;
267
 
esac
268
 
 
269
 
# Sanity-check.
270
 
if [ "$TYPE" != netbook ] && [ "$TYPE" != mid ]; then
271
 
        for arch in $ARCHES; do
272
 
                if [ ! -e "$DAILY/$DIST-$TYPE-$arch.iso" ] && \
273
 
                   [ ! -e "$DAILY/$DIST-$TYPE-$arch.img" ] && \
274
 
                   [ ! -e "$DAILY/$DIST-$TYPE-$arch.img.gz" ] && \
275
 
                   [ ! -e "$DAILY/$DIST-$TYPE-$arch.img.tar.gz" ] && \
276
 
                   [ ! -e "$DAILY/$DIST-$TYPE-$arch.tar.gz" ] && \
277
 
                   [ ! -e "$DAILY/$arch.tar.xz" ]; then
278
 
                        echo "No daily for $DIST $arch on $DATE!" >&2
279
 
                        exit 1
280
 
                fi
281
 
 
282
 
                if [ -e "$DAILY/$DIST-$TYPE-$arch.OVERSIZED" ]; then
283
 
                        printf 'Daily for %s %s on %s is oversized! Continue?' \
284
 
                                "$DIST" "$arch" "$DATE"
285
 
                        confirm || exit 1
286
 
                fi
287
 
        done
288
 
fi
289
 
 
290
 
if $PUBLISH_POOL; then
291
 
        $echo mkdir -p "$RELEASE_SIMPLE_POOL"
292
 
fi
293
 
if $PUBLISH_DIST; then
294
 
        $echo mkdir -p "$RELEASE_SIMPLE_DIST"
295
 
        if [ ! -h "$CDIMAGE_ROOT/www/$SIMPLE_TREE/$VERSION" ]; then
296
 
                $echo ln -ns "$DIST" "$CDIMAGE_ROOT/www/$SIMPLE_TREE/$VERSION"
297
 
        fi
298
 
        if [ -z "$CDIMAGE_NO_PURGE" ]; then
299
 
                find "$RELEASE_SIMPLE_DIST/" -name "$CDPREFIX-$TYPE-*" -type l -print0 | xargs -0r $echo rm -f
300
 
        fi
301
 
fi
302
 
if $PUBLISH_FULL; then
303
 
        $echo mkdir -p "$RELEASE_FULL"
304
 
        if [ ! -h "$CDIMAGE_ROOT/www/$FULL_TREE/releases/$VERSION" ]; then
305
 
                $echo ln -ns "$DIST" "$CDIMAGE_ROOT/www/$FULL_TREE/releases/$VERSION"
306
 
        fi
307
 
fi
308
 
 
309
 
echo "Constructing release trees ..."
310
 
 
311
 
for arch in $ARCHES; do
312
 
        case $TYPE in
313
 
                netbook|mid)
314
 
                        if dist_le intrepid; then
315
 
                                base="$DAILY/$PROJECT-$TYPE"
316
 
                        else
317
 
                                base="$DAILY/$DIST-$TYPE-$arch"
318
 
                        fi
319
 
                        ;;
320
 
                wubi)
321
 
                        base="$DAILY/$arch"
322
 
                        ;;
323
 
                *)
324
 
                        base="$DAILY/$DIST-$TYPE-$arch"
325
 
                        ;;
326
 
        esac
327
 
 
328
 
        echo "Copying $TYPE-$arch image ..."
329
 
 
330
 
        baseplain="$CDPREFIX-$TYPE-$arch"
331
 
        basestatus="$CDPREFIX-${FILESTATUS:+$FILESTATUS-}$TYPE-$arch"
332
 
 
333
 
        if [ ! -e "$base.iso" ] && \
334
 
           [ ! -e "$base.img" ] && \
335
 
           [ ! -e "$base.img.gz" ] && \
336
 
           [ ! -e "$base.tar.gz" ] && \
337
 
           [ ! -e "$base.img.tar.gz" ] && \
338
 
           [ ! -e "$base.tar.xz" ]; then
339
 
                continue
340
 
        fi
341
 
 
342
 
        # Copy, to make sure we have a canonical version of this.
343
 
        for ext in iso list img img.gz img.tar.gz tar.gz tar.xz bootimg; do
344
 
                if [ ! -e "$base.$ext" ]; then
345
 
                        continue
346
 
                fi
347
 
                if $PUBLISH_POOL; then
348
 
                        $echo cp -a "$base.$ext" \
349
 
                                "$RELEASE_SIMPLE_POOL/$basestatus.$ext"
350
 
                        $echo checksum-remove --no-sign \
351
 
                                "$RELEASE_SIMPLE_POOL" "$basestatus.$ext"
352
 
                fi
353
 
                if $PUBLISH_DIST; then
354
 
                        $echo ln -sf "$DIST_TO_POOL/$basestatus.$ext" \
355
 
                                "$RELEASE_SIMPLE_DIST/$basestatus.$ext"
356
 
                        $echo checksum-remove --no-sign \
357
 
                                "$RELEASE_SIMPLE_DIST" "$basestatus.$ext"
358
 
                fi
359
 
                if $PUBLISH_FULL; then
360
 
                        $echo cp -a "$base.$ext" \
361
 
                                "$RELEASE_FULL/$baseplain.$ext"
362
 
                        $echo checksum-remove --no-sign \
363
 
                                "$RELEASE_FULL" "$baseplain.$ext"
364
 
                fi
365
 
        done
366
 
 
367
 
        for ext in initrd-ec2 initrd-virtual vmlinuz-ec2 vmlinuz-virtual; do
368
 
                if [ ! -e "${base}-$ext" ]; then
369
 
                        continue
370
 
                fi
371
 
                if $PUBLISH_POOL; then
372
 
                        $echo cp -a "${base}-$ext" \
373
 
                                "$RELEASE_SIMPLE_POOL/${basestatus}-$ext"
374
 
                        $echo checksum-remove --no-sign \
375
 
                                "$RELEASE_SIMPLE_POOL" "${basestatus}-$ext"
376
 
                fi
377
 
                if $PUBLISH_DIST; then
378
 
                        $echo ln -sf "$DIST_TO_POOL/${basestatus}-$ext" \
379
 
                                "$RELEASE_SIMPLE_DIST/${basestatus}-$ext"
380
 
                        $echo checksum-remove --no-sign \
381
 
                                "$RELEASE_SIMPLE_DIST" "${basestatus}-$ext"
382
 
                fi
383
 
                if $PUBLISH_FULL; then
384
 
                        $echo cp -a "${base}-$ext" \
385
 
                                "$RELEASE_FULL/${baseplain}-$ext"
386
 
                        $echo checksum-remove --no-sign \
387
 
                                "$RELEASE_FULL" "${baseplain}-$ext"
388
 
                fi
389
 
        done
390
 
 
391
 
        if [ -e "${base}-kernel-info.txt" ]; then
392
 
                if $PUBLISH_DIST; then
393
 
                        $echo cp -a "${base}-kernel-info.txt" \
394
 
                                "$RELEASE_SIMPLE_DIST/${basestatus}-kernel-info.txt"
395
 
                fi
396
 
                if $PUBLISH_FULL; then
397
 
                        $echo cp -a "${base}-kernel-info.txt" \
398
 
                                "$RELEASE_FULL/${baseplain}-kernel-info.txt"
399
 
                fi
400
 
        fi
401
 
 
402
 
        if [ "$TYPE" = install ] || [ "$TYPE" = alternate ] || \
403
 
           [ "$TYPE" = server ] || [ "$TYPE" = serveraddon ] || \
404
 
           [ "$TYPE" = addon ] || \
405
 
           [ "$TYPE" = src ]; then
406
 
                if [ -e "$DAILY/$DIST-$TYPE-$arch.jigdo" ] && \
407
 
                   [ -e "$DAILY/$DIST-$TYPE-$arch.template" ]; then
408
 
                        if $PUBLISH_POOL; then
409
 
                                $echo cp -a "$DAILY/$DIST-$TYPE-$arch.template" \
410
 
                                        "$RELEASE_SIMPLE_POOL/$basestatus.template"
411
 
                                if [ "$echo" ]; then
412
 
                                        echo "Would fix up jigdo file"
413
 
                                else
414
 
                                        sed "s/=$DIST-$TYPE-$arch/=$basestatus/g" \
415
 
                                                < "$DAILY/$DIST-$TYPE-$arch.jigdo" \
416
 
                                                > "$RELEASE_SIMPLE_POOL/$basestatus.jigdo"
417
 
                                fi
418
 
                        fi
419
 
                        if $PUBLISH_DIST; then
420
 
                                for ext in template jigdo; do
421
 
                                        $echo ln -sf "$DIST_TO_POOL/$basestatus.$ext" \
422
 
                                                "$RELEASE_SIMPLE_DIST/$basestatus.$ext"
423
 
                                done
424
 
                        fi
425
 
                        if $PUBLISH_FULL; then
426
 
                                $echo cp -a "$DAILY/$DIST-$TYPE-$arch.template" \
427
 
                                        "$RELEASE_FULL/$baseplain.template"
428
 
                                if [ "$echo" ]; then
429
 
                                        echo "Would fix up jigdo file"
430
 
                                else
431
 
                                        sed "s/=$DIST-$TYPE-$arch/=$baseplain/g" \
432
 
                                                < "$DAILY/$DIST-$TYPE-$arch.jigdo" \
433
 
                                                > "$RELEASE_FULL/$baseplain.jigdo"
434
 
                                fi
435
 
                        fi
436
 
                else
437
 
                        for ext in jigdo template; do
438
 
                                if $PUBLISH_POOL; then
439
 
                                        $echo rm -f "$RELEASE_SIMPLE_POOL/$basestatus.$ext"
440
 
                                fi
441
 
                                if $PUBLISH_DIST; then
442
 
                                        $echo rm -f "$RELEASE_SIMPLE_DIST/$basestatus.$ext"
443
 
                                fi
444
 
                                if $PUBLISH_FULL; then
445
 
                                        $echo rm -f "$RELEASE_FULL/$baseplain.$ext"
446
 
                                fi
447
 
                        done
448
 
                fi
449
 
        fi
450
 
 
451
 
        want_manifest=false
452
 
        case $TYPE in
453
 
                live|desktop|netbook|mid|moblin-remix|uec|server-uec|preinstalled-*|core|wubi)
454
 
                        want_manifest=:
455
 
                        ;;
456
 
                dvd)
457
 
                        # DVDs are allowed to not have .manifest files, but
458
 
                        # may have them depending on configuration.
459
 
                        if [ -e "$base.manifest" ]; then
460
 
                                want_manifest=:
461
 
                        fi
462
 
                        ;;
463
 
        esac
464
 
        if $want_manifest; then
465
 
                # Copy, to make sure we have a canonical version of this.
466
 
                if $PUBLISH_POOL; then
467
 
                        $echo cp -a "$base.manifest" \
468
 
                                "$RELEASE_SIMPLE_POOL/$basestatus.manifest"
469
 
                fi
470
 
                if $PUBLISH_DIST; then
471
 
                        $echo ln -sf "$DIST_TO_POOL/$basestatus.manifest" \
472
 
                                "$RELEASE_SIMPLE_DIST/$basestatus.manifest"
473
 
                fi
474
 
                if $PUBLISH_FULL; then
475
 
                        $echo cp -a "$base.manifest" \
476
 
                                "$RELEASE_FULL/$baseplain.manifest"
477
 
                fi
478
 
        fi
479
 
 
480
 
        for ext in iso.zsync img.zsync img.gz.zsync tar.gz.zsync; do
481
 
                if [ -e "$DAILY/$DIST-$TYPE-$arch.$ext" ]; then
482
 
                        baseext=${ext%.zsync}
483
 
                        if $PUBLISH_POOL; then
484
 
                                if which zsyncmake >/dev/null 2>&1; then
485
 
                                        echo "Making $arch zsync metafile ..."
486
 
                                        $echo rm -f "$RELEASE_SIMPLE_POOL/$basestatus.$ext"
487
 
                                        $echo zsyncmake_wrapper \
488
 
                                                -Z \
489
 
                                                -o "$RELEASE_SIMPLE_POOL/$basestatus.$ext" \
490
 
                                                -u "$basestatus.$baseext" \
491
 
                                                "$RELEASE_SIMPLE_POOL/$basestatus.$baseext"
492
 
                                fi
493
 
                        elif $PUBLISH_FULL && [ "$OFFICIAL" = named ]; then
494
 
                                if which zsyncmake >/dev/null 2>&1; then
495
 
                                        echo "Making $arch zsync metafile ..."
496
 
                                        $echo rm -f "$RELEASE_FULL/$baseplain.$ext"
497
 
                                        $echo zsyncmake_wrapper \
498
 
                                                -Z \
499
 
                                                -o "$RELEASE_FULL/$baseplain.$ext" \
500
 
                                                -u "$baseplain.$baseext" \
501
 
                                                "$RELEASE_FULL/$baseplain.$baseext"
502
 
                                fi
503
 
                        elif $PUBLISH_FULL; then
504
 
                                $echo cp -a "$DAILY/$DIST-$TYPE-$arch.$ext" \
505
 
                                        "$RELEASE_FULL/$baseplain.$ext"
506
 
                        fi
507
 
                        if $PUBLISH_DIST; then
508
 
                                $echo ln -sf "$DIST_TO_POOL/$basestatus.$ext" \
509
 
                                        "$RELEASE_SIMPLE_DIST/$basestatus.$ext"
510
 
                        fi
511
 
                fi
512
 
        done
513
 
done
514
 
 
515
 
# There can only be one set of images per release in the per-release tree,
516
 
# so if we're publishing there then we can now safely clean up previous
517
 
# images for that release.
518
 
if $PUBLISH_DIST && [ -z "$CDIMAGE_NO_PURGE" ]; then
519
 
        for dir in "$RELEASE_SIMPLE_DIST" "$RELEASE_SIMPLE_POOL"; do
520
 
                find "$dir" -maxdepth 1 -name "$CDPREFIX-*" ! -regex ".*/$CDPREFIX${FILESTATUS:+-$FILESTATUS}-[^-]*-[^-]*" | while read file; do
521
 
                        echo "Purging $file"
522
 
                        $echo rm -f "$file"
523
 
                done
524
 
        done
525
 
fi
526
 
 
527
 
if [ "$TYPE" = uec ] || [ "$TYPE" = server-uec ]; then
528
 
        for file in published-ec2-release.txt tool-version-info.txt \
529
 
                    build-info.txt
530
 
        do
531
 
                if [ ! -e "$DAILY/$file" ]; then
532
 
                        continue
533
 
                fi
534
 
                if $PUBLISH_DIST; then
535
 
                        $echo cp -a "$DAILY/$file" \
536
 
                                "$RELEASE_SIMPLE_DIST/$file"
537
 
                fi
538
 
                if $PUBLISH_FULL; then
539
 
                        $echo cp -a "$DAILY/$file" \
540
 
                                "$RELEASE_FULL/$file"
541
 
                fi
542
 
        done
543
 
fi
544
 
 
545
 
if [ "$TYPE" != src ] && [ "$TYPE" != uec ] && [ "$TYPE" != server-uec ]; then
546
 
        # Create and publish torrents
547
 
        if $PUBLISH_DIST; then
548
 
                TORRENTS="$CDIMAGE_ROOT/www/$TORRENT_TREE/simple/$DIST/$TYPE"
549
 
                if [ -z "$CDIMAGE_NO_PURGE" ]; then
550
 
                        $echo mkemptydir "$TORRENTS"
551
 
                fi
552
 
                $echo make-torrents "$RELEASE_SIMPLE_DIST" \
553
 
                        "$CDPREFIX-${FILESTATUS:+$FILESTATUS-}$TYPE" releases.ubuntu.com
554
 
        fi
555
 
        if $PUBLISH_FULL; then
556
 
                for dir in "$CDIMAGE_ROOT/www/$TORRENT_TREE/releases/$DIST"/*; do
557
 
                        [ -d "$dir" ] || continue
558
 
                        if [ "${dir##*/}" != "${STATUS:-release}" ]; then
559
 
                                $echo rm -rf "$dir"
560
 
                        fi
561
 
                done
562
 
                TORRENTS="$CDIMAGE_ROOT/www/$TORRENT_TREE/releases/$DIST/${STATUS:-release}/$TYPE"
563
 
                $echo mkemptydir "$TORRENTS"
564
 
                $echo make-torrents "$RELEASE_FULL" "$CDPREFIX-$TYPE" cdimage.ubuntu.com
565
 
        fi
566
 
        for arch in $ARCHES; do
567
 
                if $PUBLISH_DIST; then
568
 
                        basestatus="$CDPREFIX-${FILESTATUS:+$FILESTATUS-}$TYPE-$arch"
569
 
                        for ext in iso img; do
570
 
                                [ -e "$RELEASE_SIMPLE_POOL/$basestatus.$ext" ] || continue
571
 
                                $echo ln -f "$RELEASE_SIMPLE_POOL/$basestatus.$ext" \
572
 
                                        "$TORRENTS/$basestatus.$ext"
573
 
                                $echo ln -f "$RELEASE_SIMPLE_DIST/$basestatus.$ext.torrent" \
574
 
                                        "$TORRENTS/$basestatus.$ext.torrent"
575
 
                        done
576
 
                fi
577
 
                if $PUBLISH_FULL; then
578
 
                        baseplain="$CDPREFIX-$TYPE-$arch"
579
 
                        for ext in iso img; do
580
 
                                [ -e "$RELEASE_FULL/$baseplain.$ext" ] || continue
581
 
                                $echo ln -f "$RELEASE_FULL/$baseplain.$ext" \
582
 
                                        "$TORRENTS/$baseplain.$ext"
583
 
                                $echo ln -f "$RELEASE_FULL/$baseplain.$ext.torrent" \
584
 
                                        "$TORRENTS/$baseplain.$ext.torrent"
585
 
                        done
586
 
                fi
587
 
        done
588
 
fi
589
 
 
590
 
if $PUBLISH_DIST; then
591
 
        $echo make-web-indices "$RELEASE_SIMPLE_DIST" "$CDPREFIX${FILESTATUS:+-$FILESTATUS}"
592
 
fi
593
 
if $PUBLISH_FULL; then
594
 
        $echo make-web-indices "$RELEASE_FULL" "$CDPREFIX"
595
 
fi
596
 
 
597
 
if $PUBLISH_POOL; then
598
 
        echo 'Checksumming simple tree (pool) ...'
599
 
        $echo checksum-directory \
600
 
                --map "s/^$CDPREFIX-${FILESTATUS:+$FILESTATUS-}/$DIST-/" \
601
 
                "$RELEASE_SIMPLE_POOL" "$DAILY"
602
 
fi
603
 
if $PUBLISH_DIST; then
604
 
        echo "Checksumming simple tree ($DIST) ..."
605
 
        $echo checksum-directory \
606
 
                --map "s/^$CDPREFIX-${FILESTATUS:+$FILESTATUS-}/$DIST-/" \
607
 
                "$RELEASE_SIMPLE_DIST" "$DAILY"
608
 
        if $METALINK; then
609
 
                echo "Creating and publishing metalink files for the simple tree ($DIST) ..."
610
 
                METALINK_VERSION="$VERSION"
611
 
                if [ "$PROJECT" != ubuntu ]; then
612
 
                        METALINK_VERSION="$PROJECT/$VERSION"
613
 
                fi
614
 
                $echo rm -f "$RELEASE_SIMPLE_DIST/MD5SUMS-metalink" \
615
 
                        "$RELEASE_SIMPLE_DIST/MD5SUMS-metalink.gpg"
616
 
                if $echo make-metalink "$RELEASE_SIMPLE_BASEDIR" "$METALINK_VERSION" \
617
 
                        "$RELEASE_SIMPLE_RELDIR" releases.ubuntu.com; then
618
 
                        $echo checksum-directory --metalink "$RELEASE_SIMPLE_DIST"
619
 
                else
620
 
                        $echo rm -f "$RELEASE_SIMPLE_DIST"/*.metalink
621
 
                fi
622
 
        fi
623
 
fi
624
 
if $PUBLISH_FULL; then
625
 
        echo 'Checksumming full tree ...'
626
 
        $echo checksum-directory \
627
 
                --map "s/^$CDPREFIX-/$DIST-/" \
628
 
                "$RELEASE_FULL" "$DAILY"
629
 
        if $METALINK; then
630
 
                echo "Creating and publishing metalink files for the full tree ..."
631
 
                $echo rm -f "$RELEASE_FULL/MD5SUMS-metalink" \
632
 
                        "$RELEASE_FULL/MD5SUMS-metalink.gpg"
633
 
                if $echo make-metalink "$RELEASE_FULL_BASEDIR" "$VERSION" \
634
 
                        "$RELEASE_FULL_RELDIR" cdimage.ubuntu.com; then
635
 
                        $echo checksum-directory --metalink "$RELEASE_FULL"
636
 
                else
637
 
                        rm -f "$RELEASE_FULL"/*.metalink
638
 
                fi
639
 
        fi
640
 
fi
641
 
 
642
 
if $PUBLISH_DIST || $PUBLISH_POOL; then
643
 
        $echo site-manifest simple "$CDIMAGE_ROOT/www/simple" .manifest
644
 
 
645
 
        # Create timestamps for this run.
646
 
        if [ "$echo" ]; then
647
 
                echo "Would create trace file"
648
 
        else
649
 
                mkdir -p "$CDIMAGE_ROOT/www/simple/.trace"
650
 
                date -u > "$CDIMAGE_ROOT/www/simple/.trace/$(hostname --fqdn)"
651
 
        fi
652
 
fi
653
 
 
654
 
echo "Done! Remember to sync-mirrors after checking that everything is OK."
 
1
#! /usr/bin/python
 
2
 
 
3
# Copyright (C) 2013 Canonical Ltd.
 
4
# Author: Colin Watson <cjwatson@ubuntu.com>
 
5
 
 
6
# This program is free software: you can redistribute it and/or modify
 
7
# it under the terms of the GNU General Public License as published by
 
8
# the Free Software Foundation; version 3 of the License.
 
9
#
 
10
# This program is distributed in the hope that it will be useful,
 
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
# GNU General Public License for more details.
 
14
#
 
15
# You should have received a copy of the GNU General Public License
 
16
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
 
 
18
"""Publish a daily build as a release."""
 
19
 
 
20
from optparse import OptionParser
 
21
import os
 
22
import sys
 
23
 
 
24
sys.path.insert(0, os.path.join(sys.path[0], os.pardir, "lib"))
 
25
from cdimage.config import Config
 
26
from cdimage.tree import Tree
 
27
 
 
28
 
 
29
def main():
 
30
    parser = OptionParser(
 
31
        "%prog [--dry-run] DAILY-SOURCE DAILY-DATE TYPE OFFICIAL [STATUS]\n"
 
32
        "OFFICIAL=yes to publish to releases.ubuntu.com, poolonly to "
 
33
        "pre-publish, named to publish to cdimage.ubuntu.com as "
 
34
        "$PROJECT-$VERSION-*, otherwise no.")
 
35
    parser.add_option(
 
36
        "-n", "--dry-run", default=False, action="store_true",
 
37
        help="Show equivalent commands rather than running them.")
 
38
    options, args = parser.parse_args()
 
39
    if len(args) < 1:
 
40
        parser.error("need daily-source")
 
41
    if len(args) < 2:
 
42
        parser.error("need daily-date")
 
43
    if len(args) < 3:
 
44
        parser.error("need type")
 
45
    if len(args) < 4:
 
46
        parser.error("need official")
 
47
    source = args[0]
 
48
    date = args[1]
 
49
    publish_type = args[2]
 
50
    official = args[3]
 
51
    status = args[4] if len(args) >= 5 else None
 
52
    config = Config()
 
53
    tree = Tree.get_release(config, official)
 
54
    # image_type unused
 
55
    publisher = tree.get_publisher(
 
56
        "daily", official, status=status, dry_run=options.dry_run)
 
57
    publisher.publish_release(source, date, publish_type)
 
58
 
 
59
 
 
60
if __name__ == "__main__":
 
61
    main()