diff options
author | Tom Hughes <tomhughes@chromium.org> | 2020-03-04 13:17:37 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-03-07 03:33:12 +0000 |
commit | ac116965e0cf0e828a9ca203882ddb02be273faa (patch) | |
tree | cf55d46c134293058bd0c1855f0416245dc1c9b8 /util | |
parent | c015cff5060e8e113780245bee601eb03afcb602 (diff) | |
download | chrome-ec-ac116965e0cf0e828a9ca203882ddb02be273faa.tar.gz |
util: Add script to update release branch from master
Currently this script is specific to the fingerprint release branch
process, but can be easily generalized to other ECs. See
http://go/cros-fingerprint-firmware-branching-and-signing.
BRANCH=none
BUG=none
TEST=./util/update_release_branch.sh
Change-Id: I66087190754c789387a6537b69a026c81f93ead0
Signed-off-by: Tom Hughes <tomhughes@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2088602
Reviewed-by: Craig Hesling <hesling@chromium.org>
Diffstat (limited to 'util')
-rwxr-xr-x | util/update_release_branch.sh | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/util/update_release_branch.sh b/util/update_release_branch.sh new file mode 100755 index 0000000000..4013c75ee3 --- /dev/null +++ b/util/update_release_branch.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Tool to merge master branch into a release branch. Currently specific to the +# fingerprint sensor, but can easily be generalized. See +# http://go/cros-fingerprint-firmware-branching-and-signing. + +. /usr/share/misc/shflags + +DEFINE_string 'board' "bloonchipper" 'EC board (FPMCU) to update' 'b' + +# Process commandline flags. +FLAGS "${@}" || exit 1 +eval set -- "${FLAGS_ARGV}" + +set -e + +# Dereference symlinks so "git log" works as expected. +readonly BOARD_DIR="$(realpath --relative-to=. "board/${FLAGS_board}")" +readonly RELEVANT_PATHS=( + "${BOARD_DIR}" + common/fpsensor + docs/fingerprint + driver/fingerprint + util/getversion.sh +) +readonly RELEASE_BRANCH="firmware-fpmcu-${FLAGS_board}-release" + +get_relevant_commits_cmd() { + local head="${1}" + local merge_head="${2}" + local format="${3}" + + local relevant_commits_cmd="git log ${format} ${head}..${merge_head}" + relevant_commits_cmd+=" -- ${RELEVANT_PATHS[*]}" + echo "${relevant_commits_cmd}" +} + +git_commit_msg() { + local branch="${1}" + local head="${2}" + local merge_head="${3}" + + local relevant_commits_cmd + local relevant_commits + local relevant_bugs_cmd + local relevant_bugs + + relevant_commits_cmd="$(get_relevant_commits_cmd "${head}" \ + "${merge_head}" "--oneline")" + relevant_commits="$(${relevant_commits_cmd})" + relevant_bugs_cmd="$(get_relevant_commits_cmd "${head}" \ + "${merge_head}" "")" + relevant_bugs="$(${relevant_bugs_cmd} | \ + pcregrep -o1 'BUG=(.*)' | pcregrep -v none | \ + tr ' ' '\n' | tr ',' '\n' | \ + sort | uniq | xargs)" + + cat <<HEREDOC +Merge remote-tracking branch 'm/master' into ${branch} + +Relevant changes: + +${relevant_commits_cmd} + +${relevant_commits} + +BRANCH=none +BUG=${relevant_bugs} +TEST=test_that --board <board> <IP> suite:fingerprint +HEREDOC +} + +merge_master() { + git remote update + git checkout -B "${RELEASE_BRANCH}" "cros/${RELEASE_BRANCH}" + git merge --no-ff --no-commit m/master + + local branch + local head + local merge_head + + branch="$(git rev-parse --abbrev-ref HEAD)" + head="$(git rev-parse --short HEAD)" + merge_head="$(git rev-parse --short MERGE_HEAD)" + + git commit --signoff -m "$(git_commit_msg "${branch}" \ + "${head}" "${merge_head}")" + git commit --amend +} + +merge_master |