1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
#!/bin/bash
#
# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Clones the dom-distiller repo, compiles and extracts its JavaScript. The
# artifact would be uploaded as a CL in dom-distiller/dist repo, and then
# generates a rolling commit to be uploaded.
# This script requires that ant is installed. It takes an optional parameter
# for which SHA1 in dom-distiller repo to roll to. If left unspecified the
# script rolls to HEAD. The second optional parameter is the Gerrit URL of
# the CL in dom-distiller/dist repo to be validated.
(
set -e
dom_distiller_js_path=$(dirname "${BASH_SOURCE[0]}")
src_path=$dom_distiller_js_path/../..
readme_chromium=$dom_distiller_js_path/README.chromium
[ ! -f $readme_chromium ] && echo "$readme_chromium is not found" && exit 1
tmpdir=/tmp/domdistiller-$$
changes=$tmpdir/domdistiller.changes
bugs=$tmpdir/domdistiller.bugs
curr_gitsha=$(grep 'Version:' $readme_chromium | awk '{print $2}')
repo_host=https://chromium.googlesource.com/chromium
rm -rf $tmpdir
mkdir $tmpdir
pushd $tmpdir
function finish {
rm -rf $tmpdir
}
trap finish EXIT
git clone $repo_host/dom-distiller
pushd dom-distiller
# The new git SHA1 is HEAD or the first command line parameter.
[[ -z "$1" ]] && gitsha_target="HEAD" || gitsha_target="$1"
gerrit_url="$2"
new_gitsha=$(git rev-parse --short=10 ${gitsha_target})
git reset --hard ${new_gitsha}
git log --oneline ${curr_gitsha}..${new_gitsha} > $changes
echo -n 'Bug: ' > $bugs
# This extracts BUG= lines from the log, extracts the numbers part, removes
# whitespace and deletes empty lines. Then, split on ',', sort, uniquify and
# rejoin. Finally, remove the trailing ',' and concat to $bugs.
git log ${curr_gitsha}..${new_gitsha} \
| grep -E 'BUG=|Bug:' \
| sed -e 's/.*\(BUG=\|Bug:\)\(.*\)/\2/' -e 's/\s*//g' -e '/^$/d' -e '/None/d' \
| tr ',' '\n' \
| sort \
| uniq \
| tr '\n' ',' \
| sed -e 's/,/, /g' \
| head --bytes=-2 \
>> $bugs
echo >> $bugs # add a newline
ant package
popd # dom-distiller
git clone $repo_host/dom-distiller/dist $tmpdir/dom-distiller-dist
pushd dom-distiller-dist
if [[ -n "$gerrit_url" ]]; then
echo "Validating $gerrit_url"
git cl patch --force $gerrit_url
fi
rm -rf $tmpdir/dom-distiller-dist/*
cp -r $tmpdir/dom-distiller/out/package/* .
git add .
if [[ $(git status --short | wc -l) -ne 0 ]]; then
if [[ -n "$gerrit_url" ]]; then
echo "FAIL. The output is different from $gerrit_url."
exit 1
fi
# For Change-Id footer.
curl -Lo $(git rev-parse --git-dir)/hooks/commit-msg https://gerrit-review.googlesource.com/tools/hooks/commit-msg
chmod +x $(git rev-parse --git-dir)/hooks/commit-msg
gen_message () {
echo "Package for ${new_gitsha}"
echo
echo "This is generated from:"
echo "${repo_host}/dom-distiller/+/${new_gitsha}."
echo
echo "To validate, run the following command in chromium/src:"
echo "third_party/dom_distiller_js/update_domdistiller_js.sh ${new_gitsha} <Gerrit-URL>"
}
message=$tmpdir/message
gen_message > $message
git commit -a -F $message
git push origin main:refs/for/main
else
# No changes to external repo, but need to check if DEPS refers to same SHA1.
if [[ -n "$gerrit_url" ]]; then
echo "PASS. The output is the same as $gerrit_url."
exit 0
fi
echo "WARNING: There were no changes to the distribution package."
fi
new_dist_gitsha=$(git rev-parse HEAD)
popd # dom-distiller-dist
popd # tmpdir
curr_dist_gitsha=$(grep -e "/chromium\/dom-distiller\/dist.git" $src_path/DEPS | sed -e "s/.*'\([A-Za-z0-9]\{40\}\)'.*/\1/g")
if [[ "${new_dist_gitsha}" == "${curr_dist_gitsha}" ]]; then
echo "The roll does not include any changes to the dist package. Exiting."
exit 1
fi
cp $tmpdir/dom-distiller/LICENSE $dom_distiller_js_path/
sed -i "s/Version: [0-9a-f]*/Version: ${new_gitsha}/" $readme_chromium
sed -i -e "s/\('\/chromium\/dom-distiller\/dist.git' + '@' + '\)\([0-9a-f]\+\)'/\1${new_dist_gitsha}'/" $src_path/DEPS
gen_message () {
echo "Roll DOM Distiller JavaScript distribution package"
echo
echo "Diff since last roll:"
echo "https://chromium.googlesource.com/chromium/dom-distiller/+/${curr_gitsha}..${new_gitsha}"
echo
echo "Picked up changes:"
echo "https://chromium.googlesource.com/chromium/dom-distiller/+log/${curr_gitsha}..${new_gitsha}"
cat $changes
echo
cat $bugs
}
message=$tmpdir/message
gen_message > $message
# Run checklicenses.py on the pulled files, but only print the output on
# failures.
$src_path/tools/checklicenses/checklicenses.py third_party/dom_distiller_js > $tmpdir/checklicenses.out || cat $tmpdir/checklicenses.out
git commit -a -F $message
)
|