Allowlist for APGL crates in `check-licenses` (#24998)

Michael Sloan created

Also makes `shellcheck` pass

Release Notes:

- N/A

Change summary

script/check-licenses | 37 ++++++++++++++++++++++++++++++-------
1 file changed, 30 insertions(+), 7 deletions(-)

Detailed changes

script/check-licenses 🔗

@@ -3,18 +3,41 @@
 set -euo pipefail
 
 check_license () {
-    for license in "LICENSE-AGPL" "LICENSE-GPL" "LICENSE-APACHE"; do
-        if [[ -L "$1/$license" ]]; then
+    local dir="$1"
+    local allowed_licenses=()
+    local agpl_crates=("crates/collab" "crates/livekit_api")
+
+    local is_agpl=false
+    for agpl_crate in "${agpl_crates[@]}"; do
+        if [[ "$dir" == "$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 "$1/$license" ]]; then
-            echo "Error: $1/$license exists but is not a symlink."
+        elif [[ -e "$dir/$license" ]]; then
+            echo "Error: $dir/$license exists but is not a symlink."
             exit 1
         fi
     done
-    echo "Error: $1 does not contain a license symlink"
+
+    if [[ "$dir" == "crates/collab" ]]; 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 cargo_toml; do
-   check_license $(dirname "$cargo_toml");
+git ls-files "**/*/Cargo.toml" | while read -r cargo_toml; do
+   check_license "$(dirname "$cargo_toml")"
 done