ci(lts): add script to triage commits
This adds initial version of a script which looks for keywords in a
given patch and determines whether it's a candidate for long term
support (lts). See README for more info.
Signed-off-by: Okash Khawaja <okash@google.com>
Change-Id: Ic469a9000571a87b57c6da8862270fa8d9a8d094
diff --git a/lts/README b/lts/README
new file mode 100644
index 0000000..1da63c8
--- /dev/null
+++ b/lts/README
@@ -0,0 +1,59 @@
+This directory contains code related to long-term support management of TF-A.
+
+lts-triage.py
+=============
+
+Purpose of this script is to check a patch and determine if that patch qualifies
+as a candidate for one of the LTS branches.
+
+Currently it focuses on cpu errata while it contains basic support for security
+patches. It computes a crude score:
+
+1 point if subject line matches tokens for cpu errata or security
+1 point for "report_errata ERRATA" in a lib/cpus/aarch{32,64}/*.S file
+1 point for "- ``ERRATA_" in docs/design/cpu-specific-build-macros.rst file
+
+Note that the script only looks at commits which are not merge commits.
+
+Running it:
+-----------
+
+To run it, provide it a path to a TF-A git repo. Here's help output for convenience:
+
+$ python lts/lts-triage.py -h
+usage: lts-triage.py [-h] --repo REPO [--branch BRANCH] [--sample_size SAMPLE_SIZE] [--debug]
+
+check patches for LTS candidacy
+
+options:
+ -h, --help show this help message and exit
+ --repo REPO path to tf-a git repo
+ --branch BRANCH branch to check. default = integration
+ --sample_size SAMPLE_SIZE
+ how many patches to scan. default = 20
+ --debug print debug logs
+
+Below is an example output. On left is commit hash of each of the commits
+observed by this script and on right is score assigned to it.
+
+$ python lts/lts-triage.py --repo ../trusted-firmware-a/
+888eafa00b99aa06b4ff688407336811a7ff439a: 3
+79544126943a90d31d81177655be11f75330ffed: 3
+43438ad1ad6651964e9ae75d35f40aed8d86d088: 3
+028c4e42d8f632d40081b88f66d0d05c7d7c9b23: 0
+20155112c5d2fb296fef40a12b1c6ce12f49b1c8: 0
+4090ac33f44bd24d73161032faa817eb03f2e41d: 0
+cf58b2d41cb0d24239b98de98264b31690711549: 0
+e74d658181e5e69b6b5e16b40adc1ffef4c1efb9: 1
+ad6eb1951b986f30635025bbdf29e257b6b1e362: 0
+8a6a9560b5dcccfb68064c0c8c9b4b47981c6ac7: 0
+93cec697deb654303379cae8f25a31dc8b90cd31: 0
+a194255d75ed9e2ef56bd6e14349a3e7d86af934: 0
+98a43d9f6c22498d9e1a6e7ace1bc6d23ac58d5a: 0
+07dc8ba93b319de2bf0be0c287373db74019878e: 0
+c6877763cd3a286983df160c8207368174c1b820: 0
+03ebf409c711e9f2006cedded7dc415dfe566975: 1
+de7e9b562afccd6d71df1abf1907f48d164a3a7e: 0
+720e7b66f2353ef7ed32a8f85f8396fbc0766ffc: 0
+62a93aa7afcd022f06d322c36979f0aa02713beb: 0
+b5f06d3dfad8c27bdf528b083ef919ce4022c52d: 0