diff --git a/.github/workflows/license-check.yml b/.github/workflows/license-check.yml new file mode 100644 index 0000000..ae8640e --- /dev/null +++ b/.github/workflows/license-check.yml @@ -0,0 +1,40 @@ +name: License Check + +on: + push: + branches: + - main + - develop + paths: + - 'composer.lock' + - 'composer.json' + pull_request: + paths: + - 'composer.lock' + - 'composer.json' + +jobs: + license-check: + runs-on: ubuntu-latest + + strategy: + matrix: + operating-system: [ 'ubuntu-latest' ] + php-versions: [ '8.4' ] + dependency-stability: [ 'prefer-none' ] + + name: P${{ matrix.php-versions }} - ${{ matrix.operating-system}} + + steps: + - uses: actions/checkout@v4 + - name: Install PHP versions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-versions }} + tools: "composer:v2" + + - name: Install dependencies + run: composer install --prefer-dist --no-interaction + + - name: Run license check + run: composer run license-check diff --git a/composer.json b/composer.json index 40d5929..2262fe0 100644 --- a/composer.json +++ b/composer.json @@ -39,6 +39,9 @@ "phpunit/phpunit": "^11.5", "thecodingmachine/phpstan-safe-rule": "^1.4" }, + "scripts": { + "license-check": "php license-checker.php" + }, "config": { "sort-packages": true, "allow-plugins": { diff --git a/license-checker.php b/license-checker.php new file mode 100644 index 0000000..fb52124 --- /dev/null +++ b/license-checker.php @@ -0,0 +1,81 @@ + $info) { + if (in_array($package, $excludedPackages, true)) { + echo "⏩ Skipping excluded package: {$package}\n"; + continue; + } + + $checkedCount++; + $packageLicenses = $info['license'] ?? []; + $version = $info['version'] ?? 'unknown'; + + $hasAllowedLicense = false; + foreach ($packageLicenses as $license) { + if (in_array($license, $allowedLicenses, true)) { + $hasAllowedLicense = true; + break; + } + } + + if (!$hasAllowedLicense) { + $violations[] = [ + 'package' => $package, + 'version' => $version, + 'licenses' => $packageLicenses, + ]; + echo "❌ License violation: {$package} ({$version}) uses " . implode(', ', $packageLicenses) . "\n"; + } else { + echo "✅ {$package} ({$version}) uses " . implode(', ', $packageLicenses) . "\n"; + } +} + +echo "\n"; +echo "Summary:\n"; +echo "- Packages checked: {$checkedCount}\n"; +echo "- Violations found: " . count($violations) . "\n"; + +if (count($violations) > 0) { + echo "\nLicense violations detected. Please review the dependencies above.\n"; + exit(1); +} else { + echo "\nAll dependencies comply with the allowed licenses.\n"; + exit(0); +}