diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/README.md | 13 | ||||
-rw-r--r-- | tools/copyright_checker.js | 84 |
2 files changed, 97 insertions, 0 deletions
diff --git a/tools/README.md b/tools/README.md index 59860ca1b..e88f8d892 100644 --- a/tools/README.md +++ b/tools/README.md @@ -72,3 +72,16 @@ on top, somewhat similar to `git subtree`. 2. Run `./tools/wgpu_sync.js` 3. Double check changes, possibly patch 4. Commit & send a PR with the updates + +## copyright_checker.js + +`copyright_checker.js` is used to check copyright headers in the codebase. + +To run the _copyright checker_: + +```sh +deno run --allow-read --allow-run --unstable ./tools/copyright_checker.js +``` + +Then it will check all code files in the repository and report any files that +are not properly licensed. diff --git a/tools/copyright_checker.js b/tools/copyright_checker.js new file mode 100644 index 000000000..706f59dbd --- /dev/null +++ b/tools/copyright_checker.js @@ -0,0 +1,84 @@ +#!/usr/bin/env -S deno run --unstable --allow-read --allow-run +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +import { getSources, ROOT_PATH } from "./util.js"; + +const buffer = new Uint8Array(1024); +const textDecoder = new TextDecoder(); + +async function readFirstPartOfFile(filePath) { + const file = await Deno.open(filePath, { read: true }); + try { + const byteCount = await file.read(buffer); + return textDecoder.decode(buffer.slice(0, byteCount ?? 0)); + } finally { + file.close(); + } +} + +async function checkCopyright() { + const sourceFiles = await getSources(ROOT_PATH, [ + // js and ts + "*.js", + "*.ts", + ":!:.github/mtime_cache/action.js", + ":!:cli/tests/testdata/**", + ":!:cli/bench/testdata/**", + ":!:cli/tsc/dts/**", + ":!:cli/tsc/*typescript.js", + ":!:cli/tsc/compiler.d.ts", + ":!:test_util/wpt/**", + ":!:tools/**", // these files are starts with `#!/usr/bin/env` + ":!:cli/tools/init/templates/**", + + // rust + "*.rs", + ":!:ops/optimizer_tests/**", + + // toml + "*Cargo.toml", + ]); + + let totalCount = 0; + const sourceFilesSet = new Set(sourceFiles); + + for (const file of sourceFilesSet) { + const ERROR_MSG = "Copyright header is missing: "; + + const fileText = await readFirstPartOfFile(file); + if (file.endsWith("Cargo.toml")) { + if ( + !fileText.startsWith( + "# Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.", + ) + ) { + console.log(ERROR_MSG + file); + totalCount += 1; + } + continue; + } + + if ( + !fileText.startsWith( + "// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.", + ) + ) { + console.log(ERROR_MSG + file); + totalCount += 1; + } + } + + console.log("\nTotal errors: " + totalCount); + + if (totalCount > 0) { + Deno.exit(1); + } +} + +async function main() { + await Deno.chdir(ROOT_PATH); + + await checkCopyright(); +} + +await main(); |