Skip to content

Commit 446c25c

Browse files
Merge pull request #115 from aboutcode-org/release-prep-v30.4.2
Release v30.4.2
2 parents 5fb0cbd + ccdfcd2 commit 446c25c

40 files changed

+3347
-1958
lines changed

.github/workflows/docs-ci.yml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,29 @@ on: [push, pull_request]
44

55
jobs:
66
build:
7-
runs-on: ubuntu-22.04
7+
runs-on: ubuntu-24.04
88

99
strategy:
1010
max-parallel: 4
1111
matrix:
12-
python-version: [3.9]
12+
python-version: [3.13]
1313

1414
steps:
1515
- name: Checkout code
16-
uses: actions/checkout@v3
16+
uses: actions/checkout@v4
1717

1818
- name: Set up Python ${{ matrix.python-version }}
19-
uses: actions/setup-python@v4
19+
uses: actions/setup-python@v5
2020
with:
2121
python-version: ${{ matrix.python-version }}
2222

2323
- name: Install Dependencies
24-
run: pip install -e .[docs]
24+
run: ./configure --dev
2525

26-
- name: Check Sphinx Documentation build minimally
27-
working-directory: ./docs
28-
run: python3 -m sphinx -E -W source build
26+
- name: Check documentation and HTML for errors and dead links
27+
run: make docs-check
2928

30-
- name: Check for documentation style errors
31-
working-directory: ./docs
32-
run: ./scripts/doc8_style_check.sh
29+
- name: Check documentation for style errors
30+
run: make doc8
3331

3432

.github/workflows/pypi-release.yml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,21 @@ jobs:
2626
steps:
2727
- uses: actions/checkout@v4
2828
- name: Set up Python
29-
uses: actions/setup-python@v4
29+
uses: actions/setup-python@v5
3030
with:
31-
python-version: 3.9
31+
python-version: 3.12
3232

33-
- name: Install pypa/build
34-
run: python -m pip install build --user
33+
- name: Install pypa/build and twine
34+
run: python -m pip install --user --upgrade build twine pkginfo
3535

3636
- name: Build a binary wheel and a source tarball
37-
run: python -m build --sdist --wheel --outdir dist/
37+
run: python -m build --sdist --outdir dist/
38+
39+
- name: Validate wheel and sdis for Pypi
40+
run: python -m twine check dist/*
3841

3942
- name: Upload built archives
40-
uses: actions/upload-artifact@v3
43+
uses: actions/upload-artifact@v4
4144
with:
4245
name: pypi_archives
4346
path: dist/*
@@ -54,13 +57,13 @@ jobs:
5457

5558
steps:
5659
- name: Download built archives
57-
uses: actions/download-artifact@v3
60+
uses: actions/download-artifact@v4
5861
with:
5962
name: pypi_archives
6063
path: dist
6164

6265
- name: Create GH release
63-
uses: softprops/action-gh-release@v1
66+
uses: softprops/action-gh-release@v2
6467
with:
6568
draft: true
6669
files: dist/*
@@ -74,7 +77,7 @@ jobs:
7477

7578
steps:
7679
- name: Download built archives
77-
uses: actions/download-artifact@v3
80+
uses: actions/download-artifact@v4
7881
with:
7982
name: pypi_archives
8083
path: dist

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,5 @@ tcl
7373
# Ignore Jupyter Notebook related temp files
7474
.ipynb_checkpoints/
7575
/.tox/
76+
/.ruff_cache/
77+
.env

.readthedocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ python:
2626
- method: pip
2727
path: .
2828
extra_requirements:
29-
- docs
29+
- dev

AUTHORS.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ The following organizations or individuals have contributed to this code:
88
- Jono Yang @JonoYang
99
- Max Mehl @mxmehl
1010
- nexB Inc. @nexB
11+
- Pablo Castellazzi @pcastellazzi
1112
- Peter Kolbus @pkolbus
1213
- Philippe Ombredanne @pombredanne
1314
- Sebastian Schuberth @sschuberth
1415
- Steven Esser @majurg
1516
- Thomas Druez @tdruez
17+
- Uwe L. Korn @xhochy

CHANGELOG.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Changelog
22
=========
33

4+
v30.4.2 - 2025-06-25
5+
--------------------
6+
7+
This is a minor release without API changes:
8+
9+
- Use latest skeleton
10+
- Update license list to latest ScanCode
11+
12+
413
v30.4.1 - 2025-01-10
514
--------------------
615

MANIFEST.in

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
graft src
2+
graft docs
3+
graft etc
24

35
include *.LICENSE
46
include NOTICE
57
include *.ABOUT
68
include *.toml
79
include *.yml
810
include *.rst
11+
include *.png
912
include setup.*
1013
include configure*
1114
include requirements*
12-
include .git*
15+
include .dockerignore
16+
include .gitignore
17+
include .readthedocs.yml
18+
include manage.py
19+
include Dockerfile*
20+
include Makefile
21+
include MANIFEST.in
1322

14-
global-exclude *.py[co] __pycache__ *.*~
23+
include .VERSION
1524

25+
global-exclude *.py[co] __pycache__ *.*~

Makefile

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,31 @@ PYTHON_EXE?=python3
1313
VENV=venv
1414
ACTIVATE?=. ${VENV}/bin/activate;
1515

16-
dev:
17-
@echo "-> Configure the development envt."
18-
./configure --dev
1916

20-
isort:
21-
@echo "-> Apply isort changes to ensure proper imports ordering"
22-
${VENV}/bin/isort --sl -l 100 src tests setup.py
17+
conf:
18+
@echo "-> Install dependencies"
19+
./configure
2320

24-
black:
25-
@echo "-> Apply black code formatter"
26-
${VENV}/bin/black -l 100 src tests setup.py
21+
dev:
22+
@echo "-> Configure and install development dependencies"
23+
./configure --dev
2724

2825
doc8:
2926
@echo "-> Run doc8 validation"
30-
@${ACTIVATE} doc8 --max-line-length 100 --ignore-path docs/_build/ --quiet docs/
27+
@${ACTIVATE} doc8 --quiet docs/ *.rst
3128

32-
valid: isort black
29+
valid:
30+
@echo "-> Run Ruff format"
31+
@${ACTIVATE} ruff format
32+
@echo "-> Run Ruff linter"
33+
@${ACTIVATE} ruff check --fix
3334

3435
check:
35-
@echo "-> Run pycodestyle (PEP8) validation"
36-
@${ACTIVATE} pycodestyle --max-line-length=100 --exclude=.eggs,venv,lib,thirdparty,docs,migrations,settings.py,.cache .
37-
@echo "-> Run isort imports ordering validation"
38-
@${ACTIVATE} isort --sl --check-only -l 100 setup.py src tests .
39-
@echo "-> Run black validation"
40-
@${ACTIVATE} black --check --check -l 100 src tests setup.py
36+
@echo "-> Run Ruff linter validation (pycodestyle, bandit, isort, and more)"
37+
@${ACTIVATE} ruff check
38+
@echo "-> Run Ruff format validation"
39+
@${ACTIVATE} ruff format --check
40+
@$(MAKE) doc8
4141

4242
clean:
4343
@echo "-> Clean the Python env"
@@ -49,6 +49,10 @@ test:
4949

5050
docs:
5151
rm -rf docs/_build/
52-
@${ACTIVATE} sphinx-build docs/ docs/_build/
52+
@${ACTIVATE} sphinx-build docs/source docs/_build/
53+
54+
docs-check:
55+
@${ACTIVATE} sphinx-build -E -W -b html docs/source docs/_build/
56+
@${ACTIVATE} sphinx-build -E -W -b linkcheck docs/source docs/_build/
5357

54-
.PHONY: conf dev check valid black isort clean test docs
58+
.PHONY: conf dev check valid clean test docs docs-check

README.rst

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,8 @@ license expression engine in several projects and products such as:
3434

3535
- AboutCode-toolkit https://github.com/aboutcode-org/aboutcode-toolkit
3636
- AlekSIS (School Information System) https://edugit.org/AlekSIS/official/AlekSIS-Core
37-
- Barista https://github.com/Optum/barista
3837
- Conda forge tools https://github.com/conda-forge/conda-smithy
39-
- DejaCode https://dejacode.com
38+
- DejaCode https://enterprise.dejacode.com
4039
- DeltaCode https://github.com/nexB/deltacode
4140
- FenixscanX https://github.com/SmartsYoung/FenixscanX
4241
- FetchCode https://github.com/aboutcode-org/fetchcode
@@ -49,7 +48,7 @@ license expression engine in several projects and products such as:
4948
- SecObserve https://github.com/MaibornWolff/SecObserve
5049

5150
See also for details:
52-
- https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/
51+
- https://spdx.github.io/spdx-spec/v2.3/SPDX-license-expressions
5352

5453
``license-expression`` is also packaged for most Linux distributions. See below.
5554

@@ -65,17 +64,6 @@ libraries in other languages (but not as powerful of course!):
6564
- Ada https://github.com/Fabien-Chouteau/spdx_ada
6665
- Java https://github.com/spdx/tools and https://github.com/aschet/spdx-license-expression-tools
6766

68-
Build and tests status
69-
======================
70-
71-
+--------------------------+------------------------+----------------------------------+
72-
|**Linux & macOS (Travis)**| **Windows (AppVeyor)** |**Linux, Windows & macOS (Azure)**|
73-
+==========================+========================+==================================+
74-
| | | |
75-
| |travis-badge-icon| | |appveyor-badge-icon| | |azure-badge-icon| |
76-
| | | |
77-
+--------------------------+------------------------+----------------------------------+
78-
7967
Source code and download
8068
========================
8169

@@ -125,36 +113,36 @@ validate, compare, simplify and normalize license expressions.
125113

126114
Create an SPDX Licensing and parse expressions::
127115

128-
>>> from license_expression import get_spdx_licensing
129-
>>> licensing = get_spdx_licensing()
130-
>>> expression = ' GPL-2.0 or LGPL-2.1 and mit '
131-
>>> parsed = licensing.parse(expression)
132-
>>> print(parsed.pretty())
133-
OR(
134-
LicenseSymbol('GPL-2.0-only'),
135-
AND(
136-
LicenseSymbol('LGPL-2.1-only'),
137-
LicenseSymbol('MIT')
138-
)
139-
)
140-
141-
>>> str(parsed)
142-
'GPL-2.0-only OR (LGPL-2.1-only AND MIT)'
143-
144-
>>> licensing.parse('unknwon with foo', validate=True, strict=True)
145-
license_expression.ExpressionParseError: A plain license symbol cannot be used
146-
as an exception in a "WITH symbol" statement. for token: "foo" at position: 13
147-
148-
>>> licensing.parse('unknwon with foo', validate=True)
149-
license_expression.ExpressionError: Unknown license key(s): unknwon, foo
150-
151-
>>> licensing.validate('foo and MIT and GPL-2.0+')
152-
ExpressionInfo(
153-
original_expression='foo and MIT and GPL-2.0+',
154-
normalized_expression=None,
155-
errors=['Unknown license key(s): foo'],
156-
invalid_symbols=['foo']
157-
)
116+
>>> from license_expression import get_spdx_licensing
117+
>>> licensing = get_spdx_licensing()
118+
>>> expression = ' GPL-2.0 or LGPL-2.1 and mit '
119+
>>> parsed = licensing.parse(expression)
120+
>>> print(parsed.pretty())
121+
OR(
122+
LicenseSymbol('GPL-2.0-only'),
123+
AND(
124+
LicenseSymbol('LGPL-2.1-only'),
125+
LicenseSymbol('MIT')
126+
)
127+
)
128+
129+
>>> str(parsed)
130+
'GPL-2.0-only OR (LGPL-2.1-only AND MIT)'
131+
132+
>>> licensing.parse('unknwon with foo', validate=True, strict=True)
133+
license_expression.ExpressionParseError: A plain license symbol cannot be used
134+
as an exception in a "WITH symbol" statement. for token: "foo" at position: 13
135+
136+
>>> licensing.parse('unknwon with foo', validate=True)
137+
license_expression.ExpressionError: Unknown license key(s): unknwon, foo
138+
139+
>>> licensing.validate('foo and MIT and GPL-2.0+')
140+
ExpressionInfo(
141+
original_expression='foo and MIT and GPL-2.0+',
142+
normalized_expression=None,
143+
errors=['Unknown license key(s): foo'],
144+
invalid_symbols=['foo']
145+
)
158146

159147

160148
Create a simple Licensing and parse expressions::
@@ -243,20 +231,3 @@ Development
243231
- On Windows run ``configure.bat --dev`` and then ``Scripts\bin\activate`` instead.
244232

245233
- To run the tests, run ``pytest -vvs``
246-
247-
248-
.. |travis-badge-icon| image:: https://api.travis-ci.org/nexB/license-expression.png?branch=master
249-
:target: https://travis-ci.org/nexB/license-expression
250-
:alt: Travis tests status
251-
:align: middle
252-
253-
.. |appveyor-badge-icon| image:: https://ci.appveyor.com/api/projects/status/github/nexB/license-expression?svg=true
254-
:target: https://ci.appveyor.com/project/nexB/license-expression
255-
:alt: Appveyor tests status
256-
:align: middle
257-
258-
.. |azure-badge-icon| image:: https://dev.azure.com/nexB/license-expression/_apis/build/status/nexB.license-expression?branchName=master
259-
:target: https://dev.azure.com/nexB/license-expression/_build/latest?definitionId=2&branchName=master
260-
:alt: Azure pipelines tests status
261-
:align: middle
262-

azure-pipelines.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@
55
################################################################################
66

77
jobs:
8+
- template: etc/ci/azure-posix.yml
9+
parameters:
10+
job_name: run_code_checks
11+
image_name: ubuntu-24.04
12+
python_versions: ['3.13']
13+
test_suites:
14+
all: make check
15+
816
- template: etc/ci/azure-posix.yml
917
parameters:
1018
job_name: ubuntu22_cpython
@@ -39,8 +47,8 @@ jobs:
3947

4048
- template: etc/ci/azure-win.yml
4149
parameters:
42-
job_name: win2019_cpython
43-
image_name: windows-2019
50+
job_name: win2025_cpython
51+
image_name: windows-2025
4452
python_versions: ["3.9", "3.10", "3.11", "3.12", "3.13"]
4553
test_suites:
4654
all: venv\Scripts\pytest -n 2 -vvs

0 commit comments

Comments
 (0)