Yihan Dong | 7382037 | 2022-11-30 18:06:20 +0800 | [diff] [blame] | 1 | #!/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 | """ |
| 17 | Checks and generates a report for gts modules that should be open-sourced. |
| 18 | |
| 19 | Usage: |
| 20 | generate_gts_open_source_report.py |
Yihan Dong | 7382037 | 2022-11-30 18:06:20 +0800 | [diff] [blame] | 21 | --gts-test-metalic [android-gts meta_lic] |
| 22 | --checkshare [COMPLIANCE_CHECKSHARE] |
| 23 | --gts-test-dir [directory of android-gts] |
| 24 | --output [output file] |
| 25 | |
| 26 | Output example: |
Yihan Dong | 7382037 | 2022-11-30 18:06:20 +0800 | [diff] [blame] | 27 | GTS-Modules: PASS/FAIL |
| 28 | GtsIncrementalInstallTestCases_BackgroundProcess |
| 29 | GtsUnsignedNetworkStackTestCases |
| 30 | """ |
| 31 | import sys |
| 32 | import argparse |
| 33 | import subprocess |
| 34 | import re |
| 35 | |
| 36 | def _get_args(): |
| 37 | """Parses input arguments.""" |
| 38 | parser = argparse.ArgumentParser() |
| 39 | parser.add_argument( |
Yihan Dong | 7382037 | 2022-11-30 18:06:20 +0800 | [diff] [blame] | 40 | '--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 Dong | 7382037 | 2022-11-30 18:06:20 +0800 | [diff] [blame] | 53 | def _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 | |
| 87 | def main(argv): |
| 88 | args = _get_args() |
| 89 | |
Yihan Dong | 7382037 | 2022-11-30 18:06:20 +0800 | [diff] [blame] | 90 | 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 Dong | 7382037 | 2022-11-30 18:06:20 +0800 | [diff] [blame] | 96 | 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 | |
| 102 | if __name__ == "__main__": |
Yihan Dong | 58c428e | 2023-05-19 18:25:23 +0800 | [diff] [blame] | 103 | main(sys.argv) |