blob: 9bad6d8062013ecc1ad906253ecf34a58ef67111 [file] [log] [blame]
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail -o verbose
# This script builds RPM package for Mesos using Docker.
CENTOS_DIR="$(cd "$(dirname "$0")"; pwd -P)"
SOURCE_DIR="$(cd "${CENTOS_DIR}/../../.."; pwd -P)"
CENTOS_DISTRO=${CENTOS_DISTRO:-"7"}
DOCKER_IMAGE=${DOCKER_IMAGE:-"mesos/mesos-centos${CENTOS_DISTRO}-rpmbuild"}
DOCKER_IMAGE_TAG=${DOCKER_IMAGE_TAG:-"latest"}
if ! [ -x "$(command -v docker)" ]; then
echo 'Error: docker is not installed.' >&2
exit 1
fi
MESOS_SHA=${MESOS_SHA:-$(git rev-parse HEAD)}
MESOS_TAG_OR_SHA=$(git describe --exact-match "${MESOS_SHA}" 2>/dev/null || echo "${MESOS_SHA}")
if [[ "${MESOS_TAG_OR_SHA}" != "${MESOS_SHA}" ]]; then
# HEAD is also a tag.
MESOS_TAG="${MESOS_TAG_OR_SHA}"
else
MESOS_TAG=""
fi
echo "MESOS_SHA=${MESOS_SHA}"
echo "MESOS_TAG=${MESOS_TAG}"
rm -rf "${SOURCE_DIR}/centos${CENTOS_DISTRO}"
CENTOS_DISTRO="${CENTOS_DISTRO}" \
DOCKER_IMAGE="${DOCKER_IMAGE}" \
DOCKER_IMAGE_TAG="${DOCKER_IMAGE_TAG}" \
"${CENTOS_DIR}/build-docker-rpmbuild.sh"
USER_ID=$(id -u)
GROUP_ID=$(id -g)
# NOTE: A shared volume has the same gid as its host volume on Linux,
# but the same group name on macOS. To run this script on both
# platforms, we run the build with the group name of the docker
# socket.
DOCKER_SOCKET_GID=$(echo /var/run/docker.sock | perl -lne 'use File::stat; print stat($_)->gid')
# Attach to terminal if we have a TTY so that things like CTRL-C work.
if [ -t 1 ]; then
TTYARGS="-ti"
else
TTYARGS=""
fi
docker run \
$TTYARGS \
--rm \
--user "${USER_ID}:${GROUP_ID}" \
--group-add 0 \
--group-add "${DOCKER_SOCKET_GID}" \
-v "${SOURCE_DIR}:${SOURCE_DIR}" \
"${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG}" \
/bin/bash -c "MAKE_DIST=true MESOS_TAG=${MESOS_TAG} ${CENTOS_DIR}/build_rpm.sh"
echo "RPM has been built and can be found at:"
echo "${SOURCE_DIR}/centos${CENTOS_DISTRO}/rpmbuild/RPMS/x86_64"