2013-11-16 00:58:46 +01:00
#!/bin/bash
2014-05-31 15:31:42 +02:00
#set -vx
2013-11-16 00:58:46 +01:00
2016-03-30 15:00:02 +02:00
# Set arguments via environment variables.
# Argument can be omited and defaults will be detected.
#
# BUILDTYPE=|SRPM
# NM_RPMBUILD_ARGS=<additional argus for rpmbuild>
# RELEASE_VERSION=
# VERSION=
# COMMIT_FULL=
# COMMIT=
# USERNAME=
# SPECFILE=
# SOURCE=<path>
# SOURCE_FROM_GIT=|1|0
# SOURCE_NETWORKMANAGER_CONF=
# SOURCE_CONFIG_SERVER=
# SOURCE_CONFIG_CONNECTIVITY_FEDORA=
2013-11-16 00:58:46 +01:00
die( ) {
echo " $* " >& 2
exit 1
}
# copy output also to logfile
LOG( ) {
echo " $* "
}
2016-03-30 13:46:36 +02:00
coerce_bool( ) {
case " $1 " in
no| n| NO| N| 0)
echo 0
; ;
yes| y| YES| Y| 1)
echo 1
; ;
"" )
printf '%s' " $2 "
; ;
esac
}
2013-11-16 00:58:46 +01:00
abs_path( ) {
local F = " $1 "
if [ [ " $F " != "" ] ] ; then
2016-03-30 13:46:36 +02:00
F = " $( cd " $ORIGDIR " && readlink -f " $F " ) " || exit 55
[ [ -f " $F " ] ] || exit 55
2013-11-16 00:58:46 +01:00
else
2016-03-30 13:46:36 +02:00
F = " $2 "
2013-11-16 00:58:46 +01:00
fi
2016-03-30 13:46:36 +02:00
printf '%s' " $F "
exit 0
2013-11-16 00:58:46 +01:00
}
get_version( ) {
2014-12-12 15:06:07 -06:00
local major minor micro
2013-11-16 00:58:46 +01:00
local F = " ${ 1 :- " $GITDIR /configure.ac " } "
2014-12-12 15:06:07 -06:00
vars = " $( sed -n 's/^m4_define(\[nm_\(major\|minor\|micro\)_version\], *\[\([0-9]\+\)\]) *$/local \1=' \' '\2' \' '/p' " $F " 2>/dev/null) "
2013-11-16 00:58:46 +01:00
eval " $vars "
2014-12-12 15:06:07 -06:00
[ [ -n " $major " && -n " $minor " && " $micro " ] ] || return 1
echo " $major . $minor . $micro "
2013-11-16 00:58:46 +01:00
}
2014-05-31 15:35:44 +02:00
write_changelog( ) {
if [ [ " x $CHANGELOG " = = x ] ] ; then
cat <<- EOF
2016-05-05 21:56:20 +02:00
* $( LC_TIME = C date '+%a %b %d %Y' ) $USERNAME - %{ epoch_version} :%{ version} -%{ release_version} %{ ?snap}
2014-06-25 17:06:42 +02:00
- build of NetworkManager ( $DATE , uuid: $UUID , git: $COMMIT_FULL )
2014-05-31 15:35:44 +02:00
$( git log -n20 --date= local --format= '- %h %s [%an] (%ci)' )
- ...
EOF
else
echo " $CHANGELOG "
fi > " $TEMP /SOURCES/CHANGELOG "
}
2013-11-16 00:58:46 +01:00
ORIGDIR = " $( readlink -f " $PWD " ) "
2014-04-02 19:10:54 +02:00
SCRIPTDIR = " $( dirname " $( readlink -f " $0 " ) " ) "
2013-11-16 00:58:46 +01:00
LOG " Change to directory \" $SCRIPTDIR \" "
cd " $SCRIPTDIR " || die " could not change into $SCRIPTDIR "
GITDIR = " $( cd " $SCRIPTDIR " && git rev-parse --show-toplevel || die "Could not get GITDIR" ) "
DATE = " $( date '+%Y%m%d-%H%M%S' ) "
BUILDLOG = " $( mktemp ./.build.log.XXXXXXX) "
chmod +r " $BUILDLOG "
exec > >( tee " $BUILDLOG " )
exec 2>& 1
UUID = ` uuidgen`
2014-10-13 22:34:41 +02:00
RELEASE_VERSION = " ${ RELEASE_VERSION :- $( git rev-list HEAD | wc -l) } "
2013-11-16 00:58:46 +01:00
VERSION = " ${ VERSION :- $( get_version || die " Could not read $VERSION " ) } "
2014-06-25 17:06:42 +02:00
COMMIT_FULL = " ${ COMMIT_FULL :- $( git rev-parse --verify HEAD || die "Error reading HEAD revision" ) } "
2016-03-30 15:00:02 +02:00
COMMIT = " ${ COMMIT :- $( printf '%s' " $COMMIT_FULL " | sed 's/^\(.\{10\}\).*/\1/' || die "Error reading HEAD revision" ) } "
2013-11-16 00:58:46 +01:00
USERNAME = " ${ USERNAME :- " $( git config user.name) < $( git config user.email) > " } "
2016-03-30 13:46:36 +02:00
SPECFILE = " $( abs_path " $SPECFILE " " $SCRIPTDIR /NetworkManager.spec " ) " || die "invalid \$SPECFILE argument"
SOURCE_FROM_GIT = " $( coerce_bool " $SOURCE_FROM_GIT " "" ) "
SOURCE = " $( abs_path " $SOURCE " ) " || die "invalid \$SOURCE argument"
if [ -n " $SOURCE " ] ; then
[ [ " $SOURCE_FROM_GIT " = = 1 ] ] && die "Cannot set both \$SOURCE and \$SOURCE_FROM_GIT=1"
SOURCE_FROM_GIT = 0
2016-04-01 15:54:06 +02:00
elif [ [ " $SOURCE_FROM_GIT " != "1" ] ] ; then
SOURCE = " $( ls -1 " $GITDIR /NetworkManager- ${ VERSION } .tar. " * 2>/dev/null | head -n1) "
if [ [ -z " $SOURCE " ] ] ; then
[ [ " $SOURCE_FROM_GIT " = = "0" ] ] && die "Either set \$SOURCE or set \$SOURCE_FROM_GIT=1"
2016-03-30 13:46:36 +02:00
SOURCE_FROM_GIT = 1
2016-04-01 15:54:06 +02:00
else
SOURCE_FROM_GIT = 0
2016-03-30 13:46:36 +02:00
fi
2016-03-30 13:25:33 +02:00
fi
2016-03-30 13:46:36 +02:00
SOURCE_NETWORKMANAGER_CONF = " $( abs_path " $SOURCE_NETWORKMANAGER_CONF " " $SCRIPTDIR /NetworkManager.conf " ) " || die "invalid \$SOURCE_NETWORKMANAGER_CONF argument"
SOURCE_CONFIG_SERVER = " $( abs_path " $SOURCE_CONFIG_SERVER " " $SCRIPTDIR /00-server.conf " ) " || die "invalid \$SOURCE_CONFIG_SERVER argument"
SOURCE_CONFIG_CONNECTIVITY_FEDORA = " $( abs_path " $SOURCE_CONFIG_CONNECTIVITY_FEDORA " " $SCRIPTDIR /20-connectivity-fedora.conf " ) " || die "invalid \$SOURCE_CONFIG_CONNECTIVITY_FEDORA argument"
2014-05-31 15:31:42 +02:00
TEMP = " $( mktemp -d " $SCRIPTDIR /NetworkManager. $DATE .XXXXXX " ) "
TEMPBASE = " $( basename " $TEMP " ) "
2016-03-30 13:46:36 +02:00
if [ [ " $SOURCE_FROM_GIT " = = "1" ] ] ; then
SOURCE = " $TEMP /NetworkManager- ${ VERSION } .tar.xz "
( cd " $GITDIR " && git archive --prefix= " NetworkManager- $VERSION " / " $COMMIT_FULL " ) | xz > " $SOURCE "
fi
2013-11-16 00:58:46 +01:00
LOG " VERSION= $VERSION "
LOG " RELEASE_VERSION= $RELEASE_VERSION "
2016-03-30 15:00:02 +02:00
LOG " COMMIT_FULL= $COMMIT_FULL "
2013-11-16 00:58:46 +01:00
LOG " COMMIT= $COMMIT "
LOG " USERNAME= $USERNAME "
LOG " SPECFILE= $SPECFILE "
LOG " SOURCE= $SOURCE "
2016-03-30 13:46:36 +02:00
LOG " SOURCE_FROM_GIT= $SOURCE_FROM_GIT "
2013-11-16 00:58:46 +01:00
LOG " SOURCE_NETWORKMANAGER_CONF= $SOURCE_NETWORKMANAGER_CONF "
2014-07-02 19:17:42 +02:00
LOG " SOURCE_CONFIG_SERVER= $SOURCE_CONFIG_SERVER "
LOG " SOURCE_CONFIG_CONNECTIVITY_FEDORA= $SOURCE_CONFIG_CONNECTIVITY_FEDORA "
2016-03-30 15:00:02 +02:00
LOG " BUILDTYPE= $BUILDTYPE "
LOG " NM_RPMBUILD_ARGS= $NM_RPMBUILD_ARGS "
LOG ""
LOG " UUID= $UUID "
2014-05-31 15:31:42 +02:00
LOG " BASEDIR= $TEMP "
2013-11-16 00:58:46 +01:00
ln -snf " $TEMPBASE " ./latest0
ln " $BUILDLOG " " $TEMPBASE /build.log "
rm -f " $BUILDLOG "
TEMPSPEC = " $TEMP /SPECS/NetworkManager.spec "
mkdir -p " $TEMP /SOURCES/ " " $TEMP /SPECS/ " || die "error creating SPECS directoy"
cp " $SOURCE " " $TEMP /SOURCES/ " || die " Could not copy source $SOURCE to $TEMP /SOURCES "
cp " $SOURCE_NETWORKMANAGER_CONF " " $TEMP /SOURCES/NetworkManager.conf " || die " Could not copy source $SOURCE_NETWORKMANAGER_CONF to $TEMP /SOURCES "
2014-07-02 19:17:42 +02:00
cp " $SOURCE_CONFIG_SERVER " " $TEMP /SOURCES/00-server.conf " || die " Could not copy source $SOURCE_CONFIG_SERVER to $TEMP /SOURCES "
cp " $SOURCE_CONFIG_CONNECTIVITY_FEDORA " " $TEMP /SOURCES/20-connectivity-fedora.conf " || die " Could not copy source $SOURCE_CONFIG_CONNECTIVITY_FEDORA to $TEMP /SOURCES "
2013-11-16 00:58:46 +01:00
2014-05-31 15:35:44 +02:00
write_changelog
2013-11-16 00:58:46 +01:00
sed -e " s/__VERSION__/ $VERSION /g " \
2014-05-31 15:31:42 +02:00
-e " s/__RELEASE_VERSION__/ $RELEASE_VERSION /g " \
2013-11-16 00:58:46 +01:00
-e " s/__COMMIT__/ $COMMIT /g " \
2014-06-25 17:06:42 +02:00
-e " s/__COMMIT_FULL__/ $COMMIT_FULL /g " \
2016-05-05 21:56:20 +02:00
-e " s/__SNAPSHOT__/ $SNAPSHOT /g " \
2013-11-16 00:58:46 +01:00
-e " s/__SOURCE1__/ $( basename " $SOURCE " ) /g " \
" $SPECFILE " |
sed -e " /^__CHANGELOG__ $/ \
{
r $TEMPBASE /SOURCES/CHANGELOG
d
} " > " $TEMPSPEC " || die " Error reading spec file"
2014-11-07 21:21:49 +01:00
case " $BUILDTYPE " in
2016-03-30 13:46:36 +02:00
"SRPM" )
RPM_BUILD_OPTION = -bs
; ;
*)
RPM_BUILD_OPTION = -ba
; ;
2014-11-07 21:21:49 +01:00
esac
2016-02-02 12:57:35 +01:00
rpmbuild --define " _topdir $TEMP " $RPM_BUILD_OPTION " $TEMPSPEC " $NM_RPMBUILD_ARGS || die "ERROR: rpmbuild FAILED"
2013-11-16 00:58:46 +01:00
ln -snf " $TEMPBASE " ./latest
2014-05-31 15:31:42 +02:00
TEMP_LATEST = " $( readlink -f .) " /latest
LOG
LOG
LOG "Finished with success."
LOG
LOG " See \" $TEMP_LATEST /\" which symlinks to \" $TEMPBASE \" "
LOG
LOG "Result:"
2014-11-07 21:21:49 +01:00
ls -dla " $TEMP_LATEST " " $( dirname " $TEMP_LATEST " ) / $TEMPBASE / " " $TEMP_LATEST " /RPMS/*/ " $TEMP_LATEST " /RPMS/*/*.rpm " $TEMP_LATEST " /SRPMS/ " $TEMP_LATEST " /SRPMS/*.rpm 2>/dev/null | sed 's/^/ /'
2016-02-26 14:26:56 +01:00
LOG
LOG " sudo $( which dnf & >/dev/null && echo dnf || echo yum) install ' $TEMP_LATEST /RPMS'/*/*.rpm "
LOG
2013-11-16 00:58:46 +01:00