blob: 3067ae172c14d3c6937877c37dd2b1fb8000f219 [file] [log] [blame]
Yihan Dong73820372022-11-30 18:06:20 +08001#!/usr/bin/env python3
2#
3# Copyright (C) 2022 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16"""
17Checks and generates a report for gts modules that should be open-sourced.
18
19Usage:
20 generate_gts_open_source_report.py
Yihan Dong73820372022-11-30 18:06:20 +080021 --gts-test-metalic [android-gts meta_lic]
22 --checkshare [COMPLIANCE_CHECKSHARE]
23 --gts-test-dir [directory of android-gts]
24 --output [output file]
25
26Output example:
Yihan Dong73820372022-11-30 18:06:20 +080027 GTS-Modules: PASS/FAIL
28 GtsIncrementalInstallTestCases_BackgroundProcess
29 GtsUnsignedNetworkStackTestCases
30"""
31import sys
32import argparse
33import subprocess
34import re
35
36def _get_args():
37 """Parses input arguments."""
38 parser = argparse.ArgumentParser()
39 parser.add_argument(
Yihan Dong73820372022-11-30 18:06:20 +080040 '--gts-test-metalic', required=True,
41 help='license meta_lic file path of android-gts.zip')
42 parser.add_argument(
43 '--checkshare', required=True,
44 help='path of the COMPLIANCE_CHECKSHARE tool')
45 parser.add_argument(
46 '--gts-test-dir', required=True,
47 help='directory of android-gts')
48 parser.add_argument(
49 '-o', '--output', required=True,
50 help='file path of the output report')
51 return parser.parse_args()
52
Yihan Dong73820372022-11-30 18:06:20 +080053def _check_gts_test(checkshare: str, gts_test_metalic: str,
54 gts_test_dir: str) -> tuple[str, set[str]]:
55 """Checks android-gts license.
56
57 Args:
58 checkshare: path of the COMPLIANCE_CHECKSHARE tool
59 gts_test_metalic: license meta_lic file path of android-gts.zip
60 gts_test_dir: directory of android-gts
61
62 Returns:
63 Check result (PASS when android-gts doesn't need to be shared,
64 FAIL when some gts modules need to be shared) and gts modules
65 that need to be shared.
66 """
67 cmd = f'{checkshare} {gts_test_metalic}'
68 proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
69 stderr=subprocess.PIPE)
70 _, str_stderr = map(lambda b: b.decode(), proc.communicate())
71 if proc.returncode == 0:
72 return 'PASS', []
73 open_source_modules = set()
74 for error_line in str_stderr.split('\n'):
75 # Skip the empty liness
76 if not error_line:
77 continue
78 module_meta_lic = error_line.strip().split()[0]
79 groups = re.fullmatch(
80 re.compile(f'.*/{gts_test_dir}/(.*)'), module_meta_lic)
81 if groups:
82 open_source_modules.add(
83 groups[1].removesuffix('.meta_lic'))
84 return 'FAIL', open_source_modules
85
86
87def main(argv):
88 args = _get_args()
89
Yihan Dong73820372022-11-30 18:06:20 +080090 gts_test_metalic = args.gts_test_metalic
91 output_file = args.output
92 checkshare = args.checkshare
93 gts_test_dir = args.gts_test_dir
94
95 with open(output_file, 'w') as file:
Yihan Dong73820372022-11-30 18:06:20 +080096 result, open_source_modules = _check_gts_test(
97 checkshare, gts_test_metalic, gts_test_dir)
98 file.write(f'GTS-Modules: {result}\n')
99 for open_source_module in open_source_modules:
100 file.write(f'\t{open_source_module}\n')
101
102if __name__ == "__main__":
Yihan Dong58c428e2023-05-19 18:25:23 +0800103 main(sys.argv)