875afa03179f3ea805953832752753e4308c32df
[releases.git] / mkgitrel.cln
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 for up in linus stable; do
32   git rev-parse --verify -q $up/v$rup && break
33 done
34
35 git verify-tag $up/v$rup &&
36
37 { test -d scripts/v$rel ||
38   git worktree add --detach scripts/v$rel scripts/$cbr
39 } &&
40
41 git worktree add --detach sources/v$rel $up/v$rup &&
42
43 git worktree add --detach logs/v$rel public/logs/v$prevn &&
44
45 (cd logs/v$rel && git rm -f linux-*) &&
46
47 (
48   cd sources/v$rel &&
49   ../../scripts/v$rel/deblob-$cbr >& ../../logs/v$rel/linux-libre-$rel.log &&
50   git commit -m "GNU Linux-libre v$rel incremental" -a &&
51   git tag incr/v$rel
52 ) &&
53
54 DATE=$(git cat-file -p incr/v$rel |
55        gawk '/^(author|tagger)/ {
56                print strftime(PROCINFO["strftime"], $(NF-1))
57              }') &&
58 export GIT_COMMITTER_DATE=$DATE GIT_AUTHOR_DATE=$DATE &&
59
60 (
61   cd sources/v$rel &&
62   git reset --soft -q public/sources/v$prevn &&
63   git commit --amend --reset-author -S$key \
64       -m "GNU Linux-libre $rel" &&
65   git tag -m "GNU Linux-libre $rel" -s -u $key sources/v$rel &&
66
67   git reset --hard incr/v$rel^ &&
68   { git merge --no-commit incr/v$prevn || :; } &&
69   git diff incr/v$rel > ../../linux-libre-$rel.patckT &&
70   mv -v ../../linux-libre-$rel.patckT ../../linux-libre-$rel.patck
71  ) &&
72
73 git archive --format tar --prefix=linux-$rup/ -o linux-libre-$rel.tar sources/v$rel &&
74 gpg --armor --detach-sign linux-libre-$rel.tar &&
75 mv linux-libre-$rel.tar.asc logs/v$rel/linux-libre-$rel.tar.sign &&
76
77 for f in linux-libre-; do
78   if cmp logs/v$rel/$f$rel.log $reldir/$prevn/$f$prevn.log; then
79     ln -vf $reldir/$prevn/$f$prevn.log logs/v$rel/$f$rel.log &&
80     ln -vf $reldir/$prevn/$f$prevn.log.sign logs/v$rel/$f$rel.log.sign
81   else
82     gpg --armor --detach-sign logs/v$rel/$f$rel.log &&
83     mv -v logs/v$rel/$f$rel.log.asc logs/v$rel/$f$rel.log.sign
84   fi
85 done &&
86
87 (
88   cd logs/v$rel &&
89   git add linux* &&
90   git commit --amend --reset-author -S$key -m "GNU Linux-libre $rel logs" &&
91   git tag -m "GNU Linux-libre $rel logs" -s -u $key logs/v$rel
92 ) &&
93
94 git diff --src-prefix=linux-libre-$prev0/ --dst-prefix=linux-libre-$rel/ \
95   public/sources/v$prev0 sources/v$rel -- > patch-$prev0-$rel &&
96
97 if test "$prev0" != "$prevn"; then
98   git diff --src-prefix=linux-libre-$prevn/ --dst-prefix=linux-libre-$rel/ \
99     public/sources/v$prevn sources/v$rel -- > patch-$prevn-$rel
100 fi &&
101
102 { scripts/v$rel/deblob-check --use-awk linux-libre-$rel.tar ||
103     scripts/v$rel/deblob-check --use-awk -C linux-libre-$rel.tar \
104       > linux-libre-$rel.check ||
105     { success=false; continue; }; }
106
107 done &&
108
109 $success