diff --git a/README b/README index 1dd12e3..5f7df7a 100644 --- a/README +++ b/README @@ -19,4 +19,10 @@ Command to stop the servers (TBD) swift-init main stop Command to gracefully reload the servers - swift-init main reload \ No newline at end of file + swift-init main reload + +Building RPMs. RPMs will be located in the 'build' directory. + $ bash makerpm.sh + +Building RPM with a specific release value, useful for automatic Jenkin builds + $ PROG_RELEASE=123 bash makerpm.sh diff --git a/gluster/swift/__init__.py b/gluster/swift/__init__.py index ef350fd..14bb4e8 100644 --- a/gluster/swift/__init__.py +++ b/gluster/swift/__init__.py @@ -1,10 +1,18 @@ -""" Gluster Swift UFO """ +""" Gluster for Swift """ -class Version(object): - def __init__(self, canonical_version, final): +class PkgInfo(object): + def __init__(self, canonical_version, name, final): self.canonical_version = canonical_version + self.name = name self.final = final + def save_config(self, filename): + """Crates a file with the package configuration + which can be sourced by a bash script""" + with open(filename, 'w') as fd: + fd.write("PKG_NAME=%s\n" % self.name) + fd.write("PKG_VERSION=%s\n" % self.canonical_version) + @property def pretty_version(self): if self.final: @@ -13,6 +21,9 @@ class Version(object): return '%s-dev' % (self.canonical_version,) -_version = Version('1.1', False) -__version__ = _version.pretty_version -__canonical_version__ = _version.canonical_version +### +### Change the Package version here +### +_pkginfo = PkgInfo('1.8.0', 'glusterfs-openstack-swift', False) +__version__ = _pkginfo.pretty_version +__canonical_version__ = _pkginfo.canonical_version diff --git a/gluster-swift.spec b/glusterfs-openstack-swift.spec similarity index 88% rename from gluster-swift.spec rename to glusterfs-openstack-swift.spec index af80e40..f9b8643 100644 --- a/gluster-swift.spec +++ b/glusterfs-openstack-swift.spec @@ -15,11 +15,17 @@ %endif %define _confdir %{_sysconfdir}/swift -%define _version 1.3 -%define _release 0 + +# The following values are provided by passing the following arguments +# to rpmbuild. For example: +# --define "_version 1.0" --define "_release 1" --define "_name g4s" +# +%{!?_version:%define _version XXX} +%{!?_release:%define _release XXX} +%{!?_name:%define _name XXX} Summary : GlusterFS Integration with OpenStack Object Storage (Swift). -Name : gluster-for-swift +Name : %{_name} Version : %{_version} Release : %{_release} Group : Application/File @@ -61,6 +67,9 @@ cp -r etc/* %{buildroot}/%{_confdir}/ mkdir -p %{buildroot}/%{_bindir}/ cp bin/gluster-swift-gen-builders %{buildroot}/%{_bindir}/ +# Remove tests +%{__rm} -rf %{buildroot}/%{python_sitelib}/test + %clean rm -rf %{buildroot} diff --git a/makerpm.sh b/makerpm.sh new file mode 100644 index 0000000..6427df6 --- /dev/null +++ b/makerpm.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# Simple script to create RPMs for G4S + +cleanup() +{ + rm -rf ${RPMBUILDDIR} > /dev/null 2>&1 + rm -f ${PKGCONFIG} > /dev/null 2>&1 +} + +fail() +{ + cleanup + echo $1 + exit $2 +} + +create_dir() +{ + if [ ! -d "$1" ] ; then + mkdir -p "$1" + if [ $? -ne 0 ] ; then + fail "Unable to create dir $1" $? + fi + fi +} + +gittotar() +{ + # Only archives committed changes + git archive --format=tar.gz --prefix=${SRCTAR_DIR}/ HEAD --output ${SRCTAR} + if [ $? -ne 0 ] ; then + fail "Unable to create git archive" $? + fi +} + +prep() +{ + rm -rf ${RPMBUILDDIR} > /dev/null 2>&1 + create_dir ${RPMBUILDDIR} + + # Create a tar file out of the current committed changes + gittotar + +} + +create_rpm() +{ + # Create the rpm + # _topdir Notifies rpmbuild the location of the root directory + # containing the RPM information + # _release Allows Jenkins to setup the version using the + # build number + rpmbuild --define "_topdir ${RPMBUILDDIR}" \ + --define "_release ${PKG_RELEASE}" \ + --define "_version ${PKG_VERSION}" \ + --define "_name ${PKG_NAME}" \ + -ta ${SRCTAR} + if [ $? -ne 0 ] ; then + fail "Unable to create rpm" $? + fi + + # Move the rpms to the root directory + mv ${RPMBUILDDIR_RPMS}/noarch/*rpm ${BUILDDIR} + if [ $? -ne 0 ] ; then + fail "Unable to move rpm to ${BUILDDIR}" $? + fi + + echo "RPMS are now available in ${BUILDDIR}" +} + +################## MAIN ##################### + +# Create a config file with the package information +PKGCONFIG=${PWD}/pkgconfig.in +env python pkgconfig.py +if [ ! -f "${PKGCONFIG}" ] ; then + fail "Unable to create package information file ${PKGCONFIG}" 1 +fi + +# Get PKG_NAME and PKG_VERSION +. ${PKGCONFIG} +if [ -z "${PKG_NAME}" ] ; then + fail "Unable to read the package name from the file created by pkgconfig.py" 1 +fi +if [ -z "${PKG_VERSION}" ] ; then + fail "Unable to read the package version from the file created by pkgconfig.py" 1 +fi + +# +# This can be set by JENKINS builds +# If the environment variable PKG_RELEASE +# has not been set, then we set it locally to +# a default value +# +if [ -z "$PKG_RELEASE" ] ; then + PKG_RELEASE=0 +fi + + +BUILDDIR=$PWD/build +RPMBUILDDIR=${BUILDDIR}/rpmbuild +RPMBUILDDIR_RPMS=${RPMBUILDDIR}/RPMS +SRCNAME=${PKG_NAME}-${PKG_VERSION}-${PKG_RELEASE} +SRCTAR_DIR=${PKG_NAME}-${PKG_VERSION} +SRCTAR=${RPMBUILDDIR}/${SRCNAME}.tar.gz + +prep +create_rpm +cleanup diff --git a/pkgconfig.py b/pkgconfig.py new file mode 100644 index 0000000..2895ceb --- /dev/null +++ b/pkgconfig.py @@ -0,0 +1,8 @@ +# Simple program to save all package information +# into a file which can be sourced by a bash script + +from gluster.swift import _pkginfo as pkginfo + +PKGCONFIG='pkgconfig.in' + +pkginfo.save_config(PKGCONFIG) diff --git a/setup.py b/setup.py index 2da9353..7c23a67 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,7 @@ setup( license='Apache License (2.0)', author='Red Hat, Inc.', author_email='gluster-users@gluster.org', - url='https://gluster.org/', + url='https://forge.gluster.org/gluster-swift', packages=find_packages(exclude=['test', 'bin']), test_suite='nose.collector', classifiers=[