Clean up after check-failed release; wipe out sources once checking is done
[releases.git] / mkgitrel.rel
1 #! /bin/bash
2
3 reldir=$HOME/linux-libre/releases
4
5 key=474402C8C582DAFBE389C427BCB7CF877E7D47A7
6
7 success=:
8 for rel
9 do
10     
11 rup=$(echo "$rel" | sed 's,-gnu[0-9]*$,,')
12 cbr=$(echo "$rup" | sed 's,\(\.\|-rc\)[0-9]*$,,')
13
14 if test -d $reldir/$rel; then
15   echo $reldir/$rel exists >&2
16   continue
17 fi
18
19 if test -h $reldir/LATEST-$cbr.0; then
20   prev0=$(readlink $reldir/LATEST-$cbr.0)
21   prevn=$(readlink $reldir/LATEST-$cbr.N)
22 elif test -h $reldir/LATEST-$rup.N; then
23   cbr=$rup
24   prev0=$(readlink $reldir/LATEST-$cbr.0)
25   prevn=$(readlink $reldir/LATEST-$cbr.N)
26 else
27   echo Neither $reldir/LATEST-$cbr.0 nor $reldir/LATEST-$rup.N exist >&2
28   exit 1
29 fi
30
31 DATE=$(git cat-file -p incr/v$rel |
32        gawk '/^(author|tagger)/ {
33                print strftime(PROCINFO["strftime"], $(NF-1))
34              }') &&
35 export GIT_COMMITTER_DATE=$DATE GIT_AUTHOR_DATE=$DATE &&
36
37 if test -f linux-libre-$rel.check; then
38     success=false
39     git worktree remove logs/v$rel
40     continue
41 fi &&
42
43 plist="patch-$prev0-$rel" &&
44 if test "$prev0" != "$prevn"; then
45   plist="$plist patch-$prevn-$rel"
46 fi &&
47
48 list="linux-libre-$rel.tar $plist" &&
49
50 bzip2 -k9 $list &&
51 xz -k9 $list &&
52 lzip -k9s64MiB $list &&
53
54 mkdir -v $rel &&
55
56 for f in $(ls scripts/v$rel); do
57   if cmp scripts/v$rel/$f $reldir/$prevn/$f; then
58     gpg --verify $reldir/$prevn/$f.sign &&
59     ln -v $reldir/$prevn/$f $reldir/$prevn/$f.sign $rel/
60   else
61     ln -v scripts/v$rel/$f $rel/ &&
62     gpg --armor --detach-sign $rel/$f &&
63     mv -v $rel/$f.asc $rel/$f.sign
64   fi
65 done &&
66
67 ln -v logs/v$rel/linux-libre-$rel.* $rel/ &&
68
69 for f in $plist; do
70   gpg --armor --detach-sign $f &&
71   mv -v $f.asc $rel/$f.sign
72 done &&
73
74 for ext in .bz2 .xz .lz; do
75   for f in $list; do
76     mv -v $f$ext $rel/ &&
77     gpg --armor --detach-sign $rel/$f$ext &&
78     mv -v $rel/$f$ext.asc $rel/$f$ext.sign
79   done
80 done &&
81
82 rm -vf $list &&
83
84 mv -v $rel $reldir/$rel &&
85 ln -snfv $rel $reldir/LATEST-$cbr.N &&
86 if test "$rup" = "$cbr"; then
87   ln -nfv $reldir/LATEST-$cbr.N $reldir/LATEST-$cbr.0 &&
88   ln -nfv $reldir/LATEST-$cbr.N $reldir/LATEST-${cbr%.*}.N
89 fi &&
90
91 git worktree remove logs/v$rel &&
92 git worktree remove scripts/v$rel
93
94 done &&
95
96 $success