]> git.proxmox.com Git - debcargo-conf.git/blob - release.sh
Merge branches 'pending-cargo', 'pending-debcargo', 'pending-fd-find', 'pending-reqwe...
[debcargo-conf.git] / release.sh
1 #!/bin/bash
2
3 . ./vars.sh.frag
4
5 if test ! -d $PKGDIR_REL; then
6 abort 1 "Cannot find $PKGDIR_REL. Did you run ./new-package.sh before?"
7 fi
8
9 if test ! -f "$PKGDIR_REL/debian/changelog"; then
10 abort 1 "Cannot find $PKGDIR_REL/debian/changelog. Did you run ./new-package.sh before?"
11 fi
12
13 if git grep --quiet FIXME -- "$PKGDIR_REL" :^"$PKGDIR_REL/debian/*.debcargo.hint" :^"$PKGDIR_REL/debian/changelog"; then
14 abort 1 "FIXMEs remain in $PKGDIR_REL, fix and commit those first."
15 fi
16
17 git diff --quiet --cached || \
18 abort 1 "You have other pending changes to git, please complete it or stash it away and re-run this script."
19
20 git diff --quiet -- "$PKGDIR_REL" || \
21 abort 1 "Please git-add your changes to $PKGDIR_REL before running"
22
23 type dch >/dev/null || \
24 abort 1 "Install devscripts, we need to run dch."
25
26 RELBRANCH="pending-$PKGNAME"
27 git fetch origin --prune
28
29 git merge-base --is-ancestor origin/master HEAD || \
30 abort 1 "You are not synced with origin/master, please do so before running this script."
31
32 if head -n1 "$PKGDIR/debian/changelog" | grep -qv UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO; then
33 abort 0 "Package already released."
34 fi
35
36 if [ -e "$PKGDIR/debian/BLOCK" ]; then
37 abort 1 "TODO items remain in $PKGDIR/debian/BLOCK, please deal with those"
38 fi
39
40 PREVBRANCH="$(git rev-parse --abbrev-ref HEAD)"
41 case "$PREVBRANCH" in
42 pending-$PKGNAME) true;;
43 pending-*) abort 1 "You are on a pending-release branch for a package other than $PKGNAME, $0 can only be run on another branch, like master";;
44 *) if git rev-parse -q --verify "refs/heads/$RELBRANCH" >/dev/null || \
45 git rev-parse -q --verify "refs/remotes/origin/$RELBRANCH" >/dev/null; then
46 git checkout "$RELBRANCH"
47 else
48 git checkout -b "$RELBRANCH"
49 fi;;
50 esac
51
52 if head -n1 "$PKGDIR/debian/changelog" | grep -qv UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO; then
53 git checkout "$PREVBRANCH"
54 abort 0 "Package already released on branch $RELBRANCH. If that was a mistake then run:" \
55 " git branch -D $RELBRANCH" \
56 "And re-run this script ($0 $*). You might have to delete the remote branch too:" \
57 " git push --delete origin $RELBRANCH"
58 fi
59
60 ( cd "$PKGDIR"
61 sed -i -e s/UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO/UNRELEASED/ debian/changelog
62 if test -z "$DISTRO"; then
63 # To upload to other distro like experimental
64 DISTRO=unstable
65 fi
66 dch -m -r -D $DISTRO ""
67 git add debian/changelog
68 git rm --ignore-unmatch debian/RFS
69 )
70
71 revert_git_changes() {
72 git reset --merge
73 git checkout -- "$PKGDIR/debian/changelog"
74 git checkout -q -- "$PKGDIR/debian/RFS" || true
75 git checkout "$PREVBRANCH"
76 git branch -d "$RELBRANCH"
77 }
78
79 if ! run_debcargo --changelog-ready; then
80 revert_git_changes
81 abort 1 "Release attempt failed to run debcargo, probably the package needs updating (./update.sh $*)"
82 fi
83
84 if ! git diff --exit-code -- "$PKGDIR_REL"; then
85 revert_git_changes
86 abort 1 "Release attempt resulted in git diffs to $PKGDIR_REL, probably the package needs updating (./update.sh $*)"
87 fi
88
89 if ! ( cd build && SOURCEONLY=1 ./build.sh "$CRATE" $VER ); then
90 revert_git_changes
91 abort 1 "Release attempt failed (see messages above), possible reasons are: " \
92 "- build-dependencies not in Debian => release those first." \
93 "- packaged version is out-of-date => run \`./update.sh $*\`"
94 fi
95
96 git commit -m "Release package $PKGNAME"
97
98 DEBVER=$(dpkg-parsechangelog -l $BUILDDIR/debian/changelog -SVersion)
99 DEBSRC=$(dpkg-parsechangelog -l $BUILDDIR/debian/changelog -SSource)
100 DEB_HOST_ARCH=$(dpkg-architecture -q DEB_HOST_ARCH)
101 cat >&2 <<eof
102 Release of $CRATE ready as a source package in ${BUILDDIR#$PWD/}. You need to
103 perform the following steps:
104
105 Build the package if necessary, and upload
106 ==========================================
107
108 If the source package is already in Debian and this version does not introduce
109 new binaries, then you can just go ahead and directly dput the source package.
110
111 cd build && dput ${DEBSRC}_${DEBVER}_source.changes
112
113 For your reference, this source package builds $(grep ^Package build/${CRATE//_/-}/debian/control | wc -l) binary package(s).
114
115 If this is a NEW source package or introduces NEW binary packages not already
116 in the Debian archive, you will need to build a binary package out of it. The
117 recommended way is to run something like:
118
119 cd build && ./build.sh $CRATE $VER && dput ${DEBSRC}_${DEBVER}_${DEB_HOST_ARCH}.changes
120
121 This assumes you followed the "Build environment" instructions in README.rst,
122 for setting up a build environment for release.
123
124 If the build fails e.g. due to missing Build-Dependencies you should revert
125 what I did (see below) and package those missing Build-Dependencies first.
126
127 Push this pending-release branch
128 ================================
129
130 After you have uploaded the package with dput(1), you should push $RELBRANCH so
131 that other people see it's been uploaded. Then, checkout another branch like
132 master to continue development on other packages.
133
134 git push origin $RELBRANCH && git checkout master
135
136 Merge the pending-release branch when ACCEPTED
137 ==============================================
138
139 When it's ACCEPTED by the Debian FTP masters, you may then merge this branch
140 back into the master branch, delete it, and push these updates to origin.
141
142 git checkout master && git merge $RELBRANCH && git branch -d $RELBRANCH
143 git push origin master :$RELBRANCH
144
145 ----
146
147 The above assumes you are a Debian Developer with upload rights. If not, you
148 should revert what I just did. To do that, run:
149
150 git checkout master && git branch -D $RELBRANCH
151
152 Then ask a Debian Developer to re-run me ($0 $*) on your behalf. Also touch
153 and commit ${PKGDIR_REL}/debian/RFS so it's easy to track.
154 eof