Scripts and snippets
update-each-gem(1)
update-each-gem(1)
- Name
- update-each-gem - Update each gem in a project individually, running the tests and commiting after each.
- Synopsis
-
-
update-each-gem 'bundle exec rake spec:models spec:controllers'
-
update-each-gem ./path/to/script
- Description
-
#!/bin/bash
function quit() {
echo "Goodbye."
exit
}
trap quit SIGINT SIGTERM
failed_gems=""
# Use arg 1 as the test command if it's present
#
# update-each-gem 'bundle exec rake spec:models spec:controllers'
# update-each-gem ./path/to/script
#
if [ "$1" != "" ] ; then
runSpecsCommand=$1
function runSpecs() {
$runSpecsCommand
}
else
function runSpecs() {
SPEC_OPTS='--fail-fast --no-colour --no-profile' bundle exec rake &> /dev/null
}
fi
function die() {
echo "$1"
exit 1
}
# Don't run if there are uncommitted changes.
if [ "$(git status --porcelain)" != "" ] ; then
die "Stash any changes first."
fi
# Don't run on master.
if [ "$(git rev-parse --abbrev-ref HEAD)" == "master" ] ; then
die "Don't run this on master."
fi
echo "Intitial spec run..."
runSpecs
if [ "$?" == "1" ] ; then
echo "SPECS FAILED"
die "Fix specs before re-running!"
else
echo "SPECS PASSED"
fi
echo "Checking for outdated gems..."
gems=$(bundle outdated --strict --no-color | grep '^\s+*' | awk '{print $2}')
echo "Outdated:"
echo "$gems"
for gem in $gems ; do
echo "Updating $gem..."
bundle update "$gem" > /dev/null
echo "Gemfile.lock diff..."
git diff Gemfile.lock
if [ "$(git diff Gemfile.lock)" == "" ] ; then
echo "Skipping $gem..."
continue
fi
echo "Running specs..."
runSpecs
if [ "$?" == "1" ] ; then
echo "SPECS FAILED"
echo "Skipping $gem..."
failed_gems="$failed_gems $gem"
echo "Rolling back Gemfile.lock..."
git checkout Gemfile.lock
else
git commit -a -m "Update $gem gem."
fi
done
if [ "$failed_gems" != "" ] ; then
die "Failed gems:$failed_gems"
else
echo "All gems have been updated."
fi
- Copyright
-
update-each-gem is made available under the MIT License. See
MIT LICENSE for details.
2015-09-11 00:00:00 +0000
update-each-gem(1)
update-each-gem(1)