]> begriffs open source - freertos/blob - .github/scripts/kernel_checker.py
Use Regex for Copyright Year in Header Check (#1002)
[freertos] / .github / scripts / kernel_checker.py
1 #!/usr/bin/env python3
2 #/*
3 # * FreeRTOS Kernel <DEVELOPMENT BRANCH>
4 # * Copyright (C) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
5 # *
6 # * SPDX-License-Identifier: MIT
7 # *
8 # * Permission is hereby granted, free of charge, to any person obtaining a copy of
9 # * this software and associated documentation files (the "Software"), to deal in
10 # * the Software without restriction, including without limitation the rights to
11 # * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
12 # * the Software, and to permit persons to whom the Software is furnished to do so,
13 # * subject to the following conditions:
14 # *
15 # * The above copyright notice and this permission notice shall be included in all
16 # * copies or substantial portions of the Software.
17 # *
18 # * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 # * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
20 # * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
21 # * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
22 # * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23 # * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 # *
25 # * https://www.FreeRTOS.org
26 # * https://github.com/FreeRTOS
27 # *
28 # */
29
30 import os
31 from common.header_checker import HeaderChecker
32
33 #--------------------------------------------------------------------------------------------------
34 #                                            CONFIG
35 #--------------------------------------------------------------------------------------------------
36 KERNEL_IGNORED_FILES = [
37     'FreeRTOS-openocd.c',
38     'Makefile',
39     '.DS_Store',
40     'cspell.config.yaml'
41 ]
42
43 KERNEL_IGNORED_EXTENSIONS = [
44     '.yml',
45     '.css',
46     '.idx',
47     '.md',
48     '.url',
49     '.sty',
50     '.0-rc2',
51     '.s82',
52     '.js',
53     '.out',
54     '.pack',
55     '.2',
56     '.1-kernel-only',
57     '.0-kernel-only',
58     '.0-rc1',
59     '.readme',
60     '.tex',
61     '.png',
62     '.bat',
63     '.sh',
64     '.txt',
65     '.cmake',
66     '.config'
67 ]
68
69 KERNEL_ASM_EXTENSIONS = [
70     '.s',
71     '.S',
72     '.src',
73     '.inc',
74     '.s26',
75     '.s43',
76     '.s79',
77     '.s85',
78     '.s87',
79     '.s90',
80     '.asm',
81     '.h'
82 ]
83
84 KERNEL_PY_EXTENSIONS = [
85     '.py'
86 ]
87
88 KERNEL_IGNORED_PATTERNS = [
89     r'.*\.git.*',
90     r'.*portable/IAR/AtmelSAM7S64/.*AT91SAM7.*',
91     r'.*portable/GCC/ARM7_AT91SAM7S/.*',
92     r'.*portable/MPLAB/PIC18F/stdio.h',
93     r'.*portable/ThirdParty/xClang/XCOREAI/*',
94     r'.*IAR/ARM_C*',
95     r'.*IAR/78K0R/*',
96     r'.*CCS/MSP430X/*',
97     r'.*portable/template/*',
98     r'.*template_configuration/*'
99 ]
100
101 KERNEL_THIRD_PARTY_PATTERNS = [
102     r'.*portable/ThirdParty/GCC/Posix/port*',
103     r'.*portable/ThirdParty/*',
104     r'.*portable/IAR/AVR32_UC3/.*',
105     r'.*portable/GCC/AVR32_UC3/.*',
106 ]
107
108 KERNEL_HEADER = [
109     '/*\n',
110     ' * FreeRTOS Kernel <DEVELOPMENT BRANCH>\n',
111     ' * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n',
112     ' *\n',
113     ' * SPDX-License-Identifier: MIT\n',
114     ' *\n',
115     ' * Permission is hereby granted, free of charge, to any person obtaining a copy of\n',
116     ' * this software and associated documentation files (the "Software"), to deal in\n',
117     ' * the Software without restriction, including without limitation the rights to\n',
118     ' * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n',
119     ' * the Software, and to permit persons to whom the Software is furnished to do so,\n',
120     ' * subject to the following conditions:\n',
121     ' *\n',
122     ' * The above copyright notice and this permission notice shall be included in all\n',
123     ' * copies or substantial portions of the Software.\n',
124     ' *\n',
125     ' * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n',
126     ' * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n',
127     ' * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n',
128     ' * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n',
129     ' * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n',
130     ' * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n',
131     ' *\n',
132     ' * https://www.FreeRTOS.org\n',
133     ' * https://github.com/FreeRTOS\n',
134     ' *\n',
135     ' */\n',
136 ]
137
138
139 FREERTOS_COPYRIGHT_REGEX = r"^(;|#)?( *(\/\*|\*|#|\/\/))? Copyright \(C\) 20\d\d Amazon.com, Inc. or its affiliates. All Rights Reserved\.( \*\/)?$"
140
141 def main():
142     parser = HeaderChecker.configArgParser()
143     args   = parser.parse_args()
144
145     # Configure the checks then run
146     checker = HeaderChecker(KERNEL_HEADER,
147                             copyright_regex=FREERTOS_COPYRIGHT_REGEX,
148                             ignored_files=KERNEL_IGNORED_FILES,
149                             ignored_ext=KERNEL_IGNORED_EXTENSIONS,
150                             ignored_patterns=KERNEL_IGNORED_PATTERNS,
151                             third_party_patterns=KERNEL_THIRD_PARTY_PATTERNS,
152                             py_ext=KERNEL_PY_EXTENSIONS,
153                             asm_ext=KERNEL_ASM_EXTENSIONS)
154     checker.ignoreFile(os.path.split(__file__)[-1])
155
156     rc = checker.processArgs(args)
157     if rc:
158         checker.showHelp(__file__)
159
160     return rc
161
162 if __name__ == '__main__':
163     exit(main())