Skip to content

Commit 9fb1e78

Browse files
committed
license compliance with pip-licenses
1 parent 0ec685c commit 9fb1e78

File tree

2 files changed

+30
-53
lines changed

2 files changed

+30
-53
lines changed

.github/workflows/license-compliance.yml

+7-53
Original file line numberDiff line numberDiff line change
@@ -9,68 +9,22 @@ on:
99
- main
1010

1111
jobs:
12-
license-compliance:
12+
license-check:
1313
runs-on: ubuntu-latest
14-
1514
steps:
1615
- name: Checkout code
17-
uses: actions/checkout@v3
16+
uses: actions/checkout@v2
1817

1918
- name: Set up Python
20-
uses: actions/setup-python@v4
19+
uses: actions/setup-python@v2
2120
with:
22-
python-version: 3.9
21+
python-version: '3.8'
2322

2423
- name: Install dependencies
2524
run: |
26-
python -m venv venv
27-
. venv/bin/activate
25+
python -m pip install --upgrade pip
2826
pip install -r requirements.txt
29-
30-
- name: Check licenses
31-
run: |
32-
. venv/bin/activate
3327
pip install pip-licenses
34-
pip-licenses --from=mixed --output-file=dependency_licenses.json --format=json
35-
36-
- name: 'Parse Dependency licenses'
37-
id: parse-dependency-licenses
38-
run: |
39-
dependency_licenses=$(cat dependency_licenses.json)
40-
echo "::set-output name=dependency-licenses::${dependency_licenses}"
41-
42-
- name: 'Compare Dependency licenses'
43-
id: compare-dependency-licenses
44-
run: |
45-
dependency_licenses=$(cat dependency_licenses.json)
46-
echo "Dependency licenses content:"
47-
echo "${dependency_licenses}"
48-
49-
permitted_licenses="MIT License,Apache-2.0,BSD,EPL1" # Updated permitted licenses list
50-
51-
for package_info in $(echo "${dependency_licenses}" | jq -c '.[]'); do
52-
package_name=$(echo "${package_info}" | jq -r '.Name')
53-
license=$(echo "${package_info}" | jq -r '.License')
54-
55-
if [[ ! ",${permitted_licenses}," =~ ",${license}," ]]; then
56-
echo "Error: Package ${package_name} has an unrecognized license: ${license}"
57-
exit 1
58-
fi
59-
done
60-
61-
- name: 'Upload Dependency License Report'
62-
if: always()
63-
uses: actions/upload-artifact@v2
64-
with:
65-
name: dependency-license-report
66-
path: dependency_licenses.json
67-
68-
- name: 'Upload License Compliance Results'
69-
if: always()
70-
uses: actions/upload-artifact@v2
71-
with:
72-
name: license-compliance-results
73-
path: license_compliance_results.txt
7428
75-
- name: License compliance summary
76-
run: echo "License compliance check completed. See artifacts for details."
29+
- name: Run license compliance tests
30+
run: python -m unittest discover -s tests -p 'test_license_compliance.py'

src/test/test_license_compliance

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import unittest
2+
import subprocess
3+
import json
4+
5+
class TestLicenseCompliance(unittest.TestCase):
6+
ALLOWED_LICENSES = {
7+
'MIT',
8+
'BSD',
9+
'Apache 2.0',
10+
'BSD-2-Clause',
11+
'BSD-3-Clause',
12+
'ISC',
13+
}
14+
15+
def test_license_compliance(self):
16+
result = subprocess.run(['pip-licenses', '--format=json'], capture_output=True, text=True)
17+
packages = json.loads(result.stdout)
18+
for pkg in packages:
19+
with self.subTest(pkg=pkg['Name']):
20+
self.assertIn(pkg['License'], self.ALLOWED_LICENSES, f"{pkg['Name']} has a disallowed license: {pkg['License']}")
21+
22+
if __name__ == '__main__':
23+
unittest.main()

0 commit comments

Comments
 (0)