xref: /aosp_15_r20/development/tools/cargo_embargo/regenerate_all.sh (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker#!/bin/bash
2*90c8c64dSAndroid Build Coastguard Worker#
3*90c8c64dSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project
4*90c8c64dSAndroid Build Coastguard Worker#
5*90c8c64dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*90c8c64dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*90c8c64dSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*90c8c64dSAndroid Build Coastguard Worker#
9*90c8c64dSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*90c8c64dSAndroid Build Coastguard Worker#
11*90c8c64dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*90c8c64dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*90c8c64dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*90c8c64dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*90c8c64dSAndroid Build Coastguard Worker# limitations under the License.
16*90c8c64dSAndroid Build Coastguard Worker
17*90c8c64dSAndroid Build Coastguard Worker# Helper script to run cargo_embargo generate on all external Rust crates and generate an HTML
18*90c8c64dSAndroid Build Coastguard Worker# report of the results, including any errors, warnings or changes to Android.bp files.
19*90c8c64dSAndroid Build Coastguard Worker#
20*90c8c64dSAndroid Build Coastguard Worker# Should be run from under external/rust/crates.
21*90c8c64dSAndroid Build Coastguard Worker
22*90c8c64dSAndroid Build Coastguard Workerset -e
23*90c8c64dSAndroid Build Coastguard Worker
24*90c8c64dSAndroid Build Coastguard Workerreport="cargo_embargo_report.html"
25*90c8c64dSAndroid Build Coastguard Worker
26*90c8c64dSAndroid Build Coastguard Workercat > $report <<END
27*90c8c64dSAndroid Build Coastguard Worker<html>
28*90c8c64dSAndroid Build Coastguard Worker<head>
29*90c8c64dSAndroid Build Coastguard Worker<title>cargo_embargo crate report</title>
30*90c8c64dSAndroid Build Coastguard Worker<style type="text/css">
31*90c8c64dSAndroid Build Coastguard Workertd { vertical-align: top; }
32*90c8c64dSAndroid Build Coastguard Worker.success { color: green; }
33*90c8c64dSAndroid Build Coastguard Worker.skipped { color: yellow; }
34*90c8c64dSAndroid Build Coastguard Worker.warning { color: orange; }
35*90c8c64dSAndroid Build Coastguard Worker.error { color: red; }
36*90c8c64dSAndroid Build Coastguard Worker</style>
37*90c8c64dSAndroid Build Coastguard Worker</head>
38*90c8c64dSAndroid Build Coastguard Worker<body>
39*90c8c64dSAndroid Build Coastguard Worker<h1>cargo_embargo crate report</h1>
40*90c8c64dSAndroid Build Coastguard Worker<h2>Using existing cargo_embargo.json</h2>
41*90c8c64dSAndroid Build Coastguard Worker<table>
42*90c8c64dSAndroid Build Coastguard Worker<tr><th>Crate name</th><th>Generate</th><th>Details</th><th style="width: 25%;">Files</th></tr>
43*90c8c64dSAndroid Build Coastguard WorkerEND
44*90c8c64dSAndroid Build Coastguard Worker
45*90c8c64dSAndroid Build Coastguard Workersuccess_count=0
46*90c8c64dSAndroid Build Coastguard Workerdifferent_count=0
47*90c8c64dSAndroid Build Coastguard Workertotal_count=0
48*90c8c64dSAndroid Build Coastguard Workerfor config in */cargo_embargo.json; do
49*90c8c64dSAndroid Build Coastguard Worker  ((total_count+=1))
50*90c8c64dSAndroid Build Coastguard Worker  crate=$(dirname $config)
51*90c8c64dSAndroid Build Coastguard Worker  echo "Trying $crate..."
52*90c8c64dSAndroid Build Coastguard Worker  echo "<tr><td><code>$crate</code></td>" >> $report
53*90c8c64dSAndroid Build Coastguard Worker  if (cd $crate && cargo_embargo generate cargo_embargo.json) 2> cargo_embargo.err; then
54*90c8c64dSAndroid Build Coastguard Worker    (cd $crate && git diff Android.bp > Android.bp.diff)
55*90c8c64dSAndroid Build Coastguard Worker    if grep "WARNING" cargo_embargo.err; then
56*90c8c64dSAndroid Build Coastguard Worker      echo '<td class="error">Warning</td>' >> $report
57*90c8c64dSAndroid Build Coastguard Worker      echo '<td><details><summary>' >> $report
58*90c8c64dSAndroid Build Coastguard Worker      grep -m 1 "WARNING" cargo_embargo.err >> $report
59*90c8c64dSAndroid Build Coastguard Worker      echo '</summary>' >> $report
60*90c8c64dSAndroid Build Coastguard Worker      sed 's/$/<br\/>/g' < cargo_embargo.err >> $report
61*90c8c64dSAndroid Build Coastguard Worker      echo '</details></td>' >> $report
62*90c8c64dSAndroid Build Coastguard Worker    else
63*90c8c64dSAndroid Build Coastguard Worker      # Compare the checked-in Android.bp to the generated one.
64*90c8c64dSAndroid Build Coastguard Worker      (cd $crate && git show HEAD:Android.bp > Android.bp.orig)
65*90c8c64dSAndroid Build Coastguard Worker      if diff $crate/Android.bp.orig $crate/Android.bp > /dev/null; then
66*90c8c64dSAndroid Build Coastguard Worker        echo '<td class="success">Success</td>' >> $report
67*90c8c64dSAndroid Build Coastguard Worker        ((success_count+=1))
68*90c8c64dSAndroid Build Coastguard Worker      else
69*90c8c64dSAndroid Build Coastguard Worker        echo '<td class="warning">Different</td>' >> $report
70*90c8c64dSAndroid Build Coastguard Worker        ((different_count+=1))
71*90c8c64dSAndroid Build Coastguard Worker      fi
72*90c8c64dSAndroid Build Coastguard Worker
73*90c8c64dSAndroid Build Coastguard Worker      echo '<td>' >> $report
74*90c8c64dSAndroid Build Coastguard Worker      if [[ -s "cargo_embargo.err" ]]; then
75*90c8c64dSAndroid Build Coastguard Worker        echo '<details>' >> $report
76*90c8c64dSAndroid Build Coastguard Worker        sed 's/$/<br\/>/g' < cargo_embargo.err >> $report
77*90c8c64dSAndroid Build Coastguard Worker        echo '</details>' >> $report
78*90c8c64dSAndroid Build Coastguard Worker      fi
79*90c8c64dSAndroid Build Coastguard Worker      echo '</td>' >> $report
80*90c8c64dSAndroid Build Coastguard Worker    fi
81*90c8c64dSAndroid Build Coastguard Worker  else
82*90c8c64dSAndroid Build Coastguard Worker    echo '<td class="error">Error</td>' >> $report
83*90c8c64dSAndroid Build Coastguard Worker    echo '<td><details open>' >> $report
84*90c8c64dSAndroid Build Coastguard Worker    sed 's/$/<br\/>/g' < cargo_embargo.err >> $report
85*90c8c64dSAndroid Build Coastguard Worker    echo '</details></td>' >> $report
86*90c8c64dSAndroid Build Coastguard Worker  fi
87*90c8c64dSAndroid Build Coastguard Worker
88*90c8c64dSAndroid Build Coastguard Worker  rm cargo_embargo.err
89*90c8c64dSAndroid Build Coastguard Worker  rm -rf "$crate/cargo.metadata" "$crate/cargo.out" "$crate/target.tmp" "$crate/Cargo.lock" "$crate/Android.bp.orig" "$crate/Android.bp.embargo" "$crate/Android.bp.embargo_nobuild"
90*90c8c64dSAndroid Build Coastguard Worker  (cd $crate && git checkout Android.bp)
91*90c8c64dSAndroid Build Coastguard Worker
92*90c8c64dSAndroid Build Coastguard Worker  echo '<td>' >> $report
93*90c8c64dSAndroid Build Coastguard Worker  if [[ -s "$crate/Android.bp.diff" ]]; then
94*90c8c64dSAndroid Build Coastguard Worker    echo '<details><summary>Android.bp.diff</summary><pre>' >> $report
95*90c8c64dSAndroid Build Coastguard Worker    cat "$crate/Android.bp.diff" >> $report
96*90c8c64dSAndroid Build Coastguard Worker    echo '</pre></details>' >> $report
97*90c8c64dSAndroid Build Coastguard Worker    rm "$crate/Android.bp.diff"
98*90c8c64dSAndroid Build Coastguard Worker  fi
99*90c8c64dSAndroid Build Coastguard Worker  echo '</td></tr>' >> $report
100*90c8c64dSAndroid Build Coastguard Workerdone
101*90c8c64dSAndroid Build Coastguard Worker
102*90c8c64dSAndroid Build Coastguard Workerecho '</table>' >> $report
103*90c8c64dSAndroid Build Coastguard Workerecho "<p>$success_count success, $different_count different, $total_count total.</p>" >> $report
104*90c8c64dSAndroid Build Coastguard Workerecho '</body>' >> $report
105*90c8c64dSAndroid Build Coastguard Workerecho '</html>' >> $report
106*90c8c64dSAndroid Build Coastguard Worker
107*90c8c64dSAndroid Build Coastguard Workerecho "Open file://$PWD/$report for details"
108