Skip to content

Commit

Permalink
Publish GitHub release from master branch (#7136)
Browse files Browse the repository at this point in the history
* Publish GitHub release from master branch

This ensures that changes made on `develop` since branching for the
release are not included. It also ensures that the final release
sourcemaps line-up correctly (they were always build on master)`.

* Consolidate publish jobs

The jobs `job-publish-release` and `create_github_release` both handle
different parts of publishing a release. They have been consolidated
into a single `job-publish-release` job.

* Update release script to expect a merge commit

The release script was originally written to be run on `develop`, so it
expected the current commit to be a result of `Squash & Merge`. Now
that it's run on `master`, it will generally be run against a merge
commit.

The version is now extracted from the commit message using a regular
expression that should work on all version of Bash v3+, and should be
tolerant of both merge commits and `Squash & Merge` commits.

* Target `master` with release PR

`master` is now targeted by the release PR instead of `develop`, as
the release has to be created from the master branch.

The update to `develop` is handled after the release by a PR from
`master` to `develop`, which is created automatically after the
release.
  • Loading branch information
Gudahtt authored Sep 11, 2019
1 parent 38f6550 commit c9fffaf
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 25 deletions.
26 changes: 7 additions & 19 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,6 @@ workflows:
- prep-build:
requires:
- prep-deps
- create_github_release:
requires:
- prep-build
filters:
branches:
only:
- develop
# - prep-docs:
# requires:
# - prep-deps
Expand Down Expand Up @@ -243,6 +236,13 @@ jobs:
- run:
name: sentry sourcemaps upload
command: yarn sentry:publish
- run:
name: Create GitHub release
command: |
.circleci/scripts/release-create-gh-release
- run:
name: Create GitHub Pull Request to sync master with develop
command: .circleci/scripts/release-create-master-pr
# - run:
# name: github gh-pages docs publish
# command: >
Expand Down Expand Up @@ -321,15 +321,3 @@ jobs:
- run:
name: Coveralls upload
command: yarn test:coveralls-upload

create_github_release:
docker:
- image: circleci/node:8.15.1-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Create GitHub release
command: |
.circleci/scripts/release-create-gh-release
10 changes: 5 additions & 5 deletions .circleci/scripts/release-create-gh-release
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,24 @@ function install_github_cli ()

current_commit_msg=$(git show -s --format='%s' HEAD)

if grep --quiet '^Version v' <<< "$current_commit_msg"
if [[ $current_commit_msg =~ Version[-[:space:]](v[[:digit:]]+.[[:digit:]]+.[[:digit:]]+) ]]
then
tag="${BASH_REMATCH[1]}"

install_github_cli

printf '%s\n' 'Creating GitHub Release'
read -ra commit_words <<< "$current_commit_msg"
tag="${commit_words[1]}"
release_body="$(awk -v version="${tag##v}" -f .circleci/scripts/show-changelog.awk CHANGELOG.md)"
pushd builds
hub release create \
--attach metamask-chrome-*.zip \
--attach metamask-firefox-*.zip \
--message "${commit_words[0]} ${commit_words[1]#v}" \
--message "Version ${tag##v}" \
--message "$release_body" \
--commitish "$CIRCLE_SHA1" \
"$tag"
popd
else
printf '%s\n' 'Skipping GitHub Release'
printf '%s\n' 'Version not found in commit message; skipping GitHub Release'
exit 0
fi
53 changes: 53 additions & 0 deletions .circleci/scripts/release-create-master-pr
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/env bash

set -e
set -u
set -o pipefail

if [[ "${CI:-}" != 'true' ]]
then
printf '%s\n' 'CI environment variable must be set to true'
exit 1
fi

if [[ "${CIRCLECI:-}" != 'true' ]]
then
printf '%s\n' 'CIRCLECI environment variable must be set to true'
exit 1
fi

if [[ -z "${GITHUB_TOKEN:-}" ]]
then
printf '%s\n' 'GITHUB_TOKEN environment variable must be set'
exit 1
fi

function install_github_cli ()
{
printf '%s\n' 'Installing hub CLI'
pushd "$(mktemp -d)"
curl -sSL 'https://github.com/github/hub/releases/download/v2.11.2/hub-linux-amd64-2.11.2.tgz' | tar xz
PATH="$PATH:$PWD/hub-linux-amd64-2.11.2/bin"
popd
}

base_branch='develop'

if [[ -n "${CI_PULL_REQUEST:-}" ]]
then
printf '%s\n' 'CI_PULL_REQUEST is set, pull request already exists for this build'
exit 0
fi

install_github_cli

printf '%s\n' "Creating a Pull Request to sync 'master' with 'develop'"

if ! hub pull-request \
--reviewer '@MetaMask/extension-release-team' \
--message "Master => develop" --message 'Merge latest release back into develop' \
--base "$CIRCLE_PROJECT_USERNAME:$base_branch" \
--head "$CIRCLE_PROJECT_USERNAME:$CIRCLE_BRANCH";
then
printf '%s\n' 'Pull Request already exists'
fi
2 changes: 1 addition & 1 deletion .circleci/scripts/release-create-release-pr
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ function install_github_cli ()
}

version="${CIRCLE_BRANCH/Version-v/}"
base_branch='develop'
base_branch='master'

if [[ -n "${CI_PULL_REQUEST:-}" ]]
then
Expand Down

0 comments on commit c9fffaf

Please sign in to comment.