e01eb44f2c
Currently all flock packages have a common base version of 1.0 or 1.0.0 defined in specfiles. The build system creates tarballs and whl files with the base version (without TIS_PATCH_VER) and the version is also attached the generated RPM file (with TIS_PATCH_VER). This patch addes PBR (OpenStack's Python Build Reasonableness) support, which can generate the version by parsing semantically-versioned Git tags and walking the Git history back to the last release tag. A new variable named PBR_VERSION is supported in build_srpm.data. If its is not set, the build system still uses TIS_PATCH_VER like before. If PBR_VERSION=auto, the build system will generate the version by PBR and create tarballs, whl files and RPM files with this version. If PBR_VERSION is set manually, the build system will use it directly. Story: 2006703 Task: 37014 Change-Id: Ic377e3ae3344b291d2d9c0d0fca8f681d1a007b5 Signed-off-by: Bin Yang <bin.yang@intel.com> Signed-off-by: Yang, Bin <bin.yang@intel.com>
272 lines
8.4 KiB
Bash
Executable File
272 lines
8.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# set -x
|
|
|
|
source "$SRC_BASE/build-tools/spec-utils"
|
|
source "$SRC_BASE/build-tools/srpm-utils"
|
|
|
|
CUR_DIR=`pwd`
|
|
BUILD_DIR="$RPMBUILD_BASE"
|
|
|
|
if [ "x$DATA" == "x" ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): Environment variable 'DATA' not defined."
|
|
exit 1
|
|
fi
|
|
|
|
srpm_source_build_data $DATA
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): Failed to source build data from $DATA"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "x$PBR_VERSION" != "x" ] && [ "x$PBR_VERSION" != "xNA" ]; then
|
|
VERSION=$PBR_VERSION
|
|
fi
|
|
|
|
if [ "x$VERSION" == "x" ]; then
|
|
for SPEC in `find $SPECS_BASE -name '*.spec' | sort -V`; do
|
|
SPEC_PATH="$SPEC"
|
|
|
|
VERSION_DERIVED=`spec_evaluate '%{version}' "$SPEC_PATH" 2>> /dev/null`
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): '%{version}' not found in '$PKG_BASE/$SPEC_PATH'"
|
|
VERSION_DERIVED=""
|
|
fi
|
|
|
|
if [ "x$VERSION_DERIVED" != "x" ]; then
|
|
if [ "x$VERSION" == "x" ]; then
|
|
VERSION=$VERSION_DERIVED
|
|
else
|
|
if [ "x$SRC_DIR" != "x" ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): multiple spec files found, can't set VERSION automatically"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ "x$VERSION" == "x" ]; then
|
|
if [ -f $SRC_DIR/PKG-INFO ]; then
|
|
VERSION=$(grep '^Version:' $SRC_DIR/PKG-INFO | awk -F ': ' '{print $2}' | sed -e 's/^[[:space:]]*//')
|
|
fi
|
|
fi
|
|
|
|
if [ "x$VERSION" != "x" ]; then
|
|
echo "Derived VERSION=$VERSION"
|
|
else
|
|
echo "ERROR: default_build_srpm (${LINENO}): Failed to derive a good VERSION from SPEC file, and none provided."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "x$TAR_NAME" == "x" ]; then
|
|
for SPEC in `find $SPECS_BASE -name '*.spec' | sort -V`; do
|
|
SPEC_PATH="$SPEC"
|
|
|
|
SERVICE=`spec_find_global service "$SPEC_PATH" 2>> /dev/null`
|
|
if [ $? -eq 0 ]; then
|
|
if [ "x$TAR_NAME" == "x" ]; then
|
|
TAR_NAME=$SERVICE
|
|
else
|
|
if [ "x$SRC_DIR" != "x" ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): multiple spec files found, can't set TAR_NAME automatically"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
NAME=`spec_find_tag Name "$SPEC_PATH" 2>> /dev/null`
|
|
if [ $? -eq 0 ]; then
|
|
if [ "x$TAR_NAME" == "x" ]; then
|
|
TAR_NAME=$NAME
|
|
else
|
|
if [ "x$SRC_DIR" != "x" ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): multiple spec files found, can't set TAR_NAME automatically"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
echo "WARNING: default_build_srpm (${LINENO}): 'Name' not found in '$SPEC_PATH'"
|
|
NAME=""
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ "x$TAR_NAME" == "x" ]; then
|
|
if [ -f $SRC_DIR/PKG-INFO ]; then
|
|
TAR_NAME=$(grep '^Name:' $SRC_DIR/PKG-INFO | awk -F ': ' '{print $2}' | sed -e 's/^[[:space:]]*//')
|
|
fi
|
|
fi
|
|
|
|
if [ "x$TAR_NAME" != "x" ]; then
|
|
echo "Derived TAR_NAME=$TAR_NAME"
|
|
else
|
|
echo "ERROR: default_build_srpm (${LINENO}): Failed to derive a good TAR_NAME from SPEC file, and none provided."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "x$TAR" == "x" ]; then
|
|
TAR="$TAR_NAME-$VERSION.tar.gz"
|
|
fi
|
|
|
|
SOURCE_PATH="$BUILD_DIR/SOURCES"
|
|
TAR_PATH="$SOURCE_PATH/$TAR"
|
|
STAGING=""
|
|
|
|
if [ "x$COPY_LIST_TO_TAR" != "x" ] || [ "x$EXCLUDE_LIST_FROM_TAR" != "x" ]; then
|
|
STAGING="$BUILD_DIR/staging"
|
|
mkdir -p $STAGING
|
|
fi
|
|
|
|
mkdir -p "$BUILD_DIR/SRPMS"
|
|
mkdir -p "$SOURCE_PATH"
|
|
|
|
if [ "x$SRC_DIR" == "x" -a "x$COPY_LIST" == "x" -a "$ALLOW_EMPTY_RPM" != "true" ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): '$PWD/$DATA' failed to provide at least one of 'SRC_DIR' or 'COPY_LIST'"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "x$SRC_DIR" != "x" ]; then
|
|
if [ ! -d "$SRC_DIR" ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): directory not found: '$SRC_DIR'"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "x$COPY_LIST" != "x" ]; then
|
|
echo "COPY_LIST: $COPY_LIST"
|
|
for p in $COPY_LIST; do
|
|
# echo "COPY_LIST: $p"
|
|
\cp -L -u -r -v $p $SOURCE_PATH
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): COPY_LIST: file not found: '$p'"
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ "x$STAGING" != "x" ]; then
|
|
\cp -L -u -r -v $SRC_DIR $STAGING
|
|
echo "COPY_LIST_TO_TAR: $COPY_LIST_TO_TAR"
|
|
for p in $COPY_LIST_TO_TAR; do
|
|
# echo "COPY_LIST_TO_TAR: $p"
|
|
\cp -L -u -r -v $p $STAGING/$SRC_DIR
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): COPY_LIST_TO_TAR: file not found: '$p'"
|
|
exit 1
|
|
fi
|
|
done
|
|
echo "EXCLUDE_LIST_FROM_TAR: $EXCLUDE_LIST_FROM_TAR"
|
|
for p in $EXCLUDE_LIST_FROM_TAR; do
|
|
# echo "EXCLUDE_LIST_FROM_TAR: $p"
|
|
echo "rm -rf $STAGING/$SRC_DIR/$p"
|
|
\rm -rf $STAGING/$SRC_DIR/$p
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): EXCLUDE_LIST_FROM_TAR: could not remove file: '$p'"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
fi
|
|
|
|
TRANSFORM=`echo "$SRC_DIR" | sed 's/^\./\\./' | sed 's:^/::' | sed 's#^.*/\.\./##'`
|
|
|
|
if [ "x$STAGING" != "x" ]; then
|
|
pushd $STAGING
|
|
fi
|
|
|
|
TAR_NEEDED=0
|
|
if [ "x$SRC_DIR" != "x" ]; then
|
|
echo "SRC_DIR=$SRC_DIR"
|
|
if [ -f $TAR_PATH ]; then
|
|
n=`find . -cnewer $TAR_PATH -and ! -path './.git*' \
|
|
-and ! -path './build/*' \
|
|
-and ! -path './.pc/*' \
|
|
-and ! -path './patches/*' \
|
|
-and ! -path "./$DISTRO/*" \
|
|
-and ! -path './pbr-*.egg/*' \
|
|
| wc -l`
|
|
if [ $n -gt 0 ]; then
|
|
TAR_NEEDED=1
|
|
fi
|
|
else
|
|
TAR_NEEDED=1
|
|
fi
|
|
fi
|
|
|
|
if [ $TAR_NEEDED -gt 0 ]; then
|
|
echo "Creating tar file: $TAR_PATH ..."
|
|
echo "tar czf $TAR_PATH $SRC_DIR --exclude '.git*' --exclude 'build' --exclude='.pc' --exclude='patches' --exclude='$SRC_DIR/$DISTRO' --exclude='pbr-*.egg' --transform 's,^$TRANSFORM,$TAR_NAME-$VERSION,'"
|
|
tar czf $TAR_PATH $SRC_DIR --exclude '.git*' --exclude 'build' --exclude='.pc' --exclude='patches' --exclude="$SRC_DIR/$DISTRO" --exclude='pbr-*.egg' --transform "s,^$TRANSFORM,$TAR_NAME-$VERSION,"
|
|
if [ $? -ne 0 ]; then
|
|
if [ "x$STAGING" != "x" ]; then
|
|
popd
|
|
fi
|
|
|
|
echo "ERROR: default_build_srpm (${LINENO}): failed to create tar file, cmd: tar czf $TAR_PATH $SRC_DIR --exclude '.git*' --exclude 'build' --exclude='.pc' --exclude='patches' --exclude="$SRC_DIR/$DISTRO" --exclude='pbr-*.egg' --transform \"s,^$TRANSFORM,$TAR_NAME-$VERSION,\""
|
|
exit 1
|
|
fi
|
|
echo "Created tar file: $TAR_PATH"
|
|
else
|
|
echo "Tar file not needed."
|
|
fi
|
|
|
|
if [ "x$STAGING" != "x" ]; then
|
|
popd
|
|
fi
|
|
|
|
if [ ! -d $BUILD_DIR/SPECS ]; then
|
|
echo "Spec directory '$BUILD_DIR/SPECS' does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
if [ $(ls -1 $BUILD_DIR/SPECS/*.spec | wc -l) -eq 0 ]; then
|
|
echo "No spec files found in spec directory '$BUILD_DIR/SPECS'"
|
|
exit 1
|
|
fi
|
|
|
|
for SPEC in `ls -1 $BUILD_DIR/SPECS`; do
|
|
SPEC_PATH="$BUILD_DIR/SPECS/$SPEC"
|
|
RELEASE=`spec_find_tag Release "$SPEC_PATH" 2>> /dev/null`
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): 'Release' not found in '$SPEC_PATH'"
|
|
fi
|
|
NAME=`spec_find_tag Name "$SPEC_PATH" 2>> /dev/null`
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: default_build_srpm (${LINENO}): 'Name' not found in '$SPEC_PATH'"
|
|
fi
|
|
SRPM="$NAME-$VERSION-$RELEASE.src.rpm"
|
|
SRPM_PATH="$BUILD_DIR/SRPMS/$SRPM"
|
|
|
|
spec_validate_tis_release $SPEC_PATH
|
|
if [ $? -ne 0 ]; then
|
|
echo "TIS Validation of $SPEC_PATH failed"
|
|
exit 1
|
|
fi
|
|
|
|
BUILD_NEEDED=0
|
|
if [ -f $SRPM_PATH ]; then
|
|
n=`find . -cnewer $SRPM_PATH | wc -l`
|
|
if [ $n -gt 0 ]; then
|
|
BUILD_NEEDED=1
|
|
fi
|
|
else
|
|
BUILD_NEEDED=1
|
|
fi
|
|
|
|
if [ $BUILD_NEEDED -gt 0 ]; then
|
|
echo "SPEC file: $SPEC_PATH"
|
|
echo "SRPM build directory: $BUILD_DIR"
|
|
echo "TIS_PATCH_VER: $TIS_PATCH_VER"
|
|
echo "PBR_VERSION: $PBR_VERSION"
|
|
|
|
sed -i -e "1 i%define _tis_build_type $BUILD_TYPE" $SPEC_PATH
|
|
sed -i -e "1 i%define tis_patch_ver $TIS_PATCH_VER" $SPEC_PATH
|
|
sed -i -e "1 i%define pbr_version $PBR_VERSION" $SPEC_PATH
|
|
rpmbuild -bs $SPEC_PATH --define="%_topdir $BUILD_DIR" --undefine=dist --define="_tis_dist .tis"
|
|
else
|
|
echo "SRPM build not needed"
|
|
fi
|
|
done
|
|
|
|
|