diff --git a/.github/workflows/license-compliance.yml b/.github/workflows/license-compliance.yml index d67618e..4f2ea25 100644 --- a/.github/workflows/license-compliance.yml +++ b/.github/workflows/license-compliance.yml @@ -31,13 +31,50 @@ jobs: run: | . venv/bin/activate pip install pip-licenses - pip-licenses --from=mixed --output-file=dependencies_licenses.txt + pip-licenses --from=mixed --output-file=dependency_licenses.json --format=json - - name: Upload license reports - uses: actions/upload-artifact@v3 + - name: 'Parse Dependency licenses' + id: parse-dependency-licenses + run: | + dependency_licenses=$(cat dependency_licenses.json) + echo "::set-output name=dependency-licenses::${dependency_licenses}" + + - name: 'Compare Dependency licenses' + id: compare-dependency-licenses + run: | + dependency_licenses=$(cat dependency_licenses.json) + echo "Dependency licenses content:" + echo "${dependency_licenses}" + + permitted_licenses="MIT,Apache-2.0,BSD,EPL1" + non_compliant_packages="" + for package in $(echo "${dependency_licenses}" | jq -r '.[] | .Package') + do + license=$(echo "${dependency_licenses}" | jq -r --arg package "$package" '.[] | select(.Package == $package) | .License') + if [[ ! ",${permitted_licenses}," =~ ",${license}," ]]; then + echo "Error: Package $package has an unrecognized license: $license" + non_compliant_packages+="Package $package has an unrecognized license: $license\n" + fi + done + echo "::set-output name=non-compliant-packages::${non_compliant_packages}" + if [ -n "${non_compliant_packages}" ]; then + exit 1 + fi + + + - name: 'Upload Dependency License Report' + if: always() + uses: actions/upload-artifact@v2 + with: + name: dependency-license-report + path: dependency_licenses.json + + - name: 'Upload License Compliance Results' + if: always() + uses: actions/upload-artifact@v2 with: - name: dependencies-license-reports - path: dependencies_licenses.txt + name: license-compliance-results + path: license_compliance_results.txt - name: License compliance summary run: echo "License compliance check completed. See artifacts for details."