[DRE-commits] [pkg-ruby-extras] 02/02: Better infrastructure for newcomers
Antonio Terceiro
terceiro at moszumanska.debian.org
Wed Mar 2 13:06:18 UTC 2016
This is an automated email from the git hooks/post-receive script.
terceiro pushed a commit to branch quick-start
in repository pkg-ruby-extras.
commit 3d609af01daddfbc988fb84439a8b7ed66973e6d
Author: Antonio Terceiro <terceiro at debian.org>
Date: Tue Mar 1 14:16:13 2016 -0300
Better infrastructure for newcomers
- checkout now works without needing to touch ~/.mrtrust
- setup will prepare evertyhing need to build packages
- build will do builds "the right way"
- upload will do uploads "the right way". It has been adapted from a
locally-modified copy of the original Ruby team upload script I had
been cultivating for quite some time. It will handle correctly
source-only uploads (not to NEW or security uploads etc), running
lintian, running autopkgtest, etc.
- upload-no-build will do uploads "the right way" assuming the build is
already ok.
A Vagrantfile is provided as a convenience.
---
Vagrantfile | 10 ++++
build | 1 +
checkout | 2 +-
setup | 26 ++++++++
upload | 180 +++++++++++++++++++++++++++++++++++++++++++++++++-------
upload-no-build | 1 +
6 files changed, 198 insertions(+), 22 deletions(-)
diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 0000000..7dfe460
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,10 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure(2) do |config|
+ config.vm.box = "debian/sid64"
+ config.vm.provision :shell do |shell|
+ shell.privileged = false
+ shell.path = 'setup'
+ end
+end
diff --git a/build b/build
new file mode 120000
index 0000000..53c3962
--- /dev/null
+++ b/build
@@ -0,0 +1 @@
+upload
\ No newline at end of file
diff --git a/checkout b/checkout
index 42e5dc5..08765d9 100755
--- a/checkout
+++ b/checkout
@@ -3,5 +3,5 @@
set -e
for repo in $@; do
- mr --force -d $repo checkout
+ mr --trust-all --force -d $repo checkout
done
diff --git a/setup b/setup
new file mode 100755
index 0000000..8d2b8c2
--- /dev/null
+++ b/setup
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+set -exu
+
+sudo apt-get install -qy gem2deb git git-buildpackage myrepos sbuild autopkgtest
+
+sudo mkdir -p /root/.gnupg # To work around #792100
+sudo sbuild-update --keygen
+sudo sbuild-adduser $USER
+
+chrootname=unstable-$(dpkg --print-architecture)-sbuild
+chroot=/srv/chroots/$chrootname
+if schroot --list --all-source-chroots | grep unstable-amd64-sbuild; then
+ :
+else
+ sudo sbuild-createchroot unstable $chroot http://httpredir.debian.org/debian
+fi
+for conf in $(grep -l '^union-type=' /etc/schroot/chroot.d/*-sbuild*); do
+ if ! grep -q "^union-overlay-directory=" "$conf" ; then
+ echo 'union-overlay-directory=/dev/shm' | sudo tee --append "$conf"
+ fi
+done
+
+if ! grep -q /var/cache/apt/archives /etc/schroot/sbuild/fstab; then
+ sudo sh -c 'echo /var/cache/apt/archives /var/cache/apt/archives none rw,bind 0 0 >>/etc/schroot/sbuild/fstab'
+fi
diff --git a/upload b/upload
index b51739e..9b39b82 100755
--- a/upload
+++ b/upload
@@ -2,15 +2,34 @@
set -e
+BUILD=no
+UPLOAD=no
+PROGRAM_NAME=$(basename $0)
+case "$PROGRAM_NAME" in
+ build)
+ BUILD=yes
+ UPLOAD=no
+ ;;
+ upload)
+ BUILD=yes
+ UPLOAD=yes
+ ;;
+ upload-no-build)
+ BUILD=no
+ UPLOAD=yes
+ ;;
+esac
+
if ! [ -e debian/changelog ]; then
echo "Not inside a Debian package!"
exit 1
fi
-if grep --quiet UNRELEASED debian/changelog; then
- echo "Uploading files for distribution UNRELEASED to ftp-master" \
- "is not allowed!"
+if [ -x debian/release-check ]; then
+ if ! debian/release-check; then
+ echo "aborting release because debian/release-check failed"
exit 1
+ fi
fi
highlight() {
@@ -32,11 +51,11 @@ warning() {
printf "\n"
}
-# build
-gbp buildpackage --git-pbuilder
-
# check
check_package() {
+ banner "Overall package contents"
+ debc "$changes"
+
banner "Changelog"
dpkg-parsechangelog
@@ -47,31 +66,150 @@ check_package() {
if grep -q Build-Depends:.*gem2deb debian/control; then
banner "Rubygems integration"
- debc | grep gemspec | sed 's/.*\s//'
+ debc | grep 'gemspec$' | sed 's/.*\s//'
echo
fi
- banner "Overall package contents"
- debc
+ if [ -f debian/tests/control ] || grep -q '^\(XS-\)\?Testsuite:' debian/control; then
+ banner "This package has a test suite!"
+ if confirm "Run the test suite now? [Y/n]" y; then
+ adt_dist="$distribution"
+ if [ "$adt_dist" = unstable ]; then
+ adt_dist=sid
+ fi
+ rc=0
+ adt-run --apt-upgrade --shell-fail "$changes" --- lxc --sudo adt-"$adt_dist"-"$arch" || rc=$?
+ if [ $rc -ne 0 ]; then
+ warning "Test suite failed! Please verify before uploading"
+ fi
+ else
+ echo "OK, but you should probably run the test suite before uploading!"
+ fi
+ fi
}
-check_package | less -FRSX
+confirm() {
+ prompt="$1"
+ default="${2:-n}"
+ printf "$prompt"
+ read confirm
+ if [ -z "$confirm" ]; then
+ confirm="$default"
+ fi
+ [ "$confirm" = 'y' ] || [ "$confirm" = 'Y' ]
+}
-printf "Proceed with the upload? [y/N] "
-read proceed
-if [ "$proceed" != 'y' ] && [ "$proceed" != 'Y' ]; then
- echo "Aborted upon your request."
- exit 2
+ask_to_proceed() {
+ if ! confirm "$@"; then
+ echo "Aborted upon your request."
+ exit 2
+ fi
+}
+
+source=$(dpkg-parsechangelog -SSource)
+version=$(dpkg-parsechangelog -SVersion | sed -e 's/^[0-9]\+://') # remove epoch
+arch=$(dpkg --print-architecture)
+changes=${source}_${version}_${arch}.changes
+if [ -e "../$changes" ]; then
+ changes="../$changes"
+else
+ if [ -e "../build-area/$changes" ]; then
+ changes="../build-area/$changes"
+ else
+ "echo E: $changes not found!"
+ exit 1
+ fi
fi
-# tag
-gbp buildpackage --git-tag-only
+# target distribution/host
+distribution=$(dpkg-parsechangelog -SDistribution)
+host=ftp-master
+git_builder=--git-builder=sbuild\ --arch-all\ --source
+case "$distribution" in
+ *-security)
+ git_builder="$git_builder"\ --git-ignore-branch
+ if confirm "Security upload detected; include orig source? [Y/n]" y; then
+ git_builder="$git_builder"\ --force-orig-source
+ fi
+ host=security-master
+ ;;
+ UNRELEASED)
+ git_builder="$git_builder"\ -c\ unstable-${arch}-sbuild
+ ;;
+ *)
+ git_builder="$git_builder"\ -d\ $distribution
+ true
+esac
+
+# check urgency for security upload
+if [ "$host" = 'security-master' ] || dpkg-parsechangelog | grep -q CVE; then
+ urgency=$(dpkg-parsechangelog -SUrgency)
+ if [ "$urgency" != 'high' ] && [ "$distribution" != "unstable" ] && [ "$distribution" != 'UNRELEASED' ]; then
+ echo "Security upload should have urgency=high"
+ exit 1
+ fi
+fi
-# push
-git push origin : --follow-tags
+buildprogram=gbp\ buildpackage\ --git-ignore-branch
+
+# build
+if [ "$BUILD" = 'yes' ]; then
+ gbp buildpackage $git_builder "$@"
+fi
+
+if [ "$UPLOAD" = 'no' ]; then
+ exit 0
+fi
+
+check_package 2>&1
+
+ask_to_proceed "Proceed with the upload to \033[38;1;1m${host}\033[m? [y/N] "
+
+# cleanup
+git checkout .
+git clean -dxf
+
+gbp buildpackage --git-tag-only --git-ignore-branch
+
+SOURCE=yes
+NEW=no
+
+case "$distribution" in
+ unstable|experimental)
+ # source only uploads are OK
+ SOURCE=yes
+ ;;
+ *)
+ # source only uploads not OK
+ SOURCE=no
+ ;;
+esac
+
+if [ $(grep -c "^${source}\s" debian/changelog) -eq 1 ]; then
+ NEW=yes
+ # must always upload binaries to NEW
+ SOURCE=no
+fi
+
+if [ $SOURCE = yes ]; then
+ $buildprogram -S "$@"
+ changes=${changes%%_${arch}.changes}_source.changes
+fi
# sign
-debsign
+debsign "$changes"
+
+# push
+if [ $NEW = yes ]; then
+ git push -u --all
+else
+ current_branch=$(git symbolic-ref HEAD | sed 's#refs/heads/##')
+ if [ "$current_branch" != master -a ! -f .git/refs/remotes/origin/$current_branch ]; then
+ git push -u origin "$current_branch"
+ fi
+ git push origin :
+fi
+git push --tags
# upload
-debrelease
+dput "$host" "$changes"
diff --git a/upload-no-build b/upload-no-build
new file mode 120000
index 0000000..53c3962
--- /dev/null
+++ b/upload-no-build
@@ -0,0 +1 @@
+upload
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/pkg-ruby-extras.git
More information about the Pkg-ruby-extras-commits
mailing list