diff --git a/maintainer/release-windows-packages b/maintainer/release-windows-packages new file mode 100755 index 000000000..e5fe37464 --- /dev/null +++ b/maintainer/release-windows-packages @@ -0,0 +1,198 @@ +#!/bin/sh +# +# unpack windows rpm's from opensuse download server, upload files to kde.org and file a related release ticket +# +# Author: Ralf Habacker +# +# requirements: +# +# osc - opensuse build service command line client +# +# syntax: release-windows-packages +# +# run ./release-windows-packages to see all modes +# +NAME=kmymoney +ROOT=home\:rhabacker\:branches\: + +PACKAGENAME32=mingw32-$NAME +ROOT32=${ROOT}windows\:mingw\:win32\:kmymoney +SRCROOT32=${ROOT32} +ARCHOUT32=i686-w64-mingw32 + +PACKAGENAME64=mingw64-$NAME +#ROOT64=${ROOT}windows\:mingw\:win64\:KDE4 +#SRCROOT64=windows\:mingw\:win64 +#ARCHOUT64=x86_64-w64-mingw32 + +REPO=openSUSE_Leap_42.2 +SRCREPO=$REPO +VERSION=4.8.1 + +PHABURL=https://phabricator.kde.org +oscoptions="-A https://api.opensuse.org" +apitoken=cli-uxo23l4q5qrzoyscbz5kp4zcngqp +options='projectPHIDs[]=PHID-PROJ-3qa4tomwgrmcmp4ym2ow' + +self=$(realpath $0) + +if ! test -d "work"; then + mkdir work +fi + +case $1 in +clean) ## clean working area + rm -rf work/* + ;; + +download) ## download rpm packages + cd work + rm -rf binaries + osc $oscoptions getbinaries $ROOT32 $PACKAGENAME32-installer $REPO x86_64 + if test -n "$ROOT64"; then + osc $oscoptions getbinaries $ROOT64 $PACKAGENAME64-installer $REPO x86_64 + fi + cd .. + $self downloadsrc + touch work/$1.finished + ;; + +downloadsrc) ## download source + cd work + # fetch source package + src32pkg=$(osc $oscoptions ls -b -r $SRCREPO -a x86_64 $SRCROOT32 $PACKAGENAME32 | grep src) + osc $oscoptions getbinaries --sources $SRCROOT32 $PACKAGENAME32 $SRCREPO x86_64 $src32pkg + # we only need once source package + #src64pkg=$(osc $oscoptions ls -b -r $SRCREPO -a x86_64 $SRCROOT64 mingw64-umbrello | grep src) + #osc $oscoptions getbinaries --sources $SRCROOT64 mingw64-umbrello $SRCREPO x86_64 $src64pkg + # fetch debug packages + debug32pkg=$(osc $oscoptions ls -b -r $SRCREPO -a x86_64 $SRCROOT32 $PACKAGENAME32 | grep debug) + osc $oscoptions getbinaries $SRCROOT32 $PACKAGENAME32 $SRCREPO x86_64 $debug32pkg + if test -n "$ROOT64"; then + debug64pkg=$(osc $oscoptions ls -b -r $SRCREPO -a x86_64 $SRCROOT64 $PACKAGENAME64 | grep debug) + osc $oscoptions getbinaries $SRCROOT64 $PACKAGENAME64 $SRCREPO x86_64 $debug64pkg + fi + touch $1.finished + ;; + +unpack) ## unpack rpm files + cd work + files=$(find binaries -name *installer* -o -name *portable* -o -name *src* -o -name *debug* | grep "$VERSION") + if test -d tmp; then + rm -rf tmp + fi + mkdir -p tmp + for i in $(echo $files); do + (cd tmp; rpm2cpio ../$i | cpio -idmv) + done + touch $1.finished + ;; + +movepackage) ## move windows binary packages into upload folder + cd work + rm -rf out + mkdir -p out + find tmp/ -type f -name '*.exe' -exec cp {} out \; + find tmp/ -type f -name '*.7z' -exec cp {} out \; + touch $1.finished + ;; + +packdebug) ## package debug package + cd work + rm -rf out/*debug*.7z + arch=mingw32 + version=$(find binaries/ -name *$arch*debug* | sed 's,.*debug-,,g;s,\.noarch.*,,g') + if test -z "$version"; then + echo no version found + exit 1; + fi + dir=tmp/usr/i686-w64-mingw32/sys-root/mingw + outfile=$PWD/out/$NAME-$ARCHOUT32-$version-debug.7z + (cd $dir; 7z a -r -mx=9 $outfile *.debug *.sym) + + if test -n "$ROOT64"; then + arch=mingw64 + version=$(find binaries/ -name *$arch*debug* | sed 's,.*debug-,,g;s,\.noarch.*,,g') + dir=tmp/usr/x86_64-w64-mingw32/sys-root/mingw + outfile=$PWD/out/$NAME-$ARCHOUT64-$version-debug.7z + (cd $dir; 7z a -r -mx=9 $outfile *.debug *.sym) + fi + touch $1 + ;; + +repacksource) ## repackage source tar ball to 7z + # repackage source package + srcfile=$(find work/tmp -name "$NAME*.xz") + outfile=$(basename $srcfile | sed 's,\.tar\.xz,\.7z,g') + (mkdir -p work/srctmp; cd work/srctmp; tar -xJf ../../$srcfile; 7za a ../out/$outfile *; cd ..; rm -rf srctmp) + touch work/$1.finished + ;; + +createsha) ## create sha256sums + (cd work/out; find -type f -name '*.7z' -o -name '*.exe' | sed 's,\./,,g' | sort | xargs sha256sum > $NAME.sha256sum) + touch work/$1.finished + ;; + +upload) ## upload files to staging area + for i in $(find work/out -name '*.7z' -o -name '*.exe'); do + curl -T $i ftp://upload.kde.org/incoming/ + done + touch work/$1.finished + ;; + +createdescription) ## create ticket description + description="Please move the $NAME related files which has been uploaded to upload.kde.org/incoming to download mirror 'stable/$NAME/$VERSION' location and please update the symbolic link 'stable/$NAME/latest' to 'stable/$NAME/$VERSION'" + sums=$(cat work/out/$NAME.sha256sum | gawk 'BEGIN { print "dir shasum file"} $2 ~ /i686/ { print "win32 " $0 } $2 ~ /x86_64/ { print "win64 " $0 } $2 ~ /[a-z]+-[0-9]/ { print "src " $0 }') + echo -e "$description\n\n$sums" + touch work/$1.finished + ;; + +ticket) ## submit phabricator ticket + description=$($0 createdescription) + curl $PHABURL/api/maniphest.createtask \ + -d api.token=$apitoken \ + -d "title=tarball move request for stable/$NAME/$VERSION" \ + -d "description=$description" \ + -d "$options" + touch work/$1.finished + ;; + +sf) ## run all required targets for releasing on sourceforge + $self clean + $self download + $self unpack + $self movepackage + $self repacksource + $self packdebug + $self createsha + echo "All release related files are located in work/out" + ls work/out + touch work/$1.finished + ;; + +kde) ## run all required targets for releasing on download.kde.org + $self clean + $self download + $self unpack + $self movepackage + $self repacksource + $self packdebug + $self createsha + $self upload + echo "Content for ticket creating:" + $self createdescription + echo run "$0 ticket" to submit ticket + touch work/$1.finished + ;; + +*) + echo "Make sure to setup VERSION inside $0 and run" + echo "$0 all" + echo + echo "or run single targets" + echo + gawk '$0 ~ /^[a-z].*) ##/ { sub(/) ##/,"",$0); a = $1; $1 = ""; printf(" %-20s - %s\n",a, $0); }' $0 + ;; +esac + +exit 0