From e0619307068a0a0cadbe37479bfc9163fe9a85ba Mon Sep 17 00:00:00 2001 From: Dennis Kempin Date: Mon, 6 Dec 2021 11:49:32 -0800 Subject: [PATCH] Add Kokoro build script for merging main into chromeos The Kokoro build script sets up access to the chromium gerrit, creates the merge commit and uploads it. BUG=b:209034086 TEST=./ci/kokoro/simulate merge-to-chromeos.sh Change-Id: Ia686b937c3d6b0b744d5c2162eb2847c5952e977 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3318793 Tested-by: kokoro Commit-Queue: Dennis Kempin Reviewed-by: Daniel Verkamp --- ci/kokoro/merge-into-chromeos.sh | 59 ++++++++++++++++++++++++++++++++ tools/chromeos/create_merge | 29 ++++++++-------- 2 files changed, 73 insertions(+), 15 deletions(-) create mode 100755 ci/kokoro/merge-into-chromeos.sh diff --git a/ci/kokoro/merge-into-chromeos.sh b/ci/kokoro/merge-into-chromeos.sh new file mode 100755 index 0000000000..00e0e33158 --- /dev/null +++ b/ci/kokoro/merge-into-chromeos.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Copyright 2021 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. +set -e +cd "${KOKORO_ARTIFACTS_DIR}/git/crosvm" + +ORIGIN=https://chromium.googlesource.com/chromiumos/platform/crosvm +RETRIES=3 + +gerrit_prerequisites() { + set -e + + # Authenticate to GoB if we don't already have a cookie. + # This should only happen when running in Kokoro, not locally. + # See: go/gob-gce + if [[ -z $(git config http.cookiefile) ]]; then + git clone https://gerrit.googlesource.com/gcompute-tools \ + "${KOKORO_ARTIFACTS_DIR}/gcompute-tools" + "${KOKORO_ARTIFACTS_DIR}/gcompute-tools/git-cookie-authdaemon" --no-fork + fi + + # We cannot use the original origin that kokoro used, as we no longer have + # access the GoB host via rpc://. + git remote remove origin + git remote add origin ${ORIGIN} + git fetch -q origin + + # Set up gerrit Change-Id hook. + mkdir -p .git/hooks + curl -Lo .git/hooks/commit-msg \ + https://gerrit-review.googlesource.com/tools/hooks/commit-msg + chmod +x .git/hooks/commit-msg +} + +upload() { + # Try uploading to gerrit. Retry due to errors on first upload. + # See: b/209031134 + for i in $(seq 1 $RETRIES); do + echo "Push attempt $i" + if git push origin HEAD:refs/for/chromeos; then + return 0 + fi + done + return 1 +} + +main() { + set -e + gerrit_prerequisites + + # Perform merge on a tracking branch. + git checkout -b chromeos + git branch --set-upstream-to origin/chromeos chromeos + ./tools/chromeos/create_merge + + upload +} +main diff --git a/tools/chromeos/create_merge b/tools/chromeos/create_merge index 8457978746..ed5bc25f7b 100755 --- a/tools/chromeos/create_merge +++ b/tools/chromeos/create_merge @@ -15,26 +15,25 @@ # To merge with a specific commit, use: ./tools/chromeos/create_merge $SHA set -e - cd "$(dirname "${BASH_SOURCE[0]}")/../../" || exit -ORIGIN="$(git remote get-url cros)" -MERGE_TARGET="${1:-cros/main}" +LOCAL_BRANCH=$(git branch --show-current) +REMOTE_NAME=$(git config "branch.${LOCAL_BRANCH}.remote") +URL=$(git remote get-url "${REMOTE_NAME}") + +DEFAULT_TARGET="${REMOTE_NAME}/main" +MERGE_TARGET="${1:-${DEFAULT_TARGET}}" commit_list() { git log --oneline --decorate=no --no-color "HEAD..${MERGE_TARGET}" } prerequisites() { - if [[ -e "${ORIGIN}" ]]; then - echo "'cros' remote does not exist." - echo "Are you running this in a ChromeOS checkout?" - exit 1 - fi - - local tracking="$(git rev-parse --abbrev-ref --symbolic-full-name @{u})" - if [[ "${tracking}" != "cros/chromeos" ]]; then - echo "Not tracking the cros/chromeos branch." + if [[ -e "${LOCAL_BRANCH}" ]] || + [[ -e "${REMOTE_NAME}" ]] || + [[ -e "${URL}" ]]; then + echo "This script requires the local repository to be on" \ + "a tracking branch." exit 1 fi @@ -55,11 +54,11 @@ merge_message() { local new=$(git rev-parse "${MERGE_TARGET}") local count=$(commit_list | wc -l) - echo "Merge ${count} commits from ${MERGE_TARGET}" + echo "Merge ${count} commits from ${MERGE_TARGET} ($(date +%F))" echo "" commit_list echo "" - echo "${ORIGIN}/+log/${old}..${new}" + echo "${URL}/+log/${old}..${new}" echo "" echo "BUG=None" echo "TEST=CQ" @@ -68,7 +67,7 @@ merge_message() { main() { prerequisites git merge --no-ff "${MERGE_TARGET}" -m "$(merge_message)" - git log -n 1 + git --no-pager log -n 1 } main