mirror of
https://git.proxmox.com/git/debcargo-conf
synced 2025-04-28 13:24:24 +00:00

by comparing the generated .dsc with a rmadison query for archive contents. also makes the total text displayed shorter since we don't have to mention both NEW and regular scenarios. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
260 lines
8.5 KiB
Bash
Executable File
260 lines
8.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
. ./vars.sh.frag
|
|
|
|
if test ! -d $PKGDIR_REL; then
|
|
abort 1 "Cannot find $PKGDIR_REL. Did you run ./new-package.sh before?"
|
|
fi
|
|
|
|
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 --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
|
|
|
|
git diff --quiet --cached || \
|
|
abort 1 "You have other pending changes to git, please complete it or stash it away and re-run this script."
|
|
|
|
git diff --quiet -- "$PKGDIR_REL" || \
|
|
abort 1 "Please git-add your changes to $PKGDIR_REL before running"
|
|
|
|
type dch >/dev/null || \
|
|
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
|
|
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)"
|
|
case "$PREVBRANCH" in
|
|
pending-$PKGNAME) true;;
|
|
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";;
|
|
*) if git rev-parse -q --verify "refs/heads/$RELBRANCH" >/dev/null || \
|
|
git rev-parse -q --verify "refs/remotes/origin/$RELBRANCH" >/dev/null; then
|
|
git checkout "$RELBRANCH"
|
|
else
|
|
git checkout -b "$RELBRANCH"
|
|
fi;;
|
|
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"
|
|
fi
|
|
|
|
( cd "$PKGDIR"
|
|
sed -i -e s/UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO/UNRELEASED/ debian/changelog
|
|
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 --merge
|
|
git checkout -- "$PKGDIR/debian/changelog"
|
|
git checkout -q -- "$PKGDIR/debian/RFS" || true
|
|
git checkout "$PREVBRANCH"
|
|
git branch -d "$RELBRANCH"
|
|
}
|
|
|
|
if ! run_debcargo --changelog-ready; then
|
|
revert_git_changes
|
|
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 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
|
|
revert_git_changes
|
|
abort 1 "Release attempt failed (see messages above), possible reasons are: " \
|
|
"- build-dependencies not in Debian => release those first." \
|
|
"- packaged version is out-of-date => run \`./update.sh $*\`"
|
|
fi
|
|
|
|
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)
|
|
|
|
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
|
|
|
|
unstable_bin_packages="$(rmadison --noconf --suite unstable --source-and-binary "${DEBSRC}" | grep -v 'source$' | cut -d ' ' -f 1 | sort -u)"
|
|
upload_bin_packages="$(grep '^Binary' "build/${DEBSRC}_${DEBVER}.dsc" | sed -e 's/^Binary: //' -e 's/, /,/g' | tr ',' '\n' | sort -u)"
|
|
diff_bin_packages="$(diff -u0 <(echo "$unstable_bin_packages") <(echo "$upload_bin_packages") | tail -n-2)"
|
|
new_bin_packages="$(echo "$diff_bin_packages" | grep '^+' | sed -e 's/^+//g')"
|
|
rm_bin_packages="$(echo "$diff_bin_packages" | grep '^-' | sed -e 's/^-//g')"
|
|
|
|
cat <<eof
|
|
Release of $CRATE ready as a source package in ${BUILDDIR#$PWD/}. You need to
|
|
perform the following steps:
|
|
|
|
Build the package if necessary, and upload
|
|
==========================================
|
|
eof
|
|
|
|
if [ -z "$unstable_bin_packages" ]; then
|
|
cat <<eof
|
|
Since this is a NEW source package not already in the Debian archive, you will need to build a binary package out of it.
|
|
|
|
For your reference, this source package builds $(echo "$upload_bin_packages" | wc -l) binary package(s):
|
|
$upload_bin_packages
|
|
eof
|
|
|
|
else
|
|
|
|
if [ -z "$new_bin_packages" ]; then
|
|
|
|
cat <<eof
|
|
Since the source package is already in Debian and this version does not introduce
|
|
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 $(echo "$upload_bin_packages" | wc -l) binary package(s):
|
|
$upload_bin_packages
|
|
eof
|
|
|
|
|
|
else
|
|
|
|
cat <<eof
|
|
ATTENTION: this upload introduces NEW binary packages not already in the Debian
|
|
archive, you will need to build a binary package out of it.
|
|
|
|
PLEASE THINK CAREFULLY BEFORE UPLOADING NEW VERSIONS WITH NEW BINARY PACKAGES,
|
|
AS SUCH UPLOADS CAN AFFECT ONGOING TRANSITIONS AND DELAY THEM SIGNIFICANTLY.
|
|
|
|
For your reference, this source package builds $(echo "$upload_bin_packages" | wc -l) binary package(s):
|
|
$upload_bin_packages
|
|
|
|
Of those, the following are NEW:
|
|
$new_bin_packages
|
|
eof
|
|
|
|
fi
|
|
|
|
cat <<eof
|
|
|
|
The recommended way to build and upload is to run something like:
|
|
|
|
cd build && ./build.sh $CRATE $VER && dput ${DEBSRC}_${DEBVER}_${DEB_HOST_ARCH}.changes
|
|
eof
|
|
|
|
fi
|
|
|
|
if [ -n "$rm_bin_packages" ]; then
|
|
|
|
cat <<eof
|
|
|
|
ATTENTION: The following binary packages which are currently available in
|
|
Debian unstable are no longer built from ${DEBSRC}, please investigate whether
|
|
this is intentional, and file RM requests where appropriate:
|
|
|
|
$rm_bin_packages
|
|
eof
|
|
|
|
fi
|
|
|
|
cat <<eof
|
|
|
|
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.
|
|
|
|
Push this pending-release branch
|
|
================================
|
|
|
|
After you have uploaded the package with dput(1), you should push $RELBRANCH so
|
|
that other people see it's been uploaded. Then, checkout another branch like
|
|
master to continue development on other packages.
|
|
|
|
git push origin $RELBRANCH && git checkout master
|
|
|
|
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.
|
|
|
|
git checkout master && git merge $RELBRANCH && git branch -d $RELBRANCH
|
|
git push origin master :$RELBRANCH
|
|
|
|
Delete this branch without merging if/when REJECTED
|
|
===================================================
|
|
|
|
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, touch
|
|
and commit ${PKGDIR_REL}/debian/RFS so we can track these easier.
|
|
eof
|