0ee38f7d6f517baf93f2a3fb77c511c9073c39d9
[releases.git] / check-release
1 #! /bin/bash
2 archive=$HOME/linux-libre/releases # $(ls -d /media/p0?/linux-libre-releases)
3 key=474402C8C582DAFBE389C427BCB7CF877E7D47A7
4 pubase=public/logs/v5.6-gnu
5 tmp=. # /tmp/prep
6
7 success=:
8
9 for tag
10 do
11   rel=${tag##jxself/v}
12   rup=${rel%%-[gl][ni][ub]*}
13
14   git rev-parse --verify -q incr/v$rel &&
15   git rev-parse --verify -q public/sources/v$rel &&
16   git rev-parse --verify -q public/logs/v$rel &&
17   continue
18
19  (if test ! -d $archive/$rel; then
20     echo $archive/$rel/ does not exist >& 2
21     exit 1
22   fi &&
23
24   tb=$archive/$rel/linux-libre-$rel &&
25   tar=$tb.tar.bz2 &&
26   trd=linux-$rup &&
27
28   tagid=$(git rev-parse $tag) &&
29   noteid=$(echo $tagid | sed 's,^..,&/,') &&
30   git rev-parse --verify -q stable/v$rup &&
31
32   DATE=$(git cat-file -p $tagid |
33              gawk '/^(author|tagger)/ {
34                         print strftime(PROCINFO["strftime"], $(NF-1))
35                    }') &&
36   export GIT_COMMITTER_DATE=$DATE GIT_AUTHOR_DATE=$DATE &&
37
38   test -f $tb.log &&
39   test -f notes/logs/$noteid &&
40   test -f notes/tars/$noteid &&
41   diff -b $tb.log notes/logs/$noteid &&
42
43   git archive --format tar --prefix=linux-libre-$rel/ $tag |
44   gpg -q --verify notes/tars/$noteid - &&
45
46   git worktree add --detach log-$rel $pubase &&
47
48   cd log-$rel &&
49   git rm -f linux* &&
50   cp -p $tb.log $tb.tar.sign . &&
51   cp ../notes/tars/$noteid $(basename $tb).git.tar.sign &&
52   git add linux* &&
53   git commit --amend --reset-author -S$key -m "GNU Linux-libre $rel logs" &&
54   cd .. &&
55
56   gpg -q --verify $tar.sign &&
57
58   git worktree add --detach $tmp/$trd master &&
59   rm -f $tmp/$trd/* &&
60
61  (cd $tmp/$trd &&
62   git reset -q $tag &&
63   tar -xf $tar -C .. &&
64
65   if git status -su | grep .; then
66     exit 1
67   fi &&
68
69   git reset --soft stable/v$rup &&
70   git commit -m "GNU Linux-libre $rel incremental" &&
71
72   git tag -f incr/v$rel &&
73
74   git fetch file://$(pwd) refs/tags/$tag:refs/tags/public/sources/v$rel
75  ) &&
76
77   git worktree remove $tmp/$trd &&
78
79   cd log-$rel &&
80   git tag -f -m "GNU Linux-libre $rel logs" -s -u $key public/logs/v$rel &&
81   cd .. &&
82   git worktree remove log-$rel
83
84  ) || { echo $tag failed >&2; success=false; }
85 done
86
87 $success