.circleci/scripts/release.sh
#!/bin/sh
set -e
GH_CLI_RELEASES_URL="https://github.com/cli/cli/releases"
FILE_NAME="gh"
BUILD_ARCHITECTURE="linux_amd64.deb"
DELIMETER="_"
PACKAGE_FILE="$FILE_NAME$DELIMETER$BUILD_ARCHITECTURE"
gh_cli_latest_release() {
curl -sL -o /dev/null -w '%{url_effective}' "$GH_CLI_RELEASES_URL/latest" | rev | cut -f 1 -d '/'| rev
}
download_gh_cli() {
test -z "$VERSION" && VERSION="$(gh_cli_latest_release)"
test -z "$VERSION" && {
echo "Unable to get GitHub CLI release." >&2
exit 1
}
curl -s -L -o "$PACKAGE_FILE" "$GH_CLI_RELEASES_URL/download/$VERSION/$FILE_NAME$DELIMETER$(printf '%s' "$VERSION" | cut -c 2-100)$DELIMETER$BUILD_ARCHITECTURE"
}
install_gh_cli() {
sudo dpkg -i "$PACKAGE_FILE"
rm "$PACKAGE_FILE"
}
get_release_candidate_version() {
ruby -r rubygems -e "puts Gem::Specification::load('$(ls -- *.gemspec)').version"
}
release_candidate_tag="v$(get_release_candidate_version)"
is_an_existing_github_release() {
git fetch origin "refs/tags/$release_candidate_tag" >/dev/null 2>&1
}
release_to_rubygems() {
echo "Setting RubyGems publisher credentials..."
./.circleci/scripts/set_publisher_credentials.sh
echo "Preparation for release..."
git config --global user.email "${PUBLISHER_EMAIL}"
git config --global user.name "${PUBLISHER_NAME}"
git stash
gem install yard gem-ctags
bundle install
echo "Publishing new gem release to RubyGems..."
rake release
}
release_to_github() {
echo "Downloading and installing latest gh cli..."
download_gh_cli
install_gh_cli
echo "Publishing new release notes to GitHub..."
gh release create "$release_candidate_tag" --generate-notes
}
update_develop_branch() {
echo "Updating develop branch with new release tag..."
git checkout develop
git merge "$release_candidate_tag" --ff --no-edit
git push origin develop
}
if is_an_existing_github_release
then echo "Tag $release_candidate_tag already exists on GitHub. Skipping releasing flow..."
else release_to_rubygems; release_to_github; update_develop_branch
fi