]> BookStack Code Mirror - bookstack/commitdiff
Licensing: Updated license gen scripts to share logic
authorDan Brown <redacted>
Sat, 23 Mar 2024 15:33:05 +0000 (15:33 +0000)
committerDan Brown <redacted>
Sat, 23 Mar 2024 15:33:05 +0000 (15:33 +0000)
dev/licensing/gen-js-licenses
dev/licensing/gen-licenses-shared.php
dev/licensing/gen-php-licenses
phpstan.neon.dist

index 6c44791aa27d430ff42402162d06f7c3fe1411dc..dfb2f6651b0bba868d5e690aec78affe50441c4a 100644 (file)
@@ -4,10 +4,12 @@
 // This script reads the project composer.lock file to generate
 // clear license details for our PHP dependencies.
 
+declare(strict_types=1);
+require "gen-licenses-shared.php";
+
 $rootPath = dirname(__DIR__, 2);
 $outputPath = "{$rootPath}/dev/licensing/js-library-licenses.txt";
 $outputSeparator = "\n-----------\n";
-$warnings = [];
 
 $packages = [
     ...glob("{$rootPath}/node_modules/*/package.json"),
@@ -20,12 +22,7 @@ $licenseInfo = implode($outputSeparator, $packageOutput) . "\n";
 file_put_contents($outputPath, $licenseInfo);
 
 echo "License information written to {$outputPath}\n";
-echo implode("\n", $warnings);
-
-function dd(mixed $data): never {
-    print_r($data);
-    exit(0);
-}
+echo implode("\n", getWarnings());
 
 function packageToOutput(string $packagePath): string
 {
@@ -64,58 +61,3 @@ function packageToOutput(string $packagePath): string
 
     return implode("\n", $output);
 }
-
-function findLicenseFile(string $packageName, string $packagePath): string
-{
-    $licenseNameOptions = [
-        'license', 'LICENSE', 'License',
-        'license.*', 'LICENSE.*', 'License.*',
-        'license-*.*', 'LICENSE-*.*', 'License-*.*',
-    ];
-    $packageDir = dirname($packagePath);
-
-    $foundLicenses = [];
-    foreach ($licenseNameOptions as $option) {
-        $search = glob("{$packageDir}/$option");
-        array_push($foundLicenses, ...$search);
-    }
-
-    if (count($foundLicenses) > 1) {
-        warn("Package {$packageName}: more than one license file found");
-    }
-
-    if (count($foundLicenses) > 0) {
-        $fileName = basename($foundLicenses[0]);
-        return "{$packageDir}/{$fileName}";
-    }
-
-    warn("Package {$packageName}: no license files found");
-    return '';
-}
-
-function findCopyright(string $licenseFile): string
-{
-    $fileContents = file_get_contents($licenseFile);
-    $pattern = '/^.*?copyright (\(c\)|\d{4})[\s\S]*?(\n\n|\.\n)/mi';
-    $matches = [];
-    preg_match($pattern, $fileContents, $matches);
-    $copyright = trim($matches[0] ?? '');
-
-    if (str_contains($copyright, 'i.e.')) {
-        return '';
-    }
-
-    $emailPattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i';
-    return preg_replace_callback($emailPattern, obfuscateEmail(...), $copyright);
-}
-
-function obfuscateEmail(array $matches): string
-{
-    return preg_replace('/[^@.]/', '*', $matches[1]);
-}
-
-function warn(string $text): void
-{
-    global $warnings;
-    $warnings[] = "WARN:" . $text;
-}
\ No newline at end of file
index 265c209cafbe66d7912a7dcf2ce01e89bf22de1b..a8ad350f22df73c091a8f375e757dc96ed2f3f13 100644 (file)
@@ -2,3 +2,65 @@
 
 declare(strict_types=1);
 
+$warnings = [];
+
+function findLicenseFile(string $packageName, string $packagePath): string
+{
+    $licenseNameOptions = [
+        'license', 'LICENSE', 'License',
+        'license.*', 'LICENSE.*', 'License.*',
+        'license-*.*', 'LICENSE-*.*', 'License-*.*',
+    ];
+    $packageDir = dirname($packagePath);
+
+    $foundLicenses = [];
+    foreach ($licenseNameOptions as $option) {
+        $search = glob("{$packageDir}/$option");
+        array_push($foundLicenses, ...$search);
+    }
+
+    if (count($foundLicenses) > 1) {
+        warn("Package {$packageName}: more than one license file found");
+    }
+
+    if (count($foundLicenses) > 0) {
+        $fileName = basename($foundLicenses[0]);
+        return "{$packageDir}/{$fileName}";
+    }
+
+    warn("Package {$packageName}: no license files found");
+    return '';
+}
+
+function findCopyright(string $licenseFile): string
+{
+    $fileContents = file_get_contents($licenseFile);
+    $pattern = '/^.*?copyright (\(c\)|\d{4})[\s\S]*?(\n\n|\.\n)/mi';
+    $matches = [];
+    preg_match($pattern, $fileContents, $matches);
+    $copyright = trim($matches[0] ?? '');
+
+    if (str_contains($copyright, 'i.e.')) {
+        return '';
+    }
+
+    $emailPattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i';
+    return preg_replace_callback($emailPattern, obfuscateEmail(...), $copyright);
+}
+
+function obfuscateEmail(array $matches): string
+{
+    return preg_replace('/[^@.]/', '*', $matches[1]);
+}
+
+function warn(string $text): void
+{
+    global $warnings;
+    $warnings[] = "WARN:" . $text;
+}
+
+function getWarnings(): array
+{
+    global $warnings;
+    return $warnings;
+}
index 0c922e281d8cc74c5fbbc1446ce65969e58e6d28..ed5a21c5aa97f690a98cc46db8a60520d30f5878 100644 (file)
@@ -4,11 +4,13 @@
 // This script reads the project composer.lock file to generate
 // clear license details for our PHP dependencies.
 
+declare(strict_types=1);
+require "gen-licenses-shared.php";
+
 $rootPath = dirname(__DIR__, 2);
 $outputPath = "{$rootPath}/dev/licensing/php-library-licenses.txt";
 $composerLock = json_decode(file_get_contents($rootPath . "/composer.lock"));
 $outputSeparator = "\n-----------\n";
-$warnings = [];
 
 $packages = $composerLock->packages;
 $packageOutput = array_map(packageToOutput(...), $packages);
@@ -17,22 +19,25 @@ $licenseInfo =  implode($outputSeparator, $packageOutput) . "\n";
 file_put_contents($outputPath, $licenseInfo);
 
 echo "License information written to {$outputPath}\n";
-echo implode("\n", $warnings);
+echo implode("\n", getWarnings());
 
 function packageToOutput(stdClass $package) : string {
+    global $rootPath;
     $output = ["{$package->name}"];
 
     $licenses = is_array($package->license) ? $package->license : [$package->license];
     $output[] = "License: " . implode(' ', $licenses);
 
-    $licenseFile = findLicenseFile($package->name);
+    $packagePath = "{$rootPath}/vendor/{$package->name}/package.json";
+    $licenseFile = findLicenseFile($package->name, $packagePath);
     if ($licenseFile) {
-        $output[] = "License File: {$licenseFile}";
+        $relLicenseFile = str_replace("{$rootPath}/", '', $licenseFile);
+        $output[] = "License File: {$relLicenseFile}";
         $copyright = findCopyright($licenseFile);
         if ($copyright) {
             $output[] = "Copyright: {$copyright}";
         } else {
-            warn("Package {$package->name} has no copyright found in its license");
+            warn("Package {$package->name}: no copyright found in its license");
         }
     }
 
@@ -47,50 +52,4 @@ function packageToOutput(stdClass $package) : string {
     }
 
     return implode("\n", $output);
-}
-
-function findLicenseFile(string $packageName): string {
-    global $rootPath;
-    $licenseNameOptions = ['license', 'LICENSE', 'license.*', 'LICENSE.*'];
-
-    $packagePath = "vendor/{$packageName}";
-    $filePath = "{$rootPath}/{$packagePath}";
-
-    $foundLicenses = [];
-    foreach ($licenseNameOptions as $option) {
-        $search = glob("{$filePath}/$option");
-        array_push($foundLicenses, ...$search);
-    }
-
-    if (count($foundLicenses) > 1) {
-        warn("Package {$packagePath} has more than one license file found");
-    }
-
-    if (count($foundLicenses) > 0) {
-        $fileName = basename($foundLicenses[0]);
-        return "{$packagePath}/{$fileName}";
-    }
-
-    warn("Package {$packageName} has no license files found");
-    return '';
-}
-
-function findCopyright(string $licenseFile): string {
-    $fileContents = file_get_contents($licenseFile);
-    $pattern = '/^.*?copyright (\(c\)|\d{4})[\s\S]*?(\n\n|\.\n)/mi';
-    $matches = [];
-    preg_match($pattern, $fileContents, $matches);
-    $copyright = trim($matches[0] ?? '');
-
-    $emailPattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i';
-    return preg_replace_callback($emailPattern, obfuscateEmail(...), $copyright);
-}
-
-function obfuscateEmail(array $matches): string {
-    return preg_replace('/[^@.]/', '*', $matches[1]);
-}
-
-function warn(string $text): void {
-    global $warnings;
-    $warnings[] = "WARN:" . $text;
 }
\ No newline at end of file
index 15a519e20f610ff2de030d8706490543f65586e5..bcf4e5aa208846989707df3c1b22af4df58a0471 100644 (file)
@@ -19,5 +19,6 @@ parameters:
 
     excludePaths:
         - ./Config/**/*.php
+        - ./dev/**/*.php
 
     checkMissingIterableValueType: false
\ No newline at end of file
Morty Proxy This is a proxified and sanitized view of the page, visit original site.