chore(workspace): add license-header script
This commit is contained in:
parent
de17b143db
commit
d205575659
59
tools/add-license-headers.sh
Executable file
59
tools/add-license-headers.sh
Executable file
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env bash
|
||||
# Prepend SPDX license identifiers to every Rust and Lua source file.
|
||||
# Idempotent: files already containing an `SPDX-License-Identifier:` line are skipped.
|
||||
# Run from the repository root: `./tools/add-license-headers.sh`
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
readonly LICENSE_ID="AGPL-3.0-only"
|
||||
readonly RUST_HEADER="// SPDX-License-Identifier: ${LICENSE_ID}"
|
||||
readonly LUA_HEADER="-- SPDX-License-Identifier: ${LICENSE_ID}"
|
||||
|
||||
# Directories to scan, relative to the repository root.
|
||||
readonly RUST_DIRS=("crates")
|
||||
readonly LUA_DIRS=("assets/scripts" "mods")
|
||||
|
||||
added=0
|
||||
skipped=0
|
||||
|
||||
prepend_if_missing() {
|
||||
local file="$1"
|
||||
local header="$2"
|
||||
|
||||
if grep -q "SPDX-License-Identifier:" "$file"; then
|
||||
skipped=$((skipped + 1))
|
||||
return
|
||||
fi
|
||||
|
||||
# Use a temp file in the same directory so the rename is atomic on the same filesystem.
|
||||
local tmp
|
||||
tmp=$(mktemp "${file}.XXXXXX")
|
||||
{
|
||||
printf '%s\n\n' "$header"
|
||||
cat "$file"
|
||||
} >"$tmp"
|
||||
mv "$tmp" "$file"
|
||||
added=$((added + 1))
|
||||
}
|
||||
|
||||
scan_dir() {
|
||||
local dir="$1"
|
||||
local ext="$2"
|
||||
local header="$3"
|
||||
|
||||
[[ -d "$dir" ]] || return 0
|
||||
|
||||
while IFS= read -r -d '' file; do
|
||||
prepend_if_missing "$file" "$header"
|
||||
done < <(find "$dir" -type f -name "*.${ext}" -print0)
|
||||
}
|
||||
|
||||
for dir in "${RUST_DIRS[@]}"; do
|
||||
scan_dir "$dir" "rs" "$RUST_HEADER"
|
||||
done
|
||||
|
||||
for dir in "${LUA_DIRS[@]}"; do
|
||||
scan_dir "$dir" "lua" "$LUA_HEADER"
|
||||
done
|
||||
|
||||
printf 'License headers — added: %d, already present: %d\n' "$added" "$skipped"
|
||||
Loading…
Reference in a new issue