git-lfs/rpm/build_rpms.bsh
brian m. carlson 86b5bce730
rpm/build_rpms: remove Ruby build RPMs
When building on any CentOS version, we end up building a lot of
additional items, and this is especially true of CentOS 6, where we must
build Ruby.  These intermediate build products run us out of disk space
in CI, so let's remove the RPMs that we installed to build Ruby once
we're done with them.
2020-04-21 16:35:28 +00:00

186 lines
5.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu
CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd)
if [ -e /etc/os-release ]; then
VERSION_ID=$(source /etc/os-release; echo ${VERSION_ID})
OS_NAME=$(source /etc/os-release; echo ${NAME})
OS_NAME=${OS_NAME,,}
else #Basically Centos 5/6
VERSION_ID=($(head -n 1 /etc/redhat-release | \grep -Eo '[0-9]+'))
OS_NAME=$(awk '{print tolower($1)}' /etc/redhat-release)
#Stupid ancient bash 3...
fi
case "${OS_NAME}" in
centos*|red*)
RPM_DIST=".el${VERSION_ID}"
;;
fedora)
RPM_DIST=".fc${VERSION_ID}"
;;
sles)
RPM_DIST=".sles${VERSION_ID}"
;;
opensuse)
RPM_DIST=".opensuse${VERSION_ID}"
;;
*)
RPM_DIST="%{nil}"
;;
esac
RPMBUILD=(rpmbuild --define "_topdir ${CURDIR}" --define "dist ${RPM_DIST}")
if [[ ${NODEPS:-0} != 0 ]]; then
RPMBUILD=("${RPMBUILD[@]}" --nodeps)
fi
SUDO=${SUDO=`if which sudo > /dev/null 2>&1; then echo sudo; fi`}
export PATH=${PATH}:/usr/local/bin
set -vx
echo "Downloading/checking for some essentials..."
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
SPEC=${CURDIR}/SPECS/git-lfs.spec
if [[ ${VERSION_ID[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 [[ ${VERSION_ID[0]} != 6 ]]; then
$SUDO yum install -y git
else
curl https://setup.ius.io/ | $SUDO bash
yum install -y "git >= 1.8.2"
fi
fi
if ! which go; then
echo "Installing go... one way or another"
if [[ ${VERSION_ID[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 \
${CURDIR}/RPMS/noarch/golang-pkg-linux-386-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 [[ ${VERSION_ID[0]} < 7 ]]; then
echo "Downloading ruby..."
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..."
"${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/ruby.spec
echo "Installing ruby..."
$SUDO yum install -y --nogpgcheck ${CURDIR}/RPMS/x86_64/ruby*.rpm
$SUDO yum erase -y libyaml-devel autoconf gcc-c++ readline-devel zlib-devel openssl-devel automake libtool sqlite-devel
else
$SUDO yum install -y ruby ruby-devel
fi
fi
if [[ ${VERSION_ID[0]} == 8 ]]; then
$SUDO yum install -y rubygems-devel
fi
if ! which ronn; then
echo "Downloading some ruby gems..."
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..."
"${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..."
$SUDO yum install -y --nogpgcheck $(ls ${CURDIR}/RPMS/noarch/rubygem-*.rpm ${CURDIR}/RPMS/x86_64/rubygem-*.rpm | grep -v debuginfo)
fi
rm -fr ${CURDIR}/{BUILD,BUILDROOT}
mkdir -p ${CURDIR}/{BUILD,BUILDROOT}
pushd ${CURDIR}/..
#Yes, compile lfs before compiling lfs...
make
#Use the version output to grab the version number and short sha
#(that yes, I could have gotten from git myself)
LFS_VERSION=$(./bin/git-lfs version | sed -r 's|.*/([0-9.]*).*|\1|')
sed -i 's|\(^Version:\s*\).*|\1'"${LFS_VERSION}"'|' ${CURDIR}/SPECS/git-lfs.spec
popd
#Prep the SOURCES dir for git-lfs
echo "Zipping up current checkout of git-lfs..."
echo "Cleaning ${CURDIR}/tmptar"
rm -rf ${CURDIR}/tmptar
mkdir -p ${CURDIR}/tmptar/git-lfs-${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-${LFS_VERSION}/
popd
pushd ${CURDIR}/tmptar
tar -zcf ${CURDIR}/SOURCES/git-lfs-${LFS_VERSION}.tar.gz git-lfs-${LFS_VERSION}
popd
echo "Cleaning ${CURDIR}/tmptar again"
rm -rf ${CURDIR}/tmptar
#TODO TASK 2
#cp ${CURDIR}/../docker/public.key ${CURDIR}/SOURCES/RPM-GPG-KEY-GITLFS
touch ${CURDIR}/SOURCES/RPM-GPG-KEY-GITLFS
echo "Build git-lfs rpm..."
#--no-deps added for now so you can compile without official rpms installed
"${RPMBUILD[@]}" --nodeps -ba ${CURDIR}/SPECS/git-lfs.spec
echo "All Done!"