See discussion in #24657. Recalled that I had a stashed change for this, so polished it up Release Notes: - N/A
63 lines
1.8 KiB
Bash
Executable File
63 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
AGPL_CRATES=("collab")
|
|
RELEASE_CRATES=("cli" "remote_server" "zed")
|
|
|
|
check_license () {
|
|
local dir="$1"
|
|
local allowed_licenses=()
|
|
|
|
local is_agpl=false
|
|
for agpl_crate in "${AGPL_CRATES[@]}"; do
|
|
if [[ "$dir" == "crates/$agpl_crate" ]]; then
|
|
is_agpl=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ "$is_agpl" == true ]]; then
|
|
allowed_licenses=("LICENSE-AGPL")
|
|
else
|
|
allowed_licenses=("LICENSE-GPL" "LICENSE-APACHE")
|
|
fi
|
|
|
|
for license in "${allowed_licenses[@]}"; do
|
|
if [[ -L "$dir/$license" ]]; then
|
|
return 0
|
|
elif [[ -e "$dir/$license" ]]; then
|
|
echo "Error: $dir/$license exists but is not a symlink."
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
if [[ "$is_agpl" == true ]]; then
|
|
echo "Error: $dir does not contain a LICENSE-AGPL symlink"
|
|
else
|
|
echo "Error: $dir does not contain a LICENSE-GPL or LICENSE-APACHE symlink"
|
|
fi
|
|
exit 1
|
|
}
|
|
|
|
git ls-files "**/*/Cargo.toml" | while read -r cargo_toml; do
|
|
check_license "$(dirname "$cargo_toml")"
|
|
done
|
|
|
|
|
|
# Make sure the AGPL server crates are included in the release tarball.
|
|
for release_crate in "${RELEASE_CRATES[@]}"; do
|
|
tree_output=$(cargo tree --package "$release_crate")
|
|
for agpl_crate in "${AGPL_CRATES[@]}"; do
|
|
# Look for lines that contain the crate name followed by " v" (version)
|
|
# This matches patterns like "├── collab v0.44.0"
|
|
if echo "$tree_output" | grep -E "(^|[^a-zA-Z_])${agpl_crate} v" > /dev/null; then
|
|
echo "Error: crate '${agpl_crate}' is AGPL and is a dependency of crate '${release_crate}'." >&2
|
|
echo "AGPL licensed code should not be used in the release distribution, only in servers." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
done
|
|
|
|
echo "check-licenses succeeded"
|