]> git.proxmox.com Git - debcargo-conf.git/blobdiff - release.sh
thiserror-impl: new version
[debcargo-conf.git] / release.sh
index 92c88d142672a124f234f4222baffc33c9bcf95c..7a6ad3cc05b982978416f768da2039195517c753 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 . ./vars.sh.frag
 
@@ -10,7 +10,7 @@ if test ! -f "$PKGDIR_REL/debian/changelog"; then
        abort 1 "Cannot find $PKGDIR_REL/debian/changelog. Did you run ./new-package.sh before?"
 fi
 
-if git grep FIXME -- "$PKGDIR_REL" :^"$PKGDIR_REL/debian/*.debcargo.hint" :^"$PKGDIR_REL/debian/changelog"; then
+if git grep --quiet FIXME -- "$PKGDIR_REL" :^"$PKGDIR_REL/debian/*.debcargo.hint" :^"$PKGDIR_REL/debian/changelog"; then
        abort 1 "FIXMEs remain in $PKGDIR_REL, fix and commit those first."
 fi
 
@@ -26,8 +26,27 @@ abort 1 "Install devscripts, we need to run dch."
 RELBRANCH="pending-$PKGNAME"
 git fetch origin --prune
 
+git merge-base --is-ancestor origin/master HEAD || \
+abort 1 "You are not synced with origin/master, please do so before running this script."
+
+if [ "$RERELEASE" = 1 -o "$NOUPDATE" = 1 ]; then
+       REALVER="$(get_existing_version "$PKGDIR")"
+fi
+
 if head -n1 "$PKGDIR/debian/changelog" | grep -qv UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO; then
-       abort 0 "Package already released."
+       if [ "$RERELEASE" = 1 ]; then
+               run_debcargo
+               ( cd "$PKGDIR" && dch -a "No-op source-only re-upload for Debian Testing Migration." )
+               export REUSE_EXISTING_ORIG_TARBALL=1
+       else
+               abort 0 \
+                 "Package already released. If you want to do a source-only re-upload e.g. to" \
+                 "hoop-jump through the Debian Testing migration requirements, set RERELEASE=1."
+       fi
+fi
+
+if [ -e "$PKGDIR/debian/BLOCK" ]; then
+       abort 1 "TODO items remain in $PKGDIR/debian/BLOCK, please deal with those"
 fi
 
 PREVBRANCH="$(git rev-parse --abbrev-ref HEAD)"
@@ -44,18 +63,27 @@ esac
 
 if head -n1 "$PKGDIR/debian/changelog" | grep -qv UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO; then
        git checkout "$PREVBRANCH"
-       abort 0 "Package already released on branch $RELBRANCH. If that was a mistake then run \`git branch -D $RELBRANCH\`, and re-run this script ($0 $*). You might have to delete the remote branch too (\`git push --delete origin $RELBRANCH\`)."
+       abort 0 "Package already released on branch $RELBRANCH. If that was a mistake then run:" \
+         "    git branch -D $RELBRANCH" \
+         "And re-run this script ($0 $*). You might have to delete the remote branch too:" \
+         "    git push --delete origin $RELBRANCH"
 fi
 
 ( cd "$PKGDIR"
 sed -i -e s/UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO/UNRELEASED/ debian/changelog
-dch -m -r -D unstable ""
+if test -z "$DISTRO"; then
+    # To upload to other distro like experimental
+    DISTRO=unstable
+fi
+dch -m -r -D $DISTRO ""
 git add debian/changelog
+git rm --ignore-unmatch debian/RFS
 )
 
 revert_git_changes() {
-       git reset
+       git reset --merge
        git checkout -- "$PKGDIR/debian/changelog"
+       git checkout -q -- "$PKGDIR/debian/RFS" || true
        git checkout "$PREVBRANCH"
        git branch -d "$RELBRANCH"
 }
@@ -65,9 +93,22 @@ if ! run_debcargo --changelog-ready; then
        abort 1 "Release attempt failed to run debcargo, probably the package needs updating (./update.sh $*)"
 fi
 
+# sometimes the copyright years need to be updated, try to do this automatically
+if git diff -- "$PKGDIR_REL/debian/copyright.debcargo.hint" | patch -r - --no-backup-if-mismatch "$PKGDIR_REL/debian/copyright"; then
+       git add "$PKGDIR_REL/debian/copyright.debcargo.hint" "$PKGDIR_REL/debian/copyright"
+else
+       git diff -- "$PKGDIR_REL/debian/copyright.debcargo.hint"
+       revert_git_changes
+       abort 1 \
+         "copyright file needs updating; apply the above diff to $PKGDIR_REL/debian/copyright" \
+         "then commit your changes, and run me again."
+fi
+
 if ! git diff --exit-code -- "$PKGDIR_REL"; then
        revert_git_changes
-       abort 1 "Release attempt resulted in git diffs to $PKGDIR_REL, probably the package needs updating (./update.sh $*)"
+       abort 1 \
+         "Release attempt resulted in git diffs to $PKGDIR_REL, probably you need to update the package (./update.sh $*)." \
+         "Alternatively, set NOUPDATE=1 to override this requirement, but please have a good reason."
 fi
 
 if ! ( cd build && SOURCEONLY=1 ./build.sh "$CRATE" $VER ); then
@@ -82,7 +123,21 @@ git commit -m "Release package $PKGNAME"
 DEBVER=$(dpkg-parsechangelog -l $BUILDDIR/debian/changelog -SVersion)
 DEBSRC=$(dpkg-parsechangelog -l $BUILDDIR/debian/changelog -SSource)
 DEB_HOST_ARCH=$(dpkg-architecture -q DEB_HOST_ARCH)
-cat >&2 <<eof
+
+if [ "$RERELEASE" = 1 ]; then
+
+( cd build && dput "${DEBSRC}_${DEBVER}_source.changes" )
+git push origin "$RELBRANCH"
+git checkout master
+
+cat <<eof
+Source-only re-release of $CRATE uploaded. You need to perform the following steps:
+
+eof
+
+else
+
+cat <<eof
 Release of $CRATE ready as a source package in ${BUILDDIR#$PWD/}. You need to
 perform the following steps:
 
@@ -94,14 +149,17 @@ new binaries, then you can just go ahead and directly dput the source package.
 
   cd build && dput ${DEBSRC}_${DEBVER}_source.changes
 
+For your reference, this source package builds $(grep ^Package build/${CRATE//_/-}/debian/control | wc -l) binary package(s):
+$(sed -ne 's/^Package: //pg' build/hmac/debian/control | tr '\n' ',')
+
 If this is a NEW source package or introduces NEW binary packages not already
 in the Debian archive, you will need to build a binary package out of it. The
 recommended way is to run something like:
 
   cd build && ./build.sh $CRATE $VER && dput ${DEBSRC}_${DEBVER}_${DEB_HOST_ARCH}.changes
 
-This assumes you followed the "DD instructions" in README.rst, for setting up
-a build environment for release.
+This assumes you followed the "Build environment" instructions in README.rst,
+for setting up a build environment for release.
 
 If the build fails e.g. due to missing Build-Dependencies you should revert
 what I did (see below) and package those missing Build-Dependencies first.
@@ -115,8 +173,13 @@ master to continue development on other packages.
 
   git push origin $RELBRANCH && git checkout master
 
-Merge the pending-release branch when ACCEPTED
-==============================================
+eof
+
+fi
+
+cat >&2 <<eof
+Merge the pending-release branch if/when ACCEPTED
+=================================================
 
 When it's ACCEPTED by the Debian FTP masters, you may then merge this branch
 back into the master branch, delete it, and push these updates to origin.
@@ -124,13 +187,15 @@ back into the master branch, delete it, and push these updates to origin.
   git checkout master && git merge $RELBRANCH && git branch -d $RELBRANCH
   git push origin master :$RELBRANCH
 
-----
+Delete this branch without merging if/when REJECTED
+===================================================
 
-The above assumes you are a Debian Developer with upload rights. If not, you
-should revert what I just did. To do that, run:
+If your upload is REJECTED, or if you cannot perform an upload in the first
+place e.g. because you are not a Debian Developer, you should revert what I
+just did. To do that, run:
 
   git checkout master && git branch -D $RELBRANCH
 
-Then ask a Debian Developer to re-run me ($0 $*) on your behalf. Also add your
-crate to the "Ready for upload" list in TODO.rst so it's easy to track.
+Then ask a Debian Developer to re-run me ($0 $*) on your behalf. Also, touch
+and commit ${PKGDIR_REL}/debian/RFS so we can track these easier.
 eof