git-lfs/rpm/build_rpms.bsh
Andy Neff 7ca335be04 Dockers working for centos and debian with GPG signing
Fixed git clean to only be in build_rpms for centos path
Added tests for all distros
Added some options like GPG cache, and auto remove
Fixed rpm expect script to work always
Enabled gpg check for centos repos
Fixed golang build bug for CentOS 5
2015-07-23 23:18:36 -04:00

168 lines
5.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu
CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd)
SPEC=${CURDIR}/SPECS/git-lfs.spec
VERSION=$(\grep '^const Version' "${CURDIR}/../lfs/lfs.go" | sed 's|const Version = "\([0-9.]*\)"|\1|')
if [[ ${NODEPS:-0} == 0 ]]; then
RPMBUILD=(rpmbuild --define "_topdir ${CURDIR}")
else
RPMBUILD=(rpmbuild --define "_topdir ${CURDIR}" --nodeps)
fi
LOG=${CURDIR}/build.log
SUDO=${SUDO=`if which sudo > /dev/null 2>&1; then echo sudo; fi`}
export PATH=${PATH}:/usr/local/bin
exec 6>&1
exec 7>&2
exec > $LOG
exec 2>> $LOG
set -vx
echo "Downloading/checking for some essentials..." >&6
if which git > /dev/null 2>&1; then
GIT_VERSION=($(git --version))
IFS_OLD=${IFS}
IFS=.
GIT_VERSION=(${GIT_VERSION[2]})
IFS=${IFS_OLD}
else
GIT_VERSION=(0 0 0)
fi
REDHAT_VERSION=($(head -n 1 /etc/redhat-release | \grep -Eo '[0-9]+'))
REDHAT_NAME=$(awk '{print $1}' /etc/redhat-release)
if [[ ${REDHAT_VERSION[0]} == 5 ]]; then
if ! rpm -q epel-release > /dev/null 2>&1; then
$SUDO yum install -y epel-release
fi
fi
$SUDO yum install -y make curl which rpm-build tar bison perl-Digest-SHA
mkdir -p ${CURDIR}/{BUILD,BUILDROOT,SOURCES,RPMS,SRPMS}
if ( [[ ${GIT_VERSION[0]} == 1 ]] && [[ ${GIT_VERSION[1]} < 8 ]] ) || [[ ${GIT_VERSION[0]} < 1 ]]; then
if [[ ${REDHAT_VERSION[0]} != 6 ]]; then
$SUDO yum install -y git
else
$SUDO yum install -y curl-devel expat-devel gettext openssl-devel zlib-devel perl-Error perl-ExtUtils-MakeMaker emacs asciidoc xmlto gcc
#I only include emacs here because the real RHEL rpm create emacs hook, so I will too for MAX compatibility
pushd ${CURDIR}/SOURCES
curl -L -O http://vault.centos.org/6.6/os/Source/SPackages/git-1.7.1-3.el6_4.1.src.rpm
rpm2cpio git-1.7.1-3.el6_4.1.src.rpm | cpio -div git-init.el git.xinetd.in git.conf.httpd git-gui.desktop gitweb.conf.in
NEW_GIT_VERSION=$(\grep ^Version: ${CURDIR}/SPECS/git.spec | sed 's|Version:\s*\(.*\)|\1|')
curl -L -O http://kernel.org/pub/software/scm/git/git-${NEW_GIT_VERSION}.tar.xz
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/git.spec
$SUDO yum install -y --nogpgcheck ${CURDIR}/RPMS/*/git-${NEW_GIT_VERSION}*.rpm ${CURDIR}/RPMS/*/perl-Git-${NEW_GIT_VERSION}*.rpm
popd
fi
fi
#Prep the SOURCES dir for git-lfs
if [ "${BUILD_LOCAL:=0}" == "1" ]; then
echo "Zipping up current checkout of git-lfs..." >&6
rm -rvf ${CURDIR}/tmptar
mkdir -p ${CURDIR}/tmptar/git-lfs-${VERSION}
pushd ${CURDIR}/..
#I started running out of space in the docker, so I needed to copy a little less waste
tar -c . --exclude tmptar --exclude repos | tar -x -C ${CURDIR}/tmptar/git-lfs-${VERSION}/
popd
pushd ${CURDIR}/tmptar/git-lfs-${VERSION}
git clean -xdf
rm -rvf .git
popd
pushd ${CURDIR}/tmptar
tar -zcf ${CURDIR}/SOURCES/git-lfs-${VERSION}.tar.gz git-lfs-${VERSION}
popd
rm -rvf ${CURDIR}/tmptar
else
echo "Downloading git-lfs..." >&6
mkdir -p ${CURDIR}/SOURCES
pushd ${CURDIR}/SOURCES
curl -L -o git-lfs-${VERSION}.tar.gz https://github.com/github/git-lfs/archive/v${VERSION}.tar.gz
popd
fi
cp ${CURDIR}/../docker/public.key ${CURDIR}/SOURCES/RPM-GPG-KEY-GITLFS
if ! which go; then
echo "Installing go... one way or another" >&6
if [[ ${REDHAT_VERSION[0]} == 5 ]]; then
$SUDO yum install -y curl.x86_64 glibc gcc
${CURDIR}/golang_patch.bsh
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/golang.spec
$SUDO yum install -y --nogpgcheck ${CURDIR}/RPMS/noarch/golang-1*.rpm ${CURDIR}/RPMS/noarch/golang-pkg-bin-linux-amd64-1*.rpm ${CURDIR}/RPMS/noarch/golang-src-1*.noarch.rpm ${CURDIR}/RPMS/noarch/golang-pkg-linux-amd64-1*.noarch.rpm
else
$SUDO yum install -y epel-release
$SUDO yum install -y golang
fi
fi
if which ruby > /dev/null 2>&1; then
IFS_OLD=${IFS}
IFS=.
RUBY_VERSION=($(ruby -e "print RUBY_VERSION"))
IFS=${IFS_OLD}
else
RUBY_VERSION=(0 0 0)
fi
if [[ ${RUBY_VERSION[0]} < 2 ]]; then
if [[ ${REDHAT_VERSION[0]} < 7 ]]; then
echo "Downloading ruby..." >&6
if ! rpm -q epel-release; then
$SUDO yum install -y epel-release #Optional part of centos
fi
$SUDO yum install -y patch libyaml-devel glibc-headers autoconf gcc-c++ glibc-devel readline-devel zlib-devel libffi-devel openssl-devel automake libtool sqlite-devel
pushd ${CURDIR}/SOURCES
curl -L -O http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz
popd
echo "Building ruby..." >&6
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/ruby.spec
echo "Installing ruby..." >&6
$SUDO yum install -y --nogpgcheck ${CURDIR}/RPMS/x86_64/ruby*.rpm
else
$SUDO yum install -y ruby ruby-devel
fi
fi
if ! which ronn; then
echo "Downloading some ruby gems..." >&6
pushd ${CURDIR}/SOURCES
curl -L -O https://rubygems.org/downloads/rdiscount-2.1.8.gem
curl -L -O https://rubygems.org/downloads/hpricot-0.8.6.gem
curl -L -O https://rubygems.org/downloads/mustache-1.0.1.gem
curl -L -O https://rubygems.org/downloads/ronn-0.7.3.gem
popd
echo "Building ruby gems..." >&6
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-rdiscount.spec
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-mustache.spec
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-hpricot.spec
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-ronn.spec
echo "Installing ruby gems..." >&6
$SUDO yum install -y --nogpgcheck $(ls ${CURDIR}/RPMS/noarch/rubygem-*.rpm ${CURDIR}/RPMS/x86_64/rubygem-*.rpm | grep -v debuginfo)
fi
echo "Build git-lfs rpm..." >&6
sed -i 's|\(Version:\s*\).*|\1'"${VERSION}"'|' ${CURDIR}/SPECS/git-lfs.spec
cp ${CURDIR}/../docker/public.key ${CURDIR}/SOURCES/
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/git-lfs.spec
#if [ "`stat -c '%U' ${CURDIR}/SPECS/git-lfs.spec`" == "UNKNOWN" ]; then
# $SUDO cp ${CURDIR}/SPECS/git-lfs.spec ${CURDIR}/SPECS/git-lfs2.spec
# "${RPMBUILD[@]}" -bs ${CURDIR}/SPECS/git-lfs2.spec
# $SUDO rm -f ${CURDIR}/SPECS/git-lfs2.spec
#else
# "${RPMBUILD[@]}" -bs ${CURDIR}/SPECS/git-lfs.spec
#fi
echo "All Done!" >&6