File: update_domdistiller_js.sh

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (147 lines) | stat: -rwxr-xr-x 4,956 bytes parent folder | download | duplicates (11)
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
)