Skip to content

Instantly share code, notes, and snippets.

@vrutkovs
Last active November 11, 2017 18:42
Show Gist options
  • Select an option

  • Save vrutkovs/6090117f614eb48426ff80669f46d0ae to your computer and use it in GitHub Desktop.

Select an option

Save vrutkovs/6090117f614eb48426ff80669f46d0ae to your computer and use it in GitHub Desktop.
A script to test Fedora specs PRs in docker: builds RPM in a container
#!/bin/bash
set -e
PKG=${PWD##*/}
#Detect which version should be used based on upstream branch
TRACKING=$(git rev-parse --abbrev-ref --symbolic-full-name @{u})
BRANCH=$(basename $TRACKING)
if [[ "$BRANCH" == "master" ]]; then
DEST=rawhide
else
DEST=${BRANCH:1:3}
fi
echo "Converted tracking branch $BRANCH to $DEST"
CONTAINER="${PKG}-${DEST}"
run() {
echo -e "\nRunning $1"
sudo docker exec -ti ${CONTAINER} sh -c "$1"
}
# Optionally cleanup the container
if [ "$1" == "--cleanup" ]; then
sudo docker rm -v -f ${CONTAINER} > /dev/null || true
fi
# Check if a new container needs to be created
found=$(sudo docker container ls -q -f "name=${DEST}" | wc -l)
if [ $found == 0 ]; then
echo "Pulling latest fedora:${DEST} image"
sudo docker pull registry.fedoraproject.org/fedora:${DEST}
echo "\nStarting ${CONTAINER}"
sudo docker run -d --name $CONTAINER -v ${PWD}:/code -ti registry.fedoraproject.org/fedora:${DEST} sleep infinity
else
echo "Reusing existing container for ${DEST} build"
fi
run "dnf install -y rpmdevtools dnf-plugins-core gcc"
run "rm -rf /root/rpmbuild && mkdir -p /root/rpmbuild/SOURCES"
echo "Updating /code in container"
git ls-files | xargs -n1 -i sudo docker cp {} $CONTAINER:/code
echo "----"
echo "Building RPM"
run "spectool -g -R /code/*.spec -D"
run "cp -rf /code/*.patch /root/rpmbuild/SOURCES"
run "dnf builddep -y /code/*.spec"
run "rpmbuild -ba /code/*.spec"
echo "----"
# Copy RPMS and SRPMs back
LOCAL_RPMS="/tmp/rpm_build"
echo "Copying rpms back to $LOCAL_RPMS"
sudo rm -rf $LOCAL_RPMS && mkdir -p $LOCAL_RPMS
sudo docker cp $CONTAINER:/root/rpmbuild/RPMS $LOCAL_RPMS
sudo docker cp $CONTAINER:/root/rpmbuild/SRPMS $LOCAL_RPMS
tree $LOCAL_RPMS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment