diff options
Diffstat (limited to 'tools/ko-release-gen')
-rwxr-xr-x | tools/ko-release-gen | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tools/ko-release-gen b/tools/ko-release-gen new file mode 100755 index 0000000..b3afc39 --- /dev/null +++ b/tools/ko-release-gen @@ -0,0 +1,103 @@ +#!/bin/sh +# +# Copyright (C) 2012 Karel Zak <kzak@redhat.com> +# +# Usage: ko-release-gen [<directory> [<file>]] +# +# This script prepares a new release for publishing on kernel.org. The +# hierarchy of release files is created in the <directory> (default directory +# is "kernel.org"). Use case: +# +# make distcheck +# make changelog +# tools/ko-release-gen +# tools/ko-release-push +# + +cd "$(git rev-parse --show-toplevel)" || { + echo "error: failed to chdir to git root" + exit 1 +} + +[ -f ".version" ] || \ + echo "error: cannot found version file (call make distcheck)" + +VERSION=$(cat .version) +VERSION_MAJOR=$(echo $VERSION | sed 's/-rc[0-9]//; s/\(.*\..*\)\..*/\1/') +VERSION_DOCS=$(echo $VERSION | sed 's/-rc[0-9]//') +DISTDIR=${1:-"kernel.org"}/v${VERSION_MAJOR} + +GPG_PROG=${GPG_PROG:-"gpg"} +GPG_CMD="$GPG_PROG --use-agent --armor --detach-sign --quiet" + +die() { + echo $1 + exit 1 +} + +add_file() { + local src="$1" + local name=$(basename $1) + local subdir=$DISTDIR/${2:-""} + + mkdir -p $subdir + cp $src $subdir || die "$src: copy failed" + + [ -f $subdir/$name ] || die "$name not found" + echo -n " $subdir/$name ..." + + case "$name" in + *.tar.xz) + local sig=$(echo "$name" | sed 's/\.tar\.xz/.tar.sign/') + xz -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig + ;; + *.tar.gz) + local sig=$(echo "$name" | sed 's/\.tar\.gz/.tar.sign/') + gzip -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig + ;; + *.tar.bz2) + local sig=$(echo "$name" | sed 's/\.tar\.bz2/.tar.sign/') + bzip2 -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig + ;; + *) + local sig="${name}.sign" + cat $subdir/$name | $GPG_CMD --output $subdir/$sig + ;; + esac + echo " OK " +} + +add_html_dir() { + local src="$1" # source dir + local tgt="$2" # target dir + + for fl in $(ls $src/*.html $src/*.css $src/*.png); do + add_file $fl $tgt + done +} + +rm -rf $DISTDIR + +eval $(gpg-agent --daemon) + +# Add just specified files only +if [ -f "$2" ]; then + shift + while (( "$#" )); do + add_file "$1" + shift + done + killall gpg-agent + exit 0 +fi + +add_file util-linux-${VERSION}.tar.xz +add_file v${VERSION}-ChangeLog +add_file Documentation/releases/v${VERSION_DOCS}-ReleaseNotes +add_html_dir libmount/docs/html libmount-docs +add_html_dir libblkid/docs/html libblkid-docs +add_html_dir libsmartcols/docs/html libsmartcols-docs +add_html_dir libfdisk/docs/html libfdisk-docs + +killall gpg-agent + |