Make sure hub is installed and set up with your user credentials.
./update-gem.sh loofah "Resolves security vulnerability."| #!/bin/bash | |
| set -x | |
| set -o errexit | |
| gem="$1" | |
| description="$2" | |
| [ -z "$gem" ] && echo "No gem" >&2 && exit 1 | |
| [ -z "$description" ] && echo "No description" >&2 && exit 1 | |
| projectdir="${projectdir:-${PWD}}" | |
| projectname="${projectdir##*/}" | |
| [ ! -d "$projectdir/.git" ] && echo "No git repository" >&2 && exit 1 | |
| gemversion() | |
| { | |
| sed -n -e '/^GEM$/,$p' | sed -n '/^DEPENDENCIES/q;p' | perl -n -e "/^ $1 \((.*)\)$/ && print \$1" | |
| } | |
| function finish() | |
| { | |
| cd "$projectdir" | |
| git worktree prune | |
| rm -rf "$tmp" | |
| } | |
| git fetch | |
| tmp="$(mktemp -d -t "${projectname}-update-worktree")" | |
| git worktree add "$tmp" origin/master | |
| trap finish EXIT | |
| cd "$tmp" | |
| rbenv install --skip-existing | |
| bundled_with="$(grep --after-context=1 --regex='^BUNDLED WITH' Gemfile.lock | tail -n 1 | xargs)" | |
| gem install bundler | |
| gem install bundler --version "${bundled_with}" | |
| # Depending on the update, this sometimes needs a change. | |
| # command=(bundle _"${bundled_with}"_ update --conservative "$gem") | |
| # command=(bundle _"${bundled_with}"_ update "$gem") | |
| command=(bundle _"${bundled_with}"_ update --patch "$gem") | |
| ${command[*]} | |
| # Check whether the audit checks passes | |
| bundle audit | |
| new_version="$(cat Gemfile.lock | gemversion $gem)" | |
| old_version="$(git show HEAD:Gemfile.lock | gemversion $gem)" | |
| [ -z "$new_version" ] && echo "No new_version" >&2 && exit 1 | |
| [ -z "$old_version" ] && echo "No old_version" >&2 && exit 1 | |
| branch="update-${gem}-$new_version" | |
| commit_message="${gem}: $old_version -> $new_version" | |
| git checkout -b "$branch" | |
| git commit -a -m "$commit_message" | |
| git push origin "$branch" | |
| hub pull-request -m "$commit_message | |
| **Context** | |
| $description | |
| **Changes** | |
| \`\`\` | |
| ${command[*]} | |
| \`\`\` | |
| Note: this PR was automatically created. Please check the changes of this PR and the link provided above. | |
| " |