-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck-headers.js
70 lines (58 loc) · 2.19 KB
/
check-headers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import fs from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
// Resolve __dirname in ES module
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const regexToIgnore = [
/^\./, // ignore all files and directories starting with '.'
/__image_snapshots__/,
/^(node_modules|public|docs|dist)/, // ignore common directories
/^(LICENSE|HEADER)$/,
/^vite\./,
/^tsconfig\./,
/.*\.(md|yaml|json|html|png|d\.ts|css)$/,
/setup-safetest.js/,
]
// Define the expected header
const expectedHeader = `/*
Copyright 2024-present HiveMQ GmbH
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/\n`
// Function to check if a file starts with the expected header
function checkFileHeader(filePath) {
const content = fs.readFileSync(filePath, 'utf8')
if (!content.startsWith(expectedHeader)) {
console.error(`File ${filePath} does not start with the expected header.`)
process.exitCode = 1
}
}
const thisFile = process.argv[1].split('/').slice(-1)[0]
// Recursively check all files in a directory
function checkDirectory(dirPath) {
const files = fs.readdirSync(dirPath)
for (const file of files) {
const filePath = path.join(dirPath, file)
const stat = fs.statSync(filePath)
const ignore = file === thisFile || regexToIgnore.some((regex) => regex.test(file))
console.log(filePath, stat.isDirectory() ? ' (d)' : '', ignore ? ' IGNORE' : '')
if (!ignore) {
if (stat.isDirectory()) {
checkDirectory(filePath)
} else {
checkFileHeader(filePath)
}
}
}
}
// Check files in the current directory or specified directory
const dirToCheck = process.argv[2] || '.'
checkDirectory(path.resolve(__dirname, dirToCheck))