From b4583347032671ff772793d9bc3dbb162de8b348 Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Wed, 4 Mar 2026 12:02:00 +0530 Subject: [PATCH 1/9] Add smaller wheels for license data and index Signed-off-by: Ayan Sinha Mahapatra --- configure | 15 +- configure.bat | 8 +- ...> scancode-create-pypi-wheel-and-sdist.sh} | 17 +- .../scancode-create-release-app-linux.sh | 3 +- .../scancode-create-release-app-macos.sh | 5 +- .../scancode-create-release-app-sources.sh | 7 +- .../scancode-create-release-app-windows.sh | 6 +- etc/thirdparty/flot-0.7.2-py3-none-any.whl | Bin 0 -> 21905 bytes .../flot-0.7.2-py3-none-any.whl.ABOUT | 10 + etc/thirdparty/flot.LICENSE | 52 +++ pyproject-licensedcode-data.toml | 63 +++ pyproject-licensedcode-index.toml | 62 +++ pyproject-scancode-toolkit-mini.toml | 364 +++++++++++++++++ pyproject-scancode-toolkit.toml | 365 ++++++++++++++++++ pyproject.toml | 324 +++++++++++++++- requirements-dev.txt | 1 + setup-mini.cfg | 237 ------------ setup.cfg | 239 ------------ setup.py | 6 - 19 files changed, 1264 insertions(+), 520 deletions(-) rename etc/release/{scancode-create-pypi-wheel.sh => scancode-create-pypi-wheel-and-sdist.sh} (66%) create mode 100644 etc/thirdparty/flot-0.7.2-py3-none-any.whl create mode 100644 etc/thirdparty/flot-0.7.2-py3-none-any.whl.ABOUT create mode 100644 etc/thirdparty/flot.LICENSE create mode 100644 pyproject-licensedcode-data.toml create mode 100644 pyproject-licensedcode-index.toml create mode 100644 pyproject-scancode-toolkit-mini.toml create mode 100644 pyproject-scancode-toolkit.toml delete mode 100644 setup-mini.cfg delete mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/configure b/configure index 2eb84020d52..26c2f2e4969 100755 --- a/configure +++ b/configure @@ -153,6 +153,11 @@ REQUIREMENTS="--editable . --constraint requirements.txt" DEV_REQUIREMENTS="--editable .[dev,packages] --constraint requirements.txt --constraint requirements-dev.txt" PROD_REQUIREMENTS="scancode_toolkit*.whl" +REQUIREMENTS="--no-build-isolation --editable $BASE --constraint requirements.txt --constraint requirements-linux.txt" +DEV_REQUIREMENTS="--no-build-isolation --editable $BASE_DEV --constraint requirements.txt --constraint requirements-linux.txt --constraint requirements-dev.txt" +PROD_REQUIREMENTS="--no-build-isolation scancode_toolkit*.whl" +FLOT_REQUIREMENTS="etc/thirdparty/flot*.whl" + # where we create a virtualenv VIRTUALENV_DIR=venv @@ -173,16 +178,10 @@ CFG_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" CFG_BIN_DIR=$CFG_ROOT_DIR/$VIRTUALENV_DIR/bin -################################ -# Install with or without and index. With "--no-index" this is using only local wheels -# This is an offline mode with no index and no network operations -# NO_INDEX="--no-index " -NO_INDEX="" - - ################################ # Thirdparty package locations and index handling # Find packages from the local thirdparty directory if present +# offline mode for scancode installation with no Pypi index at all thirddir=$CFG_ROOT_DIR/thirdparty if [[ "$(echo $thirddir/*.whl)x" != "$thirddir/*.whlx" ]]; then PIP_EXTRA_ARGS="--no-index --find-links $CFG_ROOT_DIR/thirdparty" @@ -255,7 +254,6 @@ install_packages() { # We always have the PEP517 build dependencies installed already. "$CFG_BIN_DIR/pip" install \ --upgrade \ - --no-build-isolation \ $CFG_QUIET \ $PIP_EXTRA_ARGS \ $1 @@ -317,6 +315,7 @@ PIP_EXTRA_ARGS="$PIP_EXTRA_ARGS" find_python create_virtualenv "$VIRTUALENV_DIR" +install_packages "$FLOT_REQUIREMENTS" install_packages "$CFG_REQUIREMENTS" . "$CFG_BIN_DIR/activate" "$CFG_BIN_DIR/scancode-train-gibberish-model" diff --git a/configure.bat b/configure.bat index 022b24a93b7..dcfc20ce4ea 100644 --- a/configure.bat +++ b/configure.bat @@ -157,10 +157,16 @@ if %ERRORLEVEL% neq 0 ( "%CFG_BIN_DIR%\pip" install ^ --upgrade ^ - --no-build-isolation ^ + %CFG_QUIET% ^ + %PIP_EXTRA_ARGS% ^ + %FLOT_REQUIREMENTS% + +"%CFG_BIN_DIR%\pip" install ^ + --upgrade ^ %CFG_QUIET% ^ %PIP_EXTRA_ARGS% ^ %CFG_REQUIREMENTS% + "%CFG_BIN_DIR%\scancode-train-gibberish-model" @rem ################################ diff --git a/etc/release/scancode-create-pypi-wheel.sh b/etc/release/scancode-create-pypi-wheel-and-sdist.sh similarity index 66% rename from etc/release/scancode-create-pypi-wheel.sh rename to etc/release/scancode-create-pypi-wheel-and-sdist.sh index 0955022dbfa..da333f42538 100755 --- a/etc/release/scancode-create-pypi-wheel.sh +++ b/etc/release/scancode-create-pypi-wheel-and-sdist.sh @@ -22,18 +22,13 @@ venv/bin/scancode-reindex-licenses venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model -python_tag=$( python -c "import platform;print(f\"cp{''.join(platform.python_version_tuple()[:2])}\")" ) +# build license data packages +venv/bin/flot --pyproject pyproject-licensedcode-data.toml --wheel --sdist +venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel --sdist -venv/bin/python setup.py --quiet bdist_wheel --python-tag $python_tag - -rm -rf build .eggs src/scancode_toolkit*.egg-info src/scancode_toolkit_mini*.egg-info -cp setup.cfg setup-main.cfg -cp setup-mini.cfg setup.cfg - -venv/bin/python setup.py --quiet bdist_wheel --python-tag $python_tag - -cp setup-main.cfg setup.cfg -rm setup-main.cfg +# build code packages +venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel --sdist +venv/bin/flot --pyproject pyproject-scancode-toolkit-mini.toml --wheel --sdist venv/bin/twine check dist/* diff --git a/etc/release/scancode-create-release-app-linux.sh b/etc/release/scancode-create-release-app-linux.sh index 7cea129d9fb..74358fb6184 100755 --- a/etc/release/scancode-create-release-app-linux.sh +++ b/etc/release/scancode-create-release-app-linux.sh @@ -64,13 +64,12 @@ cp -r etc/thirdparty $release_dir/etc # Build the wheel ./configure --dev -venv/bin/scancode-reindex-licenses venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model -venv/bin/python setup.py --quiet bdist_wheel --python-tag cp$python_version cp -r \ dist/scancode_*.whl \ + dist/licensedcode_index_*.whl \ scancode extractcode configure \ *.rst \ samples \ diff --git a/etc/release/scancode-create-release-app-macos.sh b/etc/release/scancode-create-release-app-macos.sh index 9bf6962e24d..6e7a8780f3e 100755 --- a/etc/release/scancode-create-release-app-macos.sh +++ b/etc/release/scancode-create-release-app-macos.sh @@ -20,7 +20,7 @@ set -e operating_system=macos python_dot_version=$1 python_version=${python_dot_version//.} -python_exe="python3" +python_exe="python$python_dot_version" release_dir=scancode-toolkit-$(git describe --tags) rm -rf $release_dir @@ -62,13 +62,12 @@ cp -r etc/thirdparty $release_dir/etc # Build the wheel ./configure --dev -venv/bin/scancode-reindex-licenses venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model -venv/bin/python setup.py --quiet bdist_wheel --python-tag cp$python_version cp -r \ dist/scancode_*.whl \ + dist/licensedcode_index_*.whl \ scancode extractcode configure \ *.rst \ samples \ diff --git a/etc/release/scancode-create-release-app-sources.sh b/etc/release/scancode-create-release-app-sources.sh index c7fa0fb61e1..ccfcfb01215 100755 --- a/etc/release/scancode-create-release-app-sources.sh +++ b/etc/release/scancode-create-release-app-sources.sh @@ -9,7 +9,7 @@ # ################################################################################ -# ScanCode release build script for a Windows app archive +# ScanCode release build script for a source archive for the apps ################################################################################ set -e @@ -24,9 +24,7 @@ git describe --tags > $release_dir/SCANCODE_VERSION thirdparty_dir=$release_dir/thirdparty mkdir -p $thirdparty_dir -# build an sdist -./configure --dev -venv/bin/python setup.py --quiet sdist +# collect other built dist mv dist/*.tar.gz $release_dir ./configure --dev @@ -51,6 +49,7 @@ cp -r etc/thirdparty $release_dir/etc cp -r \ scancode.bat scancode extractcode extractcode.bat configure configure.bat \ *.rst \ + *.toml \ docs \ samples \ *NOTICE *LICENSE *ABOUT \ diff --git a/etc/release/scancode-create-release-app-windows.sh b/etc/release/scancode-create-release-app-windows.sh index 5d6950a85a1..d07ff0575a0 100755 --- a/etc/release/scancode-create-release-app-windows.sh +++ b/etc/release/scancode-create-release-app-windows.sh @@ -59,15 +59,15 @@ rm -rf $thirdparty_src_dir mkdir -p $release_dir/etc cp -r etc/thirdparty $release_dir/etc -# Build the wheel +# Build the app archive ./configure --dev -venv/bin/scancode-reindex-licenses + venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model -venv/bin/python setup.py --quiet bdist_wheel --python-tag cp$python_version cp -r \ dist/scancode_*.whl \ + dist/licensedcode_index_*.whl \ scancode.bat extractcode.bat configure.bat \ *.rst \ samples \ diff --git a/etc/thirdparty/flot-0.7.2-py3-none-any.whl b/etc/thirdparty/flot-0.7.2-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c74b7b9af51ece90bae1111f15ae12c489dc888e GIT binary patch literal 21905 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.7.0" ] +build-backend = "flot.buildapi" + +[project] +name = "licensedcode-data" +version = "32.1.0" +description = "A packaging of the ScanCode licensedb license and license rules database." +long_description_content_type = "text/x-rst" +readme = "src/licensedcode/data/README.rst" +license = { text = "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" } +authors = [ + { name = "nexB. Inc. and others", email = "info@aboutcode.org" }, +] +keywords = [ + "open source", + "license", + "licensing", +] + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Topic :: Software Development", + "Topic :: Utilities", +] + +[project.urls] +Homepage = "https://github.com/nexB/scancode-toolkit" + +[tool.flot] +wheel_path_prefixes_to_strip = [ "src" ] + +includes = [ + "src/licensedcode/data/**/*", + "src/licensedcode/README.rst", +] + +excludes = [ + "src/licensedcode/data/cache/**/*", +] + +metadata_files = [ + "*.LICENSE", + "NOTICE", + "AUTHORS.rst", + "CHANGELOG.rst", + "CODE_OF_CONDUCT.rst", +] + +editable_paths = [ "src" ] + +sdist_extra_includes = [ + ".gitattributes", + ".gitignore", + "*.LICENSE", + "NOTICE", + "*.ABOUT", + "pyproject-licensedcode-data.toml", + "*.yml", + "*.rst", +] diff --git a/pyproject-licensedcode-index.toml b/pyproject-licensedcode-index.toml new file mode 100644 index 00000000000..159b351ccd9 --- /dev/null +++ b/pyproject-licensedcode-index.toml @@ -0,0 +1,62 @@ +[build-system] +requires = [ "flot>=0.7.0" ] +build-backend = "flot.buildapi" + +[project] +name = "licensedcode-index" +version = "32.1.0" +description = "A packaging of the ScanCode licensedb license and license rules pre-built index. Can only be used with ScanCode-Toolkit." +long_description_content_type = "text/x-rst" +readme = "src/licensedcode/data/README.rst" +license = { text = "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" } +authors = [ + { name = "nexB. Inc. and others", email = "info@aboutcode.org" }, +] +keywords = [ + "open source", + "license", + "licensing", +] + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Topic :: Software Development", + "Topic :: Utilities", +] + +[project.urls] +Homepage = "https://github.com/nexB/scancode-toolkit" + +[tool.flot] +wheel_path_prefixes_to_strip = [ "src" ] + +includes = [ + "src/licensedcode/data/cache/**/*", + "src/licensedcode/data/cc-by-4.0.LICENSE", + "src/licensedcode/data/scancode-data.ABOUT", + "src/licensedcode/README.rst", + "src/licensedcode/data/README.rst", +] + +metadata_files = [ + "*.LICENSE", + "NOTICE", + "AUTHORS.rst", + "CHANGELOG.rst", + "CODE_OF_CONDUCT.rst", +] + +editable_paths = [ "src" ] + +sdist_extra_includes = [ + ".gitattributes", + ".gitignore", + "*.LICENSE", + "NOTICE", + "*.ABOUT", + "pyproject-licensedcode-index.toml", + "*.yml", + "*.rst", +] diff --git a/pyproject-scancode-toolkit-mini.toml b/pyproject-scancode-toolkit-mini.toml new file mode 100644 index 00000000000..f4c24fd2e94 --- /dev/null +++ b/pyproject-scancode-toolkit-mini.toml @@ -0,0 +1,364 @@ +[build-system] +requires = [ "flot>=0.7.0" ] +build-backend = "flot.buildapi" + +[project] +name = "scancode-toolkit-mini" +version = "32.1.0" +description = "ScanCode is a tool to scan code for license, copyright, package and their documented dependencies and other interesting facts." +readme = "README.rst" +license = { text = "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" } +requires-python = ">=3.8" +authors = [ + { name = "nexB. Inc. and others", email = "info@aboutcode.org" }, +] +keywords = [ + "open source", + "scan", + "license", + "package", + "dependency", + "copyright", + "filetype", + "author", + "extract", + "licensing", + "sca", + "SBOM", + "spdx", + "cyclonedx", + "package-url", + "purl", +] + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development", + "Topic :: Utilities", +] + +dependencies = [ + "licensedcode-index", + "attrs >= 18.1,!=20.1.0;python_version<'3.11'", + "attrs >= 22.1.0;python_version>='3.11'", + "Beautifulsoup4[chardet] >= 4.13.0", + "boolean.py >= 4.0", + "chardet >= 3.0.0", + "click >= 6.7, !=7.0, !=8.1.8;python_version<'3.10'", + "click >= 8.2.0;python_version>='3.10'", + "colorama >= 0.3.9", + "commoncode >= 32.4.2", + "cyseq >= 0.1.2", + "container-inspector >= 31.0.0", + "debian-inspector >= 31.1.0", + "dparse2 >= 0.7.0", + "fasteners", + "fingerprints >= 0.6.0, <=1.2.3", + "ftfy >= 6.0.0", + "gemfileparser2 >= 0.9.0", + "html5lib", + "importlib_metadata", + "intbitset >= 4.1.0", + "jaraco.functools", + "javaproperties >= 0.5", + "jinja2 >= 2.7.0", + "jsonstreams >= 0.5.0", + "license_expression >= 30.4.4", + "lxml >= 5.4.0", + "MarkupSafe >= 2.1.2", + "multiregex >= 2.0.3", + "normality <= 2.6.1", + "packageurl_python >= 0.9.0", + "packvers >= 21.0.0", + # use temp advanced patched release + "parameter-expansion-patched >= 0.3.1", + "pdfminer.six >= 20251227", + "pefile >= 2020.1.1", + "pip-requirements-parser >= 32.0.1", + "pkginfo2 >= 30.0.0", + "pluggy >= 1.0.0", + "plugincode >= 32.0.0", + "publicsuffix2", + "pyahocorasick >= 2.3.0", + "pygmars >= 1.0.0", + "pygments >= 1.0.0", + "pymaven_patch >= 0.2.8", + "requests >= 2.7.0", + "saneyaml >= 0.6.0", + "spdx_tools == 0.8.2", + "text_unidecode >= 1.0", + "tomli >= 2", + "urlpy", + "xmltodict >= 0.11.0", + "zipp >= 3.0.0; python_version < \"3.9\"", + "typecode >= 30.0.1", + #"typecode[full] >= 30.1.0", + #"extractcode[full] >= 31.0.0", +] + +[project.urls] +Homepage = "https://github.com/nexB/scancode-toolkit" + + +[project.optional-dependencies] +licenses = [ + "licensecode-data", +] + +# no impact but added for symmetry with the mini config +full = [ + "extractcode[full] >= 31.0.0", + "typecode[full] >= 30.0.0", +] + +# linux-only package handling +packages = [ + "rpm_inspector_rpm >= 4.16.1.3; platform_system == 'Linux'", + "regipy >= 3.1.0; platform_system == 'Linux'", + "packagedcode_msitools >= 0.101.210706; platform_system == 'Linux'", +] + +testing = [ + "flot", + "pytest >= 6, != 7.0.0", + "pytest-xdist >= 2", + "aboutcode-toolkit >= 7.0.2", + "pycodestyle >= 2.8.0", + "twine", + "black", + "isort", + "vendorize >= 0.3.0", + "pytest-rerunfailures", + "bump-my-version", +] + +docs = [ + "Sphinx == 5.1.0", + "sphinx_rtd_theme >= 0.5.1", + "doc8 >= 0.8.1", + "sphinx-reredirects >= 0.1.2", + "sphinx-autobuild", + "sphinx-rtd-dark-mode>=1.3.0", + "sphinx-copybutton", +] + + +[tool.bumpversion] +current_version = "32.1.0" +allow_dirty = true + +files = [ + { filename = "src/scancode_config.py" }, + { filename = "pyproject.toml" }, + { filename = "pyproject-scancode-toolkit-mini.toml" }, + { filename = "pyproject-packagedcode.toml" }, + +] + + +[tool.flot] +wheel_path_prefixes_to_strip = [ "src" ] + +includes = [ + "src/**/*", +] + +excludes = [ + # these are now provided by separate, smaller packages + "src/licensedcode/data/**/*", + + # scancode_toolkit.egg-info is only for editable local config + "src/scancode_toolkit.egg-info/**/*", + + "docs/build/**/*", + + # Python compiled files + "**/*.py[cod]", + "**/*.egg-info", + # Various junk and temp files + "**/.DS_Store", + "**/*~", + "**/.*.sw[po]", + "**/.ve", + "**/*.bak", + "**/.ipynb_checkpoints", +] + +metadata_files = [ + "*.LICENSE", + "NOTICE", + "AUTHORS.rst", + "CHANGELOG.rst", + "CODE_OF_CONDUCT.rst", +] + +editable_paths = [ "src", "tests" ] + +sdist_extra_includes = [ + "etc/**/*", + # "docs/**/*", + ".github/**/*", + # "samples/**/*", + # "tests/**/*", + ".gitattributes", + ".gitignore", + "*.LICENSE", + "NOTICE", + "*.ABOUT", + "*.toml", + "*.yml", + "*.rst", + "*.py", + + "requirements*", + + "configure*", + "extractcode*", + "scancode*", + + ".dockerignore", + "Dockerfile*", + # path to executable used by a built app + "PYTHON_EXECUTABLE*", + ".VERSION", +] + + +[tool.isort] +force_single_line = "True" +line_length = 88 +sections = "FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER" +skip = "doc,venv,tmp,thirdparty,build,dist" + + +[project.scripts] +scancode = "scancode.cli:scancode" +scancode-reindex-licenses = "licensedcode.reindex:reindex_licenses" +scancode-license-data = "licensedcode.license_db:dump_scancode_license_data" +regen-package-docs = "packagedcode.regen_package_docs:regen_package_docs" + + +# These are configurations for ScanCode plugins as entry points. +# Each plugin entry hast this form: +# plugin-name = f"ully.qualified.module:PluginClass" +# where plugin-name must be a unique arbitrary name for this entrypoint. + +# scancode_pre_scan is the entry point for pre_scan plugins executed before the +# scans. See also plugincode.pre_scan module for details and doc. +[project.entry-points.scancode_pre_scan] +ignore = "scancode.plugin_ignore:ProcessIgnore" +facet = "summarycode.facet:AddFacet" + + +# scancode_scan is the entry point for scan plugins that run a scan after the +# pre_scan plugins and before the post_scan plugins. See also plugincode.scan +# module for details and doc. +[project.entry-points.scancode_scan] +info = "scancode.plugin_info:InfoScanner" +licenses = "licensedcode.plugin_license:LicenseScanner" +copyrights = "cluecode.plugin_copyright:CopyrightScanner" +packages = "packagedcode.plugin_package:PackageScanner" +emails = "cluecode.plugin_email:EmailScanner" +urls = "cluecode.plugin_url:UrlScanner" +generated = "summarycode.generated:GeneratedCodeDetector" + + +# scancode_post_scan is the entry point for post_scan plugins executed after the +# scan plugins and before the output plugins. See also plugincode.post_scan +# module for details and doc. +[project.entry-points.scancode_post_scan] +summary = "summarycode.summarizer:ScanSummary" +tallies = "summarycode.tallies:Tallies" +tallies-with-details = "summarycode.tallies:TalliesWithDetails" +tallies-key-files = "summarycode.tallies:KeyFilesTallies" +tallies-by-facet = "summarycode.tallies:FacetTallies" +license-clarity-score = "summarycode.score:LicenseClarityScore" +license-policy = "licensedcode.plugin_license_policy:LicensePolicy" +mark-source = "scancode.plugin_mark_source:MarkSource" +filter-clues = "cluecode.plugin_filter_clues:RedundantCluesFilter" +consolidate = "summarycode.plugin_consolidate:Consolidator" +license-references = "licensedcode.licenses_reference:LicenseReference" +todo = "summarycode.todo:AmbiguousDetectionsToDoPlugin" +classify = "summarycode.classify_plugin:FileClassifier" + + +# scancode_output_filter is the entry point for filter plugins executed after +# the post-scan plugins and used by the output plugins to exclude/filter certain +# files or directories from the codebase. See also plugincode.post_scan module +# for details and doc. +[project.entry-points.scancode_output_filter] +only-findings = "scancode.plugin_only_findings:OnlyFindings" +ignore-copyrights = "cluecode.plugin_ignore_copyrights:IgnoreCopyrights" + + +# scancode_output is the entry point for output plugins that write a scan output +# in a given format at the end of a scan. See also plugincode._output module for +# details and doc. +[project.entry-points.scancode_output] +html = "formattedcode.output_html:HtmlOutput" +html-app = "formattedcode.output_html:HtmlAppOutput" +json = "formattedcode.output_json:JsonCompactOutput" +json-pp = "formattedcode.output_json:JsonPrettyOutput" +spdx-tv = "formattedcode.output_spdx:SpdxTvOutput" +spdx-rdf = "formattedcode.output_spdx:SpdxRdfOutput" +csv = "formattedcode.output_csv:CsvOutput" +jsonlines = "formattedcode.output_jsonlines:JsonLinesOutput" +template = "formattedcode.output_html:CustomTemplateOutput" +debian = "formattedcode.output_debian:DebianCopyrightOutput" +yaml = "formattedcode.output_yaml:YamlOutput" +cyclonedx = "formattedcode.output_cyclonedx:CycloneDxJsonOutput" +cyclonedx-xml = "formattedcode.output_cyclonedx:CycloneDxXmlOutput" + + +[tool.pytest.ini_options] +norecursedirs = [ + ".git", + "bin", + "dist", + "build", + "_build", + "dist", + "etc", + "local", + "ci", + "docs", + "man", + "share", + "samples", + ".cache", + ".settings", + "Include", + "include", + "Lib", + "lib", + "lib64", + "Lib64", + "Scripts", + "thirdparty", + "tmp", + "venv", + "tests/data", + ".eggs", + "src/*/data", + "tests/*/data", + "src/licensedcode/_vendor" +] + +python_files = "*.py" + +python_classes = "Test" +python_functions = "test" + +addopts = [ + "-rfExXw", + "--strict-markers", + "--doctest-modules" +] diff --git a/pyproject-scancode-toolkit.toml b/pyproject-scancode-toolkit.toml new file mode 100644 index 00000000000..bcb22fecaac --- /dev/null +++ b/pyproject-scancode-toolkit.toml @@ -0,0 +1,365 @@ +[build-system] +requires = [ "flot>=0.7.0" ] +build-backend = "flot.buildapi" + +[project] +name = "scancode-toolkit" +version = "32.5.0" +description = "ScanCode is a tool to scan code for license, copyright, package and their documented dependencies and other interesting facts." +readme = "README.rst" +license = { text = "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" } +requires-python = ">=3.10" +authors = [ + { name = "nexB. Inc. and others", email = "info@aboutcode.org" }, +] +keywords = [ + "open source", + "scan", + "license", + "package", + "dependency", + "copyright", + "filetype", + "author", + "extract", + "licensing", + "scan", + "sca", + "SBOM", + "spdx", + "cyclonedx", + "package-url", + "purl", +] + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development", + "Topic :: Utilities", +] + +dependencies = [ + "licensedcode-index", + "attrs >= 18.1,!=20.1.0;python_version<'3.11'", + "attrs >= 22.1.0;python_version>='3.11'", + "Beautifulsoup4[chardet] >= 4.13.0", + "boolean.py >= 4.0", + "chardet >= 3.0.0", + "click >= 6.7, !=7.0, !=8.1.8;python_version<'3.10'", + "click >= 8.2.0;python_version>='3.10'", + "colorama >= 0.3.9", + "commoncode >= 32.4.2", + "cyseq >= 0.1.2", + "container-inspector >= 31.0.0", + "debian-inspector >= 31.1.0", + "dparse2 >= 0.7.0", + "fasteners", + "fingerprints >= 0.6.0, <=1.2.3", + "ftfy >= 6.0.0", + "gemfileparser2 >= 0.9.0", + "html5lib", + "importlib_metadata", + "intbitset >= 4.1.0", + "jaraco.functools", + "javaproperties >= 0.5", + "jinja2 >= 2.7.0", + "jsonstreams >= 0.5.0", + "license_expression >= 30.4.4", + "lxml >= 5.4.0", + "MarkupSafe >= 2.1.2", + "multiregex >= 2.0.3", + "normality <= 2.6.1", + "packageurl_python >= 0.9.0", + "packvers >= 21.0.0", + # use temp advanced patched release + "parameter-expansion-patched >= 0.3.1", + "pdfminer.six >= 20251227", + "pefile >= 2020.1.1", + "pip-requirements-parser >= 32.0.1", + "pkginfo2 >= 30.0.0", + "pluggy >= 1.0.0", + "plugincode >= 32.0.0", + "publicsuffix2", + "pyahocorasick >= 2.3.0", + "pygmars >= 1.0.0", + "pygments >= 1.0.0", + "pymaven_patch >= 0.2.8", + "requests >= 2.7.0", + "saneyaml >= 0.6.0", + "spdx_tools == 0.8.2", + "text_unidecode >= 1.0", + "tomli >= 2", + "urlpy", + "xmltodict >= 0.11.0", + "zipp >= 3.0.0; python_version < \"3.9\"", + "typecode >= 30.0.1", + "typecode[full] >= 30.1.0", + "extractcode[full] >= 31.0.0", +] + +[project.urls] +Homepage = "https://github.com/nexB/scancode-toolkit" + + +[project.optional-dependencies] +licenses = [ + "licensecode-data", +] + +# no impact but added for symmetry with the other pyproject.toml +full = [ + "extractcode[full] >= 31.0.0", + "typecode[full] >= 30.1.0", +] + +# linux-only package handling +packages = [ + "rpm_inspector_rpm >= 4.16.1.3; platform_system == 'Linux'", + "regipy >= 3.1.0; platform_system == 'Linux'", + "packagedcode_msitools >= 0.101.210706; platform_system == 'Linux'", + "go-inspector >= 0.5.0; platform_system == 'Linux'", + "rust-inspector >= 0.2.1; platform_system == 'Linux'", +] + +dev = [ + "flot", + "pytest >= 6, != 7.0.0", + "pytest-xdist >= 2", + "aboutcode-toolkit >= 7.0.2", + "pycodestyle >= 2.8.0", + "twine", + "black", + "isort", + "vendorize >= 0.3.0", + "pytest-rerunfailures", + "ruff", + "bump-my-version", + "Sphinx >= 5.0.2", + "sphinx_rtd_theme >= 0.5.1", + "sphinx-reredirects >= 0.1.2", + "doc8 >= 0.8.1", + "sphinx-autobuild", + "sphinx-rtd-dark-mode>=1.3.0", + "sphinx-copybutton", +] + + +[tool.bumpversion] +current_version = "32.5.0" +allow_dirty = true + +files = [ + { filename = "src/scancode_config.py" }, + { filename = "pyproject.toml" }, + { filename = "pyproject-scancode-toolkit-mini.toml" }, + { filename = "pyproject-packagedcode.toml" }, + +] + + +[tool.flot] +wheel_path_prefixes_to_strip = [ "src" ] + +includes = [ + "src/**/*", +] + +excludes = [ + # these are now provided by separate, smaller packages + "src/licensedcode/data/**/*", + + # scancode_toolkit.egg-info is only for editable local config + "src/scancode_toolkit.egg-info/**/*", + + "docs/build/**/*", + + # Python compiled files + "**/*.py[cod]", + "**/*.egg-info", + # Various junk and temp files + "**/.DS_Store", + "**/*~", + "**/.*.sw[po]", + "**/.ve", + "**/*.bak", + "**/.ipynb_checkpoints", +] + +metadata_files = [ + "*.LICENSE", + "NOTICE", + "AUTHORS.rst", + "CHANGELOG.rst", + "CODE_OF_CONDUCT.rst", +] + +editable_paths = [ "src", "tests" ] + +sdist_extra_includes = [ + "etc/**/*", + # "docs/**/*", + ".github/**/*", + # "samples/**/*", + #"tests/**/*", + ".gitattributes", + ".gitignore", + "*.LICENSE", + "NOTICE", + "*.ABOUT", + "*.toml", + "*.yml", + "*.rst", + "*.py", + + "requirements*", + + "configure*", + "extractcode*", + "scancode*", + + ".dockerignore", + "Dockerfile*", + # path to executable used by a built app + "PYTHON_EXECUTABLE*", + ".VERSION", +] + + +[tool.isort] +force_single_line = "True" +line_length = 88 +sections = "FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER" +skip = "doc,venv,tmp,thirdparty,build,dist" + + +[project.scripts] +scancode = "scancode.cli:scancode" +scancode-reindex-licenses = "licensedcode.reindex:reindex_licenses" +scancode-license-data = "licensedcode.license_db:dump_scancode_license_data" +regen-package-docs = "packagedcode.regen_package_docs:regen_package_docs" + + +# These are configurations for ScanCode plugins as entry points. +# Each plugin entry hast this form: +# plugin-name = f"ully.qualified.module:PluginClass" +# where plugin-name must be a unique arbitrary name for this entrypoint. + +# scancode_pre_scan is the entry point for pre_scan plugins executed before the +# scans. See also plugincode.pre_scan module for details and doc. +[project.entry-points.scancode_pre_scan] +ignore = "scancode.plugin_ignore:ProcessIgnore" +facet = "summarycode.facet:AddFacet" + + +# scancode_scan is the entry point for scan plugins that run a scan after the +# pre_scan plugins and before the post_scan plugins. See also plugincode.scan +# module for details and doc. +[project.entry-points.scancode_scan] +info = "scancode.plugin_info:InfoScanner" +licenses = "licensedcode.plugin_license:LicenseScanner" +copyrights = "cluecode.plugin_copyright:CopyrightScanner" +packages = "packagedcode.plugin_package:PackageScanner" +emails = "cluecode.plugin_email:EmailScanner" +urls = "cluecode.plugin_url:UrlScanner" +generated = "summarycode.generated:GeneratedCodeDetector" + + +# scancode_post_scan is the entry point for post_scan plugins executed after the +# scan plugins and before the output plugins. See also plugincode.post_scan +# module for details and doc. +[project.entry-points.scancode_post_scan] +summary = "summarycode.summarizer:ScanSummary" +tallies = "summarycode.tallies:Tallies" +tallies-with-details = "summarycode.tallies:TalliesWithDetails" +tallies-key-files = "summarycode.tallies:KeyFilesTallies" +tallies-by-facet = "summarycode.tallies:FacetTallies" +license-clarity-score = "summarycode.score:LicenseClarityScore" +license-policy = "licensedcode.plugin_license_policy:LicensePolicy" +mark-source = "scancode.plugin_mark_source:MarkSource" +filter-clues = "cluecode.plugin_filter_clues:RedundantCluesFilter" +consolidate = "summarycode.plugin_consolidate:Consolidator" +license-references = "licensedcode.licenses_reference:LicenseReference" +todo = "summarycode.todo:AmbiguousDetectionsToDoPlugin" +classify = "summarycode.classify_plugin:FileClassifier" + + +# scancode_output_filter is the entry point for filter plugins executed after +# the post-scan plugins and used by the output plugins to exclude/filter certain +# files or directories from the codebase. See also plugincode.post_scan module +# for details and doc. +[project.entry-points.scancode_output_filter] +only-findings = "scancode.plugin_only_findings:OnlyFindings" +ignore-copyrights = "cluecode.plugin_ignore_copyrights:IgnoreCopyrights" + + +# scancode_output is the entry point for output plugins that write a scan output +# in a given format at the end of a scan. See also plugincode._output module for +# details and doc. +[project.entry-points.scancode_output] +html = "formattedcode.output_html:HtmlOutput" +html-app = "formattedcode.output_html:HtmlAppOutput" +json = "formattedcode.output_json:JsonCompactOutput" +json-pp = "formattedcode.output_json:JsonPrettyOutput" +spdx-tv = "formattedcode.output_spdx:SpdxTvOutput" +spdx-rdf = "formattedcode.output_spdx:SpdxRdfOutput" +csv = "formattedcode.output_csv:CsvOutput" +jsonlines = "formattedcode.output_jsonlines:JsonLinesOutput" +template = "formattedcode.output_html:CustomTemplateOutput" +debian = "formattedcode.output_debian:DebianCopyrightOutput" +yaml = "formattedcode.output_yaml:YamlOutput" +cyclonedx = "formattedcode.output_cyclonedx:CycloneDxJsonOutput" +cyclonedx-xml = "formattedcode.output_cyclonedx:CycloneDxXmlOutput" + + +[tool.pytest.ini_options] +norecursedirs = [ + ".git", + "bin", + "dist", + "build", + "_build", + "dist", + "etc", + "local", + "ci", + "docs", + "man", + "share", + "samples", + ".cache", + ".settings", + "Include", + "include", + "Lib", + "lib", + "lib64", + "Lib64", + "Scripts", + "thirdparty", + "tmp", + "venv", + "tests/data", + ".eggs", + "src/*/data", + "tests/*/data", + "src/licensedcode/_vendor" +] + +python_files = "*.py" + +python_classes = "Test" +python_functions = "test" + +addopts = [ + "-rfExXw", + "--strict-markers", + "--doctest-modules" +] diff --git a/pyproject.toml b/pyproject.toml index e2656e8f647..0d7d32ef0d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,322 @@ +# note: this is the default pyproject.toml that is used only in development +# we use flot the other pyproject*.toml files to build release wheels and archives + [build-system] -requires = ["setuptools", "wheel"] -build-backend = "setuptools.build_meta" +requires = [ "flot>=0.7.0" ] +build-backend = "flot.buildapi" + +[project] +name = "scancode-toolkit-devel" +version = "32.1.0" +description = "ScanCode is a tool to scan code for license, copyright, package and their documented dependencies and other interesting facts." +readme = "README.rst" +license = { text = "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" } +requires-python = ">=3.8" +authors = [ + { name = "nexB. Inc. and others", email = "info@aboutcode.org" }, +] +keywords = [ + "open source", + "scan", + "license", + "package", + "dependency", + "copyright", + "filetype", + "author", + "extract", + "licensing", + "sca", + "SBOM", + "spdx", + "cyclonedx", + "package-url", + "purl", +] + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development", + "Topic :: Utilities", +] + +dependencies = [ + "attrs >= 18.1,!=20.1.0;python_version<'3.11'", + "attrs >= 22.1.0;python_version>='3.11'", + "Beautifulsoup4 >= 4.0.0", + "boolean.py >= 4.0", + "chardet >= 3.0.0", + "click >= 6.7, !=7.0", + "colorama >= 0.3.9", + "commoncode >= 31.0.3", + "container-inspector >= 31.0.0", + "debian-inspector >= 31.1.0", + "dparse2 >= 0.7.0", + "fasteners", + "fingerprints >= 0.6.0", + "ftfy >= 6.0.0", + "gemfileparser2 >= 0.9.0", + "html5lib", + "importlib_metadata", + "intbitset >= 3.0.2", + "jaraco.functools", + "javaproperties >= 0.5", + "jinja2 >= 2.7.0", + "jsonstreams >= 0.5.0", + "license_expression >= 30.1.1", + "lxml >= 4.9.2", + "MarkupSafe >= 2.1.2", + "packageurl_python >= 0.9.0", + "packvers >= 21.0.0", + # use temp advanced patched release + "parameter-expansion-patched >= 0.3.1", + "pdfminer.six >= 20200101", + "pefile >= 2020.1.1", + "pip-requirements-parser >= 32.0.1", + "pkginfo2 >= 30.0.0", + "pluggy >= 1.0.0", + "plugincode >= 32.0.0", + "publicsuffix2", + "pyahocorasick >= 2.0.0", + "pygmars >= 0.7.0", + "pygments", + "pymaven_patch >= 0.2.8", + "requests >= 2.7.0", + "saneyaml >= 0.6.0", + "spdx_tools == 0.8.2", + "text_unidecode >= 1.0", + "toml >= 0.10.0", + "urlpy", + "xmltodict >= 0.11.0", + "zipp >= 3.0.0; python_version < \"3.9\"", + "typecode >= 30.0.1", + "typecode[full] >= 30.0.1", + "extractcode[full] >= 31.0.0", +] + +[project.urls] +Homepage = "https://github.com/nexB/scancode-toolkit" + + +[project.optional-dependencies] +# no impact but added for symmetry with the other pyproject.toml +licenses = [ + "licensecode-data", + "licensedcode-index", +] + +# no impact but added for symmetry with the other pyproject.toml +full = [ + "extractcode[full] >= 31.0.0", + "typecode[full] >= 30.0.0", +] + +# linux-only package handling +packages = [ + "rpm_inspector_rpm >= 4.16.1.3; platform_system == 'Linux'", + "regipy >= 3.1.0; platform_system == 'Linux'", + "packagedcode_msitools >= 0.101.210706; platform_system == 'Linux'", +] + +testing = [ + "flot", + "pytest >= 6, != 7.0.0", + "pytest-xdist >= 2", + "aboutcode-toolkit >= 7.0.2", + "pycodestyle >= 2.8.0", + "twine", + "black", + "isort", + "vendorize >= 0.3.0", + "pytest-rerunfailures", + "bump-my-version", +] + +docs = [ + "Sphinx == 5.1.0", + "sphinx_rtd_theme >= 0.5.1", + "doc8 >= 0.8.1", + "sphinx-reredirects >= 0.1.2", + "sphinx-autobuild", + "sphinx-rtd-dark-mode>=1.3.0", + "sphinx-copybutton", +] + + +[tool.bumpversion] +current_version = "32.1.0" +allow_dirty = true + +files = [ + { filename = "src/scancode_config.py" }, + { filename = "pyproject.toml" }, + { filename = "pyproject-scancode-toolkit-mini.toml" }, + { filename = "pyproject-packagedcode.toml" }, + +] + + +[tool.flot] +wheel_path_prefixes_to_strip = [ "src" ] + +includes = [ + "src/**/*", +] + +excludes = [ + # these are now provided by separate, smaller packages + "src/licensedcode/data/**/*", + + # scancode_toolkit.egg-info is only for editable local config + "src/scancode_toolkit.egg-info/**/*", + + "docs/build/**/*", + + # Python compiled files + "**/*.py[cod]", + "**/*.egg-info", + # Various junk and temp files + "**/.DS_Store", + "**/*~", + "**/.*.sw[po]", + "**/.ve", + "**/*.bak", + "**/.ipynb_checkpoints", +] + +metadata_files = [ + "*.LICENSE", + "NOTICE", + "AUTHORS.rst", + "CHANGELOG.rst", + "CODE_OF_CONDUCT.rst", +] + +editable_paths = [ "src", "tests" ] + +sdist_extra_includes = [ + "etc/**/*", + # "docs/**/*", + ".github/**/*", + # "samples/**/*", + #"tests/**/*", + ".gitattributes", + ".gitignore", + "*.LICENSE", + "NOTICE", + "*.ABOUT", + "*.toml", + "*.yml", + "*.rst", + "*.py", + + "requirements*", + + "configure*", + "extractcode*", + "scancode*", + + ".dockerignore", + "Dockerfile*", + # path to executable used by a built app + "PYTHON_EXECUTABLE*", + ".VERSION", +] + + +[tool.isort] +force_single_line = "True" +line_length = 88 +sections = "FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER" +skip = "doc,venv,tmp,thirdparty,build,dist" + + +[project.scripts] +scancode = "scancode.cli:scancode" +scancode-reindex-licenses = "licensedcode.reindex:reindex_licenses" +scancode-license-data = "licensedcode.license_db:dump_scancode_license_data" +regen-package-docs = "packagedcode.regen_package_docs:regen_package_docs" + + +# These are configurations for ScanCode plugins as entry points. +# Each plugin entry hast this form: +# plugin-name = f"ully.qualified.module:PluginClass" +# where plugin-name must be a unique arbitrary name for this entrypoint. + +# scancode_pre_scan is the entry point for pre_scan plugins executed before the +# scans. See also plugincode.pre_scan module for details and doc. +[project.entry-points.scancode_pre_scan] +ignore = "scancode.plugin_ignore:ProcessIgnore" +facet = "summarycode.facet:AddFacet" + + +# scancode_scan is the entry point for scan plugins that run a scan after the +# pre_scan plugins and before the post_scan plugins. See also plugincode.scan +# module for details and doc. +[project.entry-points.scancode_scan] +info = "scancode.plugin_info:InfoScanner" +licenses = "licensedcode.plugin_license:LicenseScanner" +copyrights = "cluecode.plugin_copyright:CopyrightScanner" +packages = "packagedcode.plugin_package:PackageScanner" +emails = "cluecode.plugin_email:EmailScanner" +urls = "cluecode.plugin_url:UrlScanner" +generated = "summarycode.generated:GeneratedCodeDetector" + + +# scancode_post_scan is the entry point for post_scan plugins executed after the +# scan plugins and before the output plugins. See also plugincode.post_scan +# module for details and doc. +[project.entry-points.scancode_post_scan] +summary = "summarycode.summarizer:ScanSummary" +tallies = "summarycode.tallies:Tallies" +tallies-with-details = "summarycode.tallies:TalliesWithDetails" +tallies-key-files = "summarycode.tallies:KeyFilesTallies" +tallies-by-facet = "summarycode.tallies:FacetTallies" +license-clarity-score = "summarycode.score:LicenseClarityScore" +license-policy = "licensedcode.plugin_license_policy:LicensePolicy" +mark-source = "scancode.plugin_mark_source:MarkSource" +filter-clues = "cluecode.plugin_filter_clues:RedundantCluesFilter" +consolidate = "summarycode.plugin_consolidate:Consolidator" +license-references = "licensedcode.licenses_reference:LicenseReference" +todo = "summarycode.todo:AmbiguousDetectionsToDoPlugin" +classify = "summarycode.classify_plugin:FileClassifier" + + +# scancode_output_filter is the entry point for filter plugins executed after +# the post-scan plugins and used by the output plugins to exclude/filter certain +# files or directories from the codebase. See also plugincode.post_scan module +# for details and doc. +[project.entry-points.scancode_output_filter] +only-findings = "scancode.plugin_only_findings:OnlyFindings" +ignore-copyrights = "cluecode.plugin_ignore_copyrights:IgnoreCopyrights" + + +# scancode_output is the entry point for output plugins that write a scan output +# in a given format at the end of a scan. See also plugincode._output module for +# details and doc. +[project.entry-points.scancode_output] +html = "formattedcode.output_html:HtmlOutput" +html-app = "formattedcode.output_html:HtmlAppOutput" +json = "formattedcode.output_json:JsonCompactOutput" +json-pp = "formattedcode.output_json:JsonPrettyOutput" +spdx-tv = "formattedcode.output_spdx:SpdxTvOutput" +spdx-rdf = "formattedcode.output_spdx:SpdxRdfOutput" +csv = "formattedcode.output_csv:CsvOutput" +jsonlines = "formattedcode.output_jsonlines:JsonLinesOutput" +template = "formattedcode.output_html:CustomTemplateOutput" +debian = "formattedcode.output_debian:DebianCopyrightOutput" +yaml = "formattedcode.output_yaml:YamlOutput" +cyclonedx = "formattedcode.output_cyclonedx:CycloneDxJsonOutput" +cyclonedx-xml = "formattedcode.output_cyclonedx:CycloneDxXmlOutput" -[tool.setuptools_scm] -# this is used populated when creating a git archive -# and when there is .git dir and/or there is no git installed -fallback_version = "9999.$Format:%h-%cs$" [tool.pytest.ini_options] norecursedirs = [ @@ -14,6 +325,7 @@ norecursedirs = [ "dist", "build", "_build", + "dist", "etc", "local", "ci", diff --git a/requirements-dev.txt b/requirements-dev.txt index 5b2d8a40254..91e5336d812 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,6 +9,7 @@ docutils==0.19 doc8==2.0.0 et-xmlfile==1.1.0 execnet==1.9.0 +flot==0.7.2 iniconfig==1.1.1 isort==5.10.1 jeepney==0.8.0 diff --git a/setup-mini.cfg b/setup-mini.cfg deleted file mode 100644 index 9bfcc14439a..00000000000 --- a/setup-mini.cfg +++ /dev/null @@ -1,237 +0,0 @@ -[metadata] -name = scancode-toolkit-mini -version = 32.5.0 -license = Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft - -# description must be on ONE line https://github.com/pypa/setuptools/issues/1390 -description = ScanCode is a tool to scan code for license, copyright, package and their documented dependencies and other interesting facts. scancode-toolkit-mini is a special build that does not come with pre-built binary dependencies by default. These are instead installed separately or with the extra_requires scancode-toolkit-mini[full] -long_description = file:README.rst -long_description_content_type = text/x-rst -url = https://github.com/aboutcode-org/scancode-toolkit - -author = nexB. Inc. and others -author_email = info@aboutcode.org - -classifiers = - Development Status :: 5 - Production/Stable - Intended Audience :: Developers - Programming Language :: Python :: 3 - Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - Programming Language :: Python :: 3.12 - Programming Language :: Python :: 3.13 - Programming Language :: Python :: 3.14 - Topic :: Software Development - Topic :: Utilities - -keywords = - open source - scan - license - package - dependency - copyright - filetype - author - extract - licensing - scan - sca - SBOM - spdx - cyclonedx - -license_files = - apache-2.0.LICENSE - NOTICE - AUTHORS.rst - CHANGELOG.rst - CODE_OF_CONDUCT.rst - cc-by-4.0.LICENSE - README.rst - -[options] -python_requires = >=3.10 -package_dir = - =src -packages = find: -include_package_data = true -zip_safe = false - -py_modules = - scancode_config - - -install_requires = - attrs >= 18.1,!=20.1.0;python_version<'3.11' - attrs >= 22.1.0;python_version>='3.11' - Beautifulsoup4[chardet] >= 4.13.0 - boolean.py >= 4.0 - chardet >= 3.0.0 - click >= 6.7, !=7.0, !=8.1.8;python_version<'3.10' - click >= 8.2.0;python_version>='3.10' - colorama >= 0.3.9 - commoncode >= 32.4.2 - container-inspector >= 31.0.0 - debian-inspector >= 31.1.0 - dparse2 >= 0.7.0 - fasteners - fingerprints >= 0.6.0, <=1.2.3 - ftfy >= 6.0.0 - gemfileparser2 >= 0.9.0 - html5lib - importlib_metadata - intbitset >= 4.1.0 - jaraco.functools - javaproperties >= 0.5 - jinja2 >= 2.7.0 - jsonstreams >= 0.5.0 - license_expression >= 30.4.4 - lxml >= 5.4.0 - MarkupSafe >= 2.1.2 - multiregex >= 2.0.3 - normality <= 2.6.1 - packageurl_python >= 0.9.0 - packvers >= 21.0.0 - # use temp advanced patched release - parameter-expansion-patched >= 0.3.1 - pdfminer.six >= 20251227 - pefile >= 2020.1.1 - pkginfo2 >= 30.0.0 - pip-requirements-parser >= 32.0.1 - pluggy >= 1.0.0 - plugincode >= 32.0.0 - publicsuffix2 - pyahocorasick >= 2.3.0 - pygmars >= 1.0.0 - pygments - pymaven_patch >= 0.2.8 - requests >= 2.7.0 - saneyaml >= 0.6.0 - spdx_tools == 0.8.2 - text_unidecode >= 1.0 - tomli >= 2; python_version < "3.11" - urlpy - xmltodict >= 0.11.0 - typecode >= 30.1.0 -# typecode[full] >= 30.0.1 -# extractcode[full] >= 31.0.0 - - -[options.packages.find] -where = src - - -[options.extras_require] -full = - typecode[full] >= 30.1.0 - extractcode[full] >= 31.0.0 - -dev = - pytest >= 6, != 7.0.0 - pytest-xdist >= 2 - aboutcode-toolkit >= 7.0.2 - twine - black - isort - vendorize >= 0.3.0 - pytest-rerunfailures - ruff - Sphinx>=5.0.2 - sphinx-rtd-theme>=1.0.0 - sphinx-reredirects >= 0.1.2 - doc8 >= 0.8.1 - sphinx-autobuild - sphinx-rtd-dark-mode>=1.3.0 - sphinx-copybutton - -# linux-only package handling -packages = - rpm_inspector_rpm >= 4.16.1.3; platform_system == 'Linux' - regipy >= 3.1.0; platform_system == 'Linux' - packagedcode_msitools >= 0.101.210706; platform_system == 'Linux' - go-inspector >= 0.5.0; platform_system == 'Linux' - rust-inspector >= 0.2.1; platform_system == 'Linux' - -[options.entry_points] -console_scripts = - scancode = scancode.cli:scancode - scancode-reindex-licenses = licensedcode.reindex:reindex_licenses - scancode-reindex-package-patterns = packagedcode.cache:cache_package_patterns - scancode-license-data = licensedcode.license_db:dump_scancode_license_data - regen-package-docs = packagedcode.regen_package_docs:regen_package_docs - add-required-phrases = licensedcode.required_phrases:add_required_phrases - gen-new-required-phrases-rules = licensedcode.required_phrases:gen_required_phrases_rules - scancode-train-gibberish-model = textcode.train_gibberish_model:train_gibberish_model - -# These are configurations for ScanCode plugins as setuptools entry points. -# Each plugin entry hast this form: -# plugin-name = fully.qualified.module:PluginClass -# where plugin-name must be a unique arbitrary name for this entrypoint. - -# scancode_pre_scan is the entry point for pre_scan plugins executed before the -# scans. See also plugincode.pre_scan module for details and doc. -scancode_pre_scan = - ignore = scancode.plugin_ignore:ProcessIgnore - facet = summarycode.facet:AddFacet - - -# scancode_scan is the entry point for scan plugins that run a scan after the -# pre_scan plugins and before the post_scan plugins. See also plugincode.scan -# module for details and doc. -scancode_scan = - info = scancode.plugin_info:InfoScanner - licenses = licensedcode.plugin_license:LicenseScanner - copyrights = cluecode.plugin_copyright:CopyrightScanner - packages = packagedcode.plugin_package:PackageScanner - emails = cluecode.plugin_email:EmailScanner - urls = cluecode.plugin_url:UrlScanner - generated = summarycode.generated:GeneratedCodeDetector - - -# scancode_post_scan is the entry point for post_scan plugins executed after the -# scan plugins and before the output plugins. See also plugincode.post_scan -# module for details and doc. -scancode_post_scan = - summary = summarycode.summarizer:ScanSummary - tallies = summarycode.tallies:Tallies - tallies-with-details = summarycode.tallies:TalliesWithDetails - tallies-key-files = summarycode.tallies:KeyFilesTallies - tallies-by-facet = summarycode.tallies:FacetTallies - license-clarity-score = summarycode.score:LicenseClarityScore - license-policy = licensedcode.plugin_license_policy:LicensePolicy - mark-source = scancode.plugin_mark_source:MarkSource - filter-clues = cluecode.plugin_filter_clues:RedundantCluesFilter - consolidate = summarycode.plugin_consolidate:Consolidator - license-references = licensedcode.licenses_reference:LicenseReference - todo = summarycode.todo:AmbiguousDetectionsToDoPlugin - classify = summarycode.classify_plugin:FileClassifier - - -# scancode_output_filter is the entry point for filter plugins executed after -# the post-scan plugins and used by the output plugins to exclude/filter certain -# files or directories from the codebase. See also plugincode.post_scan module -# for details and doc. -scancode_output_filter = - only-findings = scancode.plugin_only_findings:OnlyFindings - ignore-copyrights = cluecode.plugin_ignore_copyrights:IgnoreCopyrights - - -# scancode_output is the entry point for output plugins that write a scan output -# in a given format at the end of a scan. See also plugincode._output module for -# details and doc. -scancode_output = - html = formattedcode.output_html:HtmlOutput - html-app = formattedcode.output_html:HtmlAppOutput - json = formattedcode.output_json:JsonCompactOutput - json-pp = formattedcode.output_json:JsonPrettyOutput - spdx-tv = formattedcode.output_spdx:SpdxTvOutput - spdx-rdf = formattedcode.output_spdx:SpdxRdfOutput - csv = formattedcode.output_csv:CsvOutput - jsonlines = formattedcode.output_jsonlines:JsonLinesOutput - template = formattedcode.output_html:CustomTemplateOutput - debian = formattedcode.output_debian:DebianCopyrightOutput - yaml = formattedcode.output_yaml:YamlOutput - cyclonedx = formattedcode.output_cyclonedx:CycloneDxJsonOutput - cyclonedx-xml = formattedcode.output_cyclonedx:CycloneDxXmlOutput diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 7c45f388fd5..00000000000 --- a/setup.cfg +++ /dev/null @@ -1,239 +0,0 @@ -[metadata] -name = scancode-toolkit -version = 32.5.0 -license = Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft - -# description must be on ONE line https://github.com/pypa/setuptools/issues/1390 -description = ScanCode is a tool to scan code for license, copyright, package and their documented dependencies and other interesting facts. -long_description = file:README.rst -long_description_content_type = text/x-rst -url = https://github.com/aboutcode-org/scancode-toolkit - -author = nexB. Inc. and others -author_email = info@aboutcode.org - -classifiers = - Development Status :: 5 - Production/Stable - Intended Audience :: Developers - Programming Language :: Python :: 3 - Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - Programming Language :: Python :: 3.12 - Programming Language :: Python :: 3.13 - Programming Language :: Python :: 3.14 - Topic :: Software Development - Topic :: Utilities - -keywords = - open source - scan - license - package - dependency - copyright - filetype - author - extract - licensing - scan - sca - SBOM - spdx - cyclonedx - -license_files = - apache-2.0.LICENSE - NOTICE - AUTHORS.rst - CHANGELOG.rst - CODE_OF_CONDUCT.rst - cc-by-4.0.LICENSE - README.rst - -[options] -python_requires = >=3.10 - -package_dir = - =src -packages = find: -include_package_data = true -zip_safe = false - -py_modules = - scancode_config - - -install_requires = - attrs >= 18.1,!=20.1.0;python_version<'3.11' - attrs >= 22.1.0;python_version>='3.11' - Beautifulsoup4[chardet] >= 4.13.0 - boolean.py >= 4.0 - chardet >= 3.0.0 - click >= 6.7, !=7.0, !=8.1.8;python_version<'3.10' - click >= 8.2.0;python_version>='3.10' - colorama >= 0.3.9 - commoncode >= 32.4.2 - container-inspector >= 31.0.0 - cyseq >= 0.1.2 - debian-inspector >= 31.1.0 - dparse2 >= 0.7.0 - fasteners - fingerprints >= 0.6.0, <=1.2.3 - ftfy >= 6.0.0 - gemfileparser2 >= 0.9.0 - html5lib - importlib_metadata - intbitset >= 4.1.0 - jaraco.functools - javaproperties >= 0.5 - jinja2 >= 2.7.0 - jsonstreams >= 0.5.0 - license_expression >= 30.4.4 - lxml >= 5.4.0 - MarkupSafe >= 2.1.2 - multiregex >= 2.0.3 - normality <= 2.6.1 - packageurl_python >= 0.9.0 - packvers >= 21.0.0 - # use temp advanced patched release - parameter-expansion-patched >= 0.3.1 - pdfminer.six >= 20251227 - pefile >= 2020.1.1 - pkginfo2 >= 30.0.0 - pip-requirements-parser >= 32.0.1 - pluggy >= 1.0.0 - plugincode >= 32.0.0 - publicsuffix2 - pyahocorasick >= 2.3.0 - pygmars >= 1.0.0 - pygments - pymaven_patch >= 0.2.8 - requests >= 2.7.0 - saneyaml >= 0.6.0 - spdx_tools == 0.8.2 - text_unidecode >= 1.0 - tomli >= 2; python_version < "3.11" - urlpy - xmltodict >= 0.11.0 - typecode >= 30.1.0 - typecode[full] >= 30.1.0 - extractcode[full] >= 31.0.0 - - -[options.packages.find] -where = src - - -[options.extras_require] -full = - typecode[full] >= 30.1.0 - extractcode[full] >= 31.0.0 - -dev = - pytest >= 6, != 7.0.0 - pytest-xdist >= 2 - aboutcode-toolkit >= 7.0.2 - twine - black - isort - vendorize >= 0.3.0 - pytest-rerunfailures - ruff - Sphinx>=5.0.2 - sphinx-rtd-theme>=1.0.0 - sphinx-reredirects >= 0.1.2 - doc8 >= 0.8.1 - sphinx-autobuild - sphinx-rtd-dark-mode>=1.3.0 - sphinx-copybutton - -# linux-only package handling -packages = - rpm_inspector_rpm >= 4.16.1.3; platform_system == 'Linux' - regipy >= 3.1.0; platform_system == 'Linux' - packagedcode_msitools >= 0.101.210706; platform_system == 'Linux' - go-inspector >= 0.5.0; platform_system == 'Linux' - rust-inspector >= 0.2.1; platform_system == 'Linux' - -[options.entry_points] -console_scripts = - scancode = scancode.cli:scancode - scancode-reindex-licenses = licensedcode.reindex:reindex_licenses - scancode-reindex-package-patterns = packagedcode.cache:cache_package_patterns - scancode-license-data = licensedcode.license_db:dump_scancode_license_data - regen-package-docs = packagedcode.regen_package_docs:regen_package_docs - add-required-phrases = licensedcode.required_phrases:add_required_phrases - gen-new-required-phrases-rules = licensedcode.required_phrases:gen_required_phrases_rules - scancode-train-gibberish-model = textcode.train_gibberish_model:train_gibberish_model - -# These are configurations for ScanCode plugins as setuptools entry points. -# Each plugin entry hast this form: -# plugin-name = fully.qualified.module:PluginClass -# where plugin-name must be a unique arbitrary name for this entrypoint. - -# scancode_pre_scan is the entry point for pre_scan plugins executed before the -# scans. See also plugincode.pre_scan module for details and doc. -scancode_pre_scan = - ignore = scancode.plugin_ignore:ProcessIgnore - facet = summarycode.facet:AddFacet - - -# scancode_scan is the entry point for scan plugins that run a scan after the -# pre_scan plugins and before the post_scan plugins. See also plugincode.scan -# module for details and doc. -scancode_scan = - info = scancode.plugin_info:InfoScanner - licenses = licensedcode.plugin_license:LicenseScanner - copyrights = cluecode.plugin_copyright:CopyrightScanner - packages = packagedcode.plugin_package:PackageScanner - emails = cluecode.plugin_email:EmailScanner - urls = cluecode.plugin_url:UrlScanner - generated = summarycode.generated:GeneratedCodeDetector - - -# scancode_post_scan is the entry point for post_scan plugins executed after the -# scan plugins and before the output plugins. See also plugincode.post_scan -# module for details and doc. -scancode_post_scan = - summary = summarycode.summarizer:ScanSummary - tallies = summarycode.tallies:Tallies - tallies-with-details = summarycode.tallies:TalliesWithDetails - tallies-key-files = summarycode.tallies:KeyFilesTallies - tallies-by-facet = summarycode.tallies:FacetTallies - license-clarity-score = summarycode.score:LicenseClarityScore - license-policy = licensedcode.plugin_license_policy:LicensePolicy - mark-source = scancode.plugin_mark_source:MarkSource - filter-clues = cluecode.plugin_filter_clues:RedundantCluesFilter - consolidate = summarycode.plugin_consolidate:Consolidator - license-references = licensedcode.licenses_reference:LicenseReference - todo = summarycode.todo:AmbiguousDetectionsToDoPlugin - classify = summarycode.classify_plugin:FileClassifier - - -# scancode_output_filter is the entry point for filter plugins executed after -# the post-scan plugins and used by the output plugins to exclude/filter certain -# files or directories from the codebase. See also plugincode.post_scan module -# for details and doc. -scancode_output_filter = - only-findings = scancode.plugin_only_findings:OnlyFindings - ignore-copyrights = cluecode.plugin_ignore_copyrights:IgnoreCopyrights - - -# scancode_output is the entry point for output plugins that write a scan output -# in a given format at the end of a scan. See also plugincode._output module for -# details and doc. -scancode_output = - html = formattedcode.output_html:HtmlOutput - html-app = formattedcode.output_html:HtmlAppOutput - json = formattedcode.output_json:JsonCompactOutput - json-pp = formattedcode.output_json:JsonPrettyOutput - spdx-tv = formattedcode.output_spdx:SpdxTvOutput - spdx-rdf = formattedcode.output_spdx:SpdxRdfOutput - csv = formattedcode.output_csv:CsvOutput - jsonlines = formattedcode.output_jsonlines:JsonLinesOutput - template = formattedcode.output_html:CustomTemplateOutput - debian = formattedcode.output_debian:DebianCopyrightOutput - yaml = formattedcode.output_yaml:YamlOutput - cyclonedx = formattedcode.output_cyclonedx:CycloneDxJsonOutput - cyclonedx-xml = formattedcode.output_cyclonedx:CycloneDxXmlOutput diff --git a/setup.py b/setup.py deleted file mode 100644 index bac24a43d99..00000000000 --- a/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python - -import setuptools - -if __name__ == "__main__": - setuptools.setup() From 5856d9bc47523a2abe0a25ff50935c535861e5b1 Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Tue, 17 Mar 2026 17:38:46 +0530 Subject: [PATCH 2/9] Update to flot v0.7.3 Reference: https://pypi.org/project/flot/0.7.3/ Signed-off-by: Ayan Sinha Mahapatra --- ...ne-any.whl => flot-0.7.3-py3-none-any.whl} | Bin 21905 -> 21858 bytes ...BOUT => flot-0.7.3-py3-none-any.whl.ABOUT} | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename etc/thirdparty/{flot-0.7.2-py3-none-any.whl => flot-0.7.3-py3-none-any.whl} (65%) rename etc/thirdparty/{flot-0.7.2-py3-none-any.whl.ABOUT => flot-0.7.3-py3-none-any.whl.ABOUT} (87%) diff --git a/etc/thirdparty/flot-0.7.2-py3-none-any.whl b/etc/thirdparty/flot-0.7.3-py3-none-any.whl similarity index 65% rename from etc/thirdparty/flot-0.7.2-py3-none-any.whl rename to etc/thirdparty/flot-0.7.3-py3-none-any.whl index c74b7b9af51ece90bae1111f15ae12c489dc888e..a3676dbf7ea99b445e9ee6c9bdd418436dfff032 100644 GIT binary patch delta 5981 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 I5B>)I7j2v&c>n+a delta 5995 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 MuTUud8@&Pl1*e=HXaE2J diff --git a/etc/thirdparty/flot-0.7.2-py3-none-any.whl.ABOUT b/etc/thirdparty/flot-0.7.3-py3-none-any.whl.ABOUT similarity index 87% rename from etc/thirdparty/flot-0.7.2-py3-none-any.whl.ABOUT rename to etc/thirdparty/flot-0.7.3-py3-none-any.whl.ABOUT index 64c8a6063ab..4ee1475a3df 100644 --- a/etc/thirdparty/flot-0.7.2-py3-none-any.whl.ABOUT +++ b/etc/thirdparty/flot-0.7.3-py3-none-any.whl.ABOUT @@ -1,6 +1,6 @@ -about_resource: flot-0.7.2-py3-none-any.whl +about_resource: flot-0.7.3-py3-none-any.whl name: flot -version: 0.7.2 +version: 0.7.3 download_url: https://files.pythonhosted.org/packages/54/98/9fc7924de9ebff67602f6934fff7411d089468d5aee878d7fd2f9d8be1f5/flot-0.7.2-py3-none-any.whl copyright: | Copyright (c) nexB Inc. and contributors From 6c0e96d813693f11622dfbde47ae39863f27f29a Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Tue, 17 Mar 2026 17:55:55 +0530 Subject: [PATCH 3/9] Update Configure and release scripts Signed-off-by: Ayan Sinha Mahapatra --- configure | 4 ++-- ...icensedcode-create-pypi-wheel-and-sdist.sh} | 18 ++++++++---------- .../scancode-create-pypi-wheel-and-sdist.sh | 4 ---- 3 files changed, 10 insertions(+), 16 deletions(-) rename etc/release/{scancode-create-pypi-sdist.sh => licensedcode-create-pypi-wheel-and-sdist.sh} (61%) mode change 100755 => 100644 diff --git a/configure b/configure index 26c2f2e4969..5d1a56e492d 100755 --- a/configure +++ b/configure @@ -142,10 +142,10 @@ CLI_ARGS=$1 ################################ BASE=".[packages]" -BASE_DEV=".[packages,testing]" +BASE_DEV=".[packages,dev]" if [[ $OSTYPE == 'darwin'* ]]; then BASE="." - BASE_DEV=".[testing]" + BASE_DEV=".[dev]" fi # Requirement arguments passed to pip and used by default or with --dev. diff --git a/etc/release/scancode-create-pypi-sdist.sh b/etc/release/licensedcode-create-pypi-wheel-and-sdist.sh old mode 100755 new mode 100644 similarity index 61% rename from etc/release/scancode-create-pypi-sdist.sh rename to etc/release/licensedcode-create-pypi-wheel-and-sdist.sh index fe8cdd75440..2e05e8d9f5b --- a/etc/release/scancode-create-pypi-sdist.sh +++ b/etc/release/licensedcode-create-pypi-wheel-and-sdist.sh @@ -9,7 +9,8 @@ # ################################################################################ -# ScanCode release build script for PyPI sdists +# ScanCode release build script for PyPI wheels. +# Build a wheel for the current Python version ################################################################################ set -e @@ -17,16 +18,13 @@ set -e #set -x ./configure --dev -venv/bin/python setup.py --quiet sdist +venv/bin/scancode-reindex-licenses +venv/bin/scancode-reindex-package-patterns +venv/bin/scancode-train-gibberish-model -rm -rf build .eggs src/scancode_toolkit*.egg-info src/scancode_toolkit_mini*.egg-info -cp setup.cfg setup-main.cfg -cp setup-mini.cfg setup.cfg - -venv/bin/python setup.py --quiet sdist - -cp setup-main.cfg setup.cfg -rm setup-main.cfg +# build license data packages +venv/bin/flot --pyproject pyproject-licensedcode-data.toml --wheel --sdist +venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel --sdist venv/bin/twine check dist/* diff --git a/etc/release/scancode-create-pypi-wheel-and-sdist.sh b/etc/release/scancode-create-pypi-wheel-and-sdist.sh index da333f42538..7ad0263e66d 100755 --- a/etc/release/scancode-create-pypi-wheel-and-sdist.sh +++ b/etc/release/scancode-create-pypi-wheel-and-sdist.sh @@ -22,10 +22,6 @@ venv/bin/scancode-reindex-licenses venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model -# build license data packages -venv/bin/flot --pyproject pyproject-licensedcode-data.toml --wheel --sdist -venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel --sdist - # build code packages venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel --sdist venv/bin/flot --pyproject pyproject-scancode-toolkit-mini.toml --wheel --sdist From a5000611ac99070b2ff5be143d54cf416d4251e8 Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Tue, 17 Mar 2026 17:56:51 +0530 Subject: [PATCH 4/9] Update pyproject files for releasing multiple wheels Signed-off-by: Ayan Sinha Mahapatra --- pyproject-licensedcode-data.toml | 2 +- pyproject-licensedcode-index.toml | 2 +- pyproject-scancode-toolkit-mini.toml | 21 ++++++---- pyproject-scancode-toolkit.toml | 5 ++- pyproject.toml | 61 ++++++++++++++++------------ requirements-dev.txt | 2 +- requirements-linux.txt | 2 +- 7 files changed, 55 insertions(+), 40 deletions(-) diff --git a/pyproject-licensedcode-data.toml b/pyproject-licensedcode-data.toml index 67c4ba03679..1ab76b18caa 100644 --- a/pyproject-licensedcode-data.toml +++ b/pyproject-licensedcode-data.toml @@ -4,7 +4,7 @@ build-backend = "flot.buildapi" [project] name = "licensedcode-data" -version = "32.1.0" +version = "32.5.0" description = "A packaging of the ScanCode licensedb license and license rules database." long_description_content_type = "text/x-rst" readme = "src/licensedcode/data/README.rst" diff --git a/pyproject-licensedcode-index.toml b/pyproject-licensedcode-index.toml index 159b351ccd9..13fbe64bf31 100644 --- a/pyproject-licensedcode-index.toml +++ b/pyproject-licensedcode-index.toml @@ -4,7 +4,7 @@ build-backend = "flot.buildapi" [project] name = "licensedcode-index" -version = "32.1.0" +version = "32.5.0" description = "A packaging of the ScanCode licensedb license and license rules pre-built index. Can only be used with ScanCode-Toolkit." long_description_content_type = "text/x-rst" readme = "src/licensedcode/data/README.rst" diff --git a/pyproject-scancode-toolkit-mini.toml b/pyproject-scancode-toolkit-mini.toml index f4c24fd2e94..3ad6b7f83d8 100644 --- a/pyproject-scancode-toolkit-mini.toml +++ b/pyproject-scancode-toolkit-mini.toml @@ -4,11 +4,11 @@ build-backend = "flot.buildapi" [project] name = "scancode-toolkit-mini" -version = "32.1.0" +version = "32.5.0" description = "ScanCode is a tool to scan code for license, copyright, package and their documented dependencies and other interesting facts." readme = "README.rst" license = { text = "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" } -requires-python = ">=3.8" +requires-python = ">=3.10" authors = [ { name = "nexB. Inc. and others", email = "info@aboutcode.org" }, ] @@ -23,6 +23,7 @@ keywords = [ "author", "extract", "licensing", + "scan", "sca", "SBOM", "spdx", @@ -126,7 +127,7 @@ packages = [ "packagedcode_msitools >= 0.101.210706; platform_system == 'Linux'", ] -testing = [ +dev = [ "flot", "pytest >= 6, != 7.0.0", "pytest-xdist >= 2", @@ -137,14 +138,12 @@ testing = [ "isort", "vendorize >= 0.3.0", "pytest-rerunfailures", + "ruff", "bump-my-version", -] - -docs = [ - "Sphinx == 5.1.0", + "Sphinx >= 5.0.2", "sphinx_rtd_theme >= 0.5.1", - "doc8 >= 0.8.1", "sphinx-reredirects >= 0.1.2", + "doc8 >= 0.8.1", "sphinx-autobuild", "sphinx-rtd-dark-mode>=1.3.0", "sphinx-copybutton", @@ -152,7 +151,7 @@ docs = [ [tool.bumpversion] -current_version = "32.1.0" +current_version = "32.5.0" allow_dirty = true files = [ @@ -244,6 +243,10 @@ scancode = "scancode.cli:scancode" scancode-reindex-licenses = "licensedcode.reindex:reindex_licenses" scancode-license-data = "licensedcode.license_db:dump_scancode_license_data" regen-package-docs = "packagedcode.regen_package_docs:regen_package_docs" +scancode-reindex-package-patterns = "packagedcode.cache:cache_package_patterns" +add-required-phrases = "licensedcode.required_phrases:add_required_phrases" +gen-new-required-phrases-rules = "licensedcode.required_phrases:gen_required_phrases_rules" +scancode-train-gibberish-model = "textcode.train_gibberish_model:train_gibberish_model" # These are configurations for ScanCode plugins as entry points. diff --git a/pyproject-scancode-toolkit.toml b/pyproject-scancode-toolkit.toml index bcb22fecaac..a39bb5c54f7 100644 --- a/pyproject-scancode-toolkit.toml +++ b/pyproject-scancode-toolkit.toml @@ -161,7 +161,6 @@ files = [ { filename = "pyproject.toml" }, { filename = "pyproject-scancode-toolkit-mini.toml" }, { filename = "pyproject-packagedcode.toml" }, - ] @@ -245,6 +244,10 @@ scancode = "scancode.cli:scancode" scancode-reindex-licenses = "licensedcode.reindex:reindex_licenses" scancode-license-data = "licensedcode.license_db:dump_scancode_license_data" regen-package-docs = "packagedcode.regen_package_docs:regen_package_docs" +scancode-reindex-package-patterns = "packagedcode.cache:cache_package_patterns" +add-required-phrases = "licensedcode.required_phrases:add_required_phrases" +gen-new-required-phrases-rules = "licensedcode.required_phrases:gen_required_phrases_rules" +scancode-train-gibberish-model = "textcode.train_gibberish_model:train_gibberish_model" # These are configurations for ScanCode plugins as entry points. diff --git a/pyproject.toml b/pyproject.toml index 0d7d32ef0d4..d46f3a5b0a1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,11 +7,11 @@ build-backend = "flot.buildapi" [project] name = "scancode-toolkit-devel" -version = "32.1.0" +version = "32.5.0" description = "ScanCode is a tool to scan code for license, copyright, package and their documented dependencies and other interesting facts." readme = "README.rst" license = { text = "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" } -requires-python = ">=3.8" +requires-python = ">=3.10" authors = [ { name = "nexB. Inc. and others", email = "info@aboutcode.org" }, ] @@ -39,11 +39,11 @@ classifiers = [ "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Software Development", "Topic :: Utilities", ] @@ -51,57 +51,62 @@ classifiers = [ dependencies = [ "attrs >= 18.1,!=20.1.0;python_version<'3.11'", "attrs >= 22.1.0;python_version>='3.11'", - "Beautifulsoup4 >= 4.0.0", + "Beautifulsoup4[chardet] >= 4.13.0", "boolean.py >= 4.0", "chardet >= 3.0.0", - "click >= 6.7, !=7.0", + "click >= 6.7, !=7.0, !=8.1.8;python_version<'3.10'", + "click >= 8.2.0;python_version>='3.10'", "colorama >= 0.3.9", - "commoncode >= 31.0.3", + "commoncode >= 32.4.2", + "cyseq >= 0.1.2", "container-inspector >= 31.0.0", "debian-inspector >= 31.1.0", "dparse2 >= 0.7.0", "fasteners", - "fingerprints >= 0.6.0", + "fingerprints >= 0.6.0, <=1.2.3", "ftfy >= 6.0.0", "gemfileparser2 >= 0.9.0", "html5lib", "importlib_metadata", - "intbitset >= 3.0.2", + "intbitset >= 4.1.0", "jaraco.functools", "javaproperties >= 0.5", "jinja2 >= 2.7.0", "jsonstreams >= 0.5.0", - "license_expression >= 30.1.1", - "lxml >= 4.9.2", + "license_expression >= 30.4.4", + "lxml >= 5.4.0", "MarkupSafe >= 2.1.2", + "multiregex >= 2.0.3", + "normality <= 2.6.1", "packageurl_python >= 0.9.0", "packvers >= 21.0.0", # use temp advanced patched release "parameter-expansion-patched >= 0.3.1", - "pdfminer.six >= 20200101", + "pdfminer.six >= 20251227", "pefile >= 2020.1.1", "pip-requirements-parser >= 32.0.1", "pkginfo2 >= 30.0.0", "pluggy >= 1.0.0", "plugincode >= 32.0.0", "publicsuffix2", - "pyahocorasick >= 2.0.0", - "pygmars >= 0.7.0", - "pygments", + "pyahocorasick >= 2.3.0", + "pygmars >= 1.0.0", + "pygments >= 1.0.0", "pymaven_patch >= 0.2.8", "requests >= 2.7.0", "saneyaml >= 0.6.0", "spdx_tools == 0.8.2", "text_unidecode >= 1.0", - "toml >= 0.10.0", + "tomli >= 2", "urlpy", "xmltodict >= 0.11.0", "zipp >= 3.0.0; python_version < \"3.9\"", "typecode >= 30.0.1", - "typecode[full] >= 30.0.1", + "typecode[full] >= 30.1.0", "extractcode[full] >= 31.0.0", ] + [project.urls] Homepage = "https://github.com/nexB/scancode-toolkit" @@ -116,7 +121,7 @@ licenses = [ # no impact but added for symmetry with the other pyproject.toml full = [ "extractcode[full] >= 31.0.0", - "typecode[full] >= 30.0.0", + "typecode[full] >= 30.1.0", ] # linux-only package handling @@ -124,10 +129,12 @@ packages = [ "rpm_inspector_rpm >= 4.16.1.3; platform_system == 'Linux'", "regipy >= 3.1.0; platform_system == 'Linux'", "packagedcode_msitools >= 0.101.210706; platform_system == 'Linux'", + "go-inspector >= 0.5.0; platform_system == 'Linux'", + "rust-inspector >= 0.2.1; platform_system == 'Linux'", ] -testing = [ - "flot", +dev = [ + "flot >= 0.7.0", "pytest >= 6, != 7.0.0", "pytest-xdist >= 2", "aboutcode-toolkit >= 7.0.2", @@ -137,14 +144,12 @@ testing = [ "isort", "vendorize >= 0.3.0", "pytest-rerunfailures", + "ruff", "bump-my-version", -] - -docs = [ - "Sphinx == 5.1.0", + "Sphinx >= 5.0.2", "sphinx_rtd_theme >= 0.5.1", - "doc8 >= 0.8.1", "sphinx-reredirects >= 0.1.2", + "doc8 >= 0.8.1", "sphinx-autobuild", "sphinx-rtd-dark-mode>=1.3.0", "sphinx-copybutton", @@ -152,7 +157,7 @@ docs = [ [tool.bumpversion] -current_version = "32.1.0" +current_version = "32.5.0" allow_dirty = true files = [ @@ -244,6 +249,10 @@ scancode = "scancode.cli:scancode" scancode-reindex-licenses = "licensedcode.reindex:reindex_licenses" scancode-license-data = "licensedcode.license_db:dump_scancode_license_data" regen-package-docs = "packagedcode.regen_package_docs:regen_package_docs" +scancode-reindex-package-patterns = "packagedcode.cache:cache_package_patterns" +add-required-phrases = "licensedcode.required_phrases:add_required_phrases" +gen-new-required-phrases-rules = "licensedcode.required_phrases:gen_required_phrases_rules" +scancode-train-gibberish-model = "textcode.train_gibberish_model:train_gibberish_model" # These are configurations for ScanCode plugins as entry points. diff --git a/requirements-dev.txt b/requirements-dev.txt index 91e5336d812..ede859f4ae9 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,7 +9,7 @@ docutils==0.19 doc8==2.0.0 et-xmlfile==1.1.0 execnet==1.9.0 -flot==0.7.2 +flot==0.7.3 iniconfig==1.1.1 isort==5.10.1 jeepney==0.8.0 diff --git a/requirements-linux.txt b/requirements-linux.txt index 9269a7bd04b..006c9f6b8a0 100644 --- a/requirements-linux.txt +++ b/requirements-linux.txt @@ -1,4 +1,4 @@ packagedcode-msitools==0.101.210706 -regipy==3.1.0 +regipy==6.2.0 rpm-inspector-rpm==4.16.1.3.210404 go-inspector==0.5.0 From 9dfc115d038762b2a9210055990cad9eb6f75ffb Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Tue, 17 Mar 2026 17:57:22 +0530 Subject: [PATCH 5/9] Update github action release scripts for multiple wheels Signed-off-by: Ayan Sinha Mahapatra --- .../licensedcode-data-index-release.yml | 90 +++++++++++++++++ .github/workflows/scancode-release.yml | 97 +++++++------------ src/licensedcode/data/README.rst | 13 +++ 3 files changed, 140 insertions(+), 60 deletions(-) create mode 100644 .github/workflows/licensedcode-data-index-release.yml create mode 100644 src/licensedcode/data/README.rst diff --git a/.github/workflows/licensedcode-data-index-release.yml b/.github/workflows/licensedcode-data-index-release.yml new file mode 100644 index 00000000000..de27ce89e0e --- /dev/null +++ b/.github/workflows/licensedcode-data-index-release.yml @@ -0,0 +1,90 @@ +name: Create library release archives, create a GH release and publish PyPI wheel and sdist on tag in main branch + + +# This is executed automatically on a tag in the main branch + +# Summary of the steps: +# - build wheels and sdist +# - upload wheels and sdist to PyPI +# - create gh-release and upload wheels and dists there +# TODO: smoke test wheels and sdist +# TODO: add changelog to release text body + +# WARNING: this is designed only for packages building as pure Python wheels + +on: + workflow_dispatch: + push: + tags: + - "licensedcode-v*.*.*" + +jobs: + build-pypi-distribs: + permissions: + contents: read # to fetch code (actions/checkout) + + name: Build and publish library to PyPI + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.14 + + - name: Install pypa/build and twine + run: python -m pip install --user --upgrade build twine pkginfo flot + + - name: Install requirements then build main and mini wheel + run: etc/release/licensedcode-create-pypi-wheel-and-sdist.sh + + - name: Upload built archives + uses: actions/upload-artifact@v4 + with: + name: pypi_archives + path: dist/* + + + create-gh-release: + permissions: + contents: write + + name: Create GH release + needs: + - build-pypi-distribs + runs-on: ubuntu-24.04 + + steps: + - name: Download built archives + uses: actions/download-artifact@v4 + with: + name: pypi_archives + path: dist + + - name: Create GH release + uses: softprops/action-gh-release@v2 + with: + draft: true + files: dist/* + + + create-pypi-release: + name: Create PyPI release + needs: + - create-gh-release + runs-on: ubuntu-24.04 + environment: pypi-publish + permissions: + id-token: write + + steps: + - name: Download built archives + uses: actions/download-artifact@v4 + with: + name: pypi_archives + path: dist + + - name: Publish to PyPI + if: startsWith(github.ref, 'refs/tags') + uses: pypa/gh-action-pypi-publish@release/v1 \ No newline at end of file diff --git a/.github/workflows/scancode-release.yml b/.github/workflows/scancode-release.yml index b8bbf9077ee..688767307e4 100644 --- a/.github/workflows/scancode-release.yml +++ b/.github/workflows/scancode-release.yml @@ -20,7 +20,7 @@ on: permissions: {} jobs: - build_scancode_wheel_for_pypi: + build_scancode_wheels_sdist_for_pypi: permissions: contents: read # to fetch code (actions/checkout) @@ -31,59 +31,25 @@ jobs: run: shell: bash - strategy: - fail-fast: true - matrix: - pyver: ["3.10", "3.11", "3.12", "3.13", "3.14"] - - steps: - - uses: actions/checkout@v4 - - - name: Set up Python on ${{ matrix.pyver }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.pyver }} - - - name: Install requirements then build main and mini wheel - run: etc/release/scancode-create-pypi-wheel.sh - - - name: Collect built wheels for ${{ matrix.pyver }} - uses: actions/upload-artifact@v4 - with: - name: wheels-${{ matrix.pyver }} - path: dist/*.whl - - - build_scancode_sdist_for_pypi: - permissions: - contents: read # to fetch code (actions/checkout) - - name: Build PyPI sdist archives - runs-on: ubuntu-24.04 - - defaults: - run: - shell: bash - - strategy: - fail-fast: true - steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.14" + python-version: 3.14 + + - name: Install requirements then build main and mini wheel, sdist + run: etc/release/scancode-create-pypi-wheel-and-sdist.sh - - name: Install requirements then build main and mini sdist - run: etc/release/scancode-create-pypi-sdist.sh + - name: Install requirements then build licensedcode data/index wheels, sdist + run: etc/release/licensedcode-create-pypi-wheel-and-sdist.sh - - name: Collect built sdist + - name: Collect built wheels and sdist uses: actions/upload-artifact@v4 with: - name: sdists - path: dist/*.tar.gz + name: wheels_sdist + path: dist/* build_scancode_for_release_linux: @@ -229,7 +195,7 @@ jobs: name: Test PyPI wheels on linux and mac needs: - - build_scancode_wheel_for_pypi + - build_scancode_wheels_sdist_for_pypi runs-on: ${{ matrix.os }} defaults: @@ -253,16 +219,20 @@ jobs: - name: Download wheels artifact uses: actions/download-artifact@v4 with: - name: wheels-${{ matrix.pyver }} + name: wheels_sdist path: dist - - name: test install wheels + - name: install and test wheels run: | echo "license: gpl-2.0" > some.file rm -rf venv; \ python -m venv venv venv/bin/python -m pip install --upgrade pip wheel setuptools - for f in `find dist -type f -name "*${{ matrix.pyver }}*"`; \ + for f in `find dist -type f -name "licensedcode*.whl"`; \ + do \ + venv/bin/python -m pip install --force-reinstall "$f" ; \ + done + for f in `find dist -type f -name "scancode_toolkit-*.whl"`; \ do \ venv/bin/python -m pip install --force-reinstall "$f[full]" ; \ venv/bin/scancode -clipeu --json-pp - some.file ; \ @@ -275,7 +245,7 @@ jobs: name: Test PyPI wheels on Windows needs: - - build_scancode_wheel_for_pypi + - build_scancode_wheels_sdist_for_pypi runs-on: ${{ matrix.os }} defaults: @@ -299,15 +269,19 @@ jobs: - name: Download wheels artifact uses: actions/download-artifact@v4 with: - name: wheels-${{ matrix.pyver }} + name: wheels_sdist path: dist - - name: test install wheel + - name: install and test wheels run: | echo "license: gpl-2.0" > some.file python -m venv venv venv/Scripts/python.exe -m pip install --upgrade pip - for f in `find dist -type f -name "*${{ matrix.pyver }}*"`; \ + for f in `find dist -type f -name "licensedcode*.whl"`; \ + do \ + venv/Scripts/python.exe -m pip install --force-reinstall "$f" ; \ + done + for f in `find dist -type f -name "scancode_toolkit-*.whl"`; \ do \ venv/Scripts/python.exe -m pip install --force-reinstall "$f[full]" ; \ venv/Scripts/scancode -clipeu --json-pp - some.file ; \ @@ -454,6 +428,7 @@ jobs: - build_scancode_for_release_windows - build_scancode_for_release_linux - build_scancode_for_release_macos + - build_scancode_wheels_sdist_for_pypi runs-on: ubuntu-24.04 defaults: @@ -559,6 +534,12 @@ jobs: name: windows_app_py_3.14 path: dist + - name: Download scancode and licensedcode wheels + uses: actions/download-artifact@v4 + with: + name: wheels_sdist + path: dist + - name: Mock GH release run: | ls -al dist @@ -573,8 +554,7 @@ jobs: publish_to_pypi: name: Publish to PyPI needs: - - build_scancode_wheel_for_pypi - - build_scancode_sdist_for_pypi + - build_scancode_wheels_sdist_for_pypi - smoke_test_install_and_run_pypi_wheels_on_windows - smoke_test_install_and_run_pypi_wheels_on_posix - publish_to_gh_release @@ -585,10 +565,6 @@ jobs: defaults: run: shell: bash - strategy: - fail-fast: false - matrix: - dist_names: ["wheels-3.10", "wheels-3.11", "wheels-3.12", "wheels-3.13", "wheels-3.14", "sdists"] steps: - name: Set up Python @@ -596,10 +572,10 @@ jobs: with: python-version: 3.14 - - name: Download a single artifact + - name: scancode and licensedcode wheels uses: actions/download-artifact@v4 with: - name: ${{ matrix.dist_names }} + name: wheels_sdist path: dist - name: Mock PyPI upload @@ -607,4 +583,5 @@ jobs: ls -al dist - name: Publish distributions to PyPI + if: startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/src/licensedcode/data/README.rst b/src/licensedcode/data/README.rst new file mode 100644 index 00000000000..5e9296b49ba --- /dev/null +++ b/src/licensedcode/data/README.rst @@ -0,0 +1,13 @@ +ScanCode LicenseDB +================== + +LicenseDB is a free and open database of mostly all the software licenses, +in particular all the open source software licenses, with over 2000 curated +licenses texts and their metadata. + +LicenseDB is built from the ScanCode Toolkit license dataset and is an +essential reference license resource for license compliance and SBOMs. +LicenseDB includes all the SPDX and OSI licenses together with an extended +curated collection of other licenses and license metadata. +These licenses are carefully reviewed and curated and continusouly updated +by an open community of contributors. \ No newline at end of file From 850318e1d256b90051e55917e5b89193389d76d7 Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Tue, 17 Mar 2026 18:14:43 +0530 Subject: [PATCH 6/9] Grant execute permission to licensedcode wheel script Signed-off-by: Ayan Sinha Mahapatra --- etc/release/licensedcode-create-pypi-wheel-and-sdist.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 etc/release/licensedcode-create-pypi-wheel-and-sdist.sh diff --git a/etc/release/licensedcode-create-pypi-wheel-and-sdist.sh b/etc/release/licensedcode-create-pypi-wheel-and-sdist.sh old mode 100644 new mode 100755 From 574d4a4d63c8016519d4c9d83812bca277eb84f8 Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Wed, 18 Mar 2026 18:57:04 +0530 Subject: [PATCH 7/9] Also build wheels for release app archives Signed-off-by: Ayan Sinha Mahapatra --- etc/release/scancode-create-release-app-linux.sh | 4 +++- etc/release/scancode-create-release-app-macos.sh | 4 +++- etc/release/scancode-create-release-app-sources.sh | 5 +++-- etc/release/scancode-create-release-app-windows.sh | 4 +++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/etc/release/scancode-create-release-app-linux.sh b/etc/release/scancode-create-release-app-linux.sh index 74358fb6184..8c783c5c565 100755 --- a/etc/release/scancode-create-release-app-linux.sh +++ b/etc/release/scancode-create-release-app-linux.sh @@ -66,10 +66,12 @@ cp -r etc/thirdparty $release_dir/etc ./configure --dev venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model +venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel +venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel cp -r \ dist/scancode_*.whl \ - dist/licensedcode_index_*.whl \ + dist/licensedcode_index*.whl \ scancode extractcode configure \ *.rst \ samples \ diff --git a/etc/release/scancode-create-release-app-macos.sh b/etc/release/scancode-create-release-app-macos.sh index 6e7a8780f3e..cd15b2bf211 100755 --- a/etc/release/scancode-create-release-app-macos.sh +++ b/etc/release/scancode-create-release-app-macos.sh @@ -64,10 +64,12 @@ cp -r etc/thirdparty $release_dir/etc ./configure --dev venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model +venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel +venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel cp -r \ dist/scancode_*.whl \ - dist/licensedcode_index_*.whl \ + dist/licensedcode_index*.whl \ scancode extractcode configure \ *.rst \ samples \ diff --git a/etc/release/scancode-create-release-app-sources.sh b/etc/release/scancode-create-release-app-sources.sh index ccfcfb01215..348d5bfc049 100755 --- a/etc/release/scancode-create-release-app-sources.sh +++ b/etc/release/scancode-create-release-app-sources.sh @@ -24,11 +24,12 @@ git describe --tags > $release_dir/SCANCODE_VERSION thirdparty_dir=$release_dir/thirdparty mkdir -p $thirdparty_dir +./configure --dev +venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --sdist + # collect other built dist mv dist/*.tar.gz $release_dir -./configure --dev - venv/bin/python etc/scripts/fetch_thirdparty.py \ --requirements requirements.txt \ --requirements requirements-native.txt \ diff --git a/etc/release/scancode-create-release-app-windows.sh b/etc/release/scancode-create-release-app-windows.sh index d07ff0575a0..be5e63a8add 100755 --- a/etc/release/scancode-create-release-app-windows.sh +++ b/etc/release/scancode-create-release-app-windows.sh @@ -64,10 +64,12 @@ cp -r etc/thirdparty $release_dir/etc venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model +venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel +venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel cp -r \ dist/scancode_*.whl \ - dist/licensedcode_index_*.whl \ + dist/licensedcode_index*.whl \ scancode.bat extractcode.bat configure.bat \ *.rst \ samples \ From ead87ba5199e24298034b76574d3fb080d2c5e4f Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Wed, 18 Mar 2026 19:50:43 +0530 Subject: [PATCH 8/9] Update configure scripts with licensedcode index Signed-off-by: Ayan Sinha Mahapatra --- configure | 6 +----- configure.bat | 7 ++++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 5d1a56e492d..906f5b92241 100755 --- a/configure +++ b/configure @@ -149,13 +149,9 @@ if [[ $OSTYPE == 'darwin'* ]]; then fi # Requirement arguments passed to pip and used by default or with --dev. -REQUIREMENTS="--editable . --constraint requirements.txt" -DEV_REQUIREMENTS="--editable .[dev,packages] --constraint requirements.txt --constraint requirements-dev.txt" -PROD_REQUIREMENTS="scancode_toolkit*.whl" - REQUIREMENTS="--no-build-isolation --editable $BASE --constraint requirements.txt --constraint requirements-linux.txt" DEV_REQUIREMENTS="--no-build-isolation --editable $BASE_DEV --constraint requirements.txt --constraint requirements-linux.txt --constraint requirements-dev.txt" -PROD_REQUIREMENTS="--no-build-isolation scancode_toolkit*.whl" +PROD_REQUIREMENTS="--no-build-isolation scancode_toolkit*.whl licensedcode_index*.whl" FLOT_REQUIREMENTS="etc/thirdparty/flot*.whl" # where we create a virtualenv diff --git a/configure.bat b/configure.bat index dcfc20ce4ea..7263f02022e 100644 --- a/configure.bat +++ b/configure.bat @@ -26,9 +26,10 @@ @rem ################################ @rem # Requirement arguments passed to pip and used by default or with --dev. -set "REQUIREMENTS=--editable . --constraint requirements.txt" -set "DEV_REQUIREMENTS=--editable .[dev] --constraint requirements.txt --constraint requirements-dev.txt" -set "PROD_REQUIREMENTS=scancode_toolkit*.whl" +set "REQUIREMENTS=--no-build-isolation --editable . --constraint requirements.txt" +set "DEV_REQUIREMENTS=--no-build-isolation --editable .[dev] --constraint requirements.txt --constraint requirements-dev.txt" +set "PROD_REQUIREMENTS=--no-build-isolation scancode_toolkit*.whl licensedcode_index*.whl" +set "FLOT_REQUIREMENTS=etc/thirdparty/flot*.whl" @rem # where we create a virtualenv set "VIRTUALENV_DIR=venv" From 30a61847e8aadae7c84dca08a1872d550eda66f6 Mon Sep 17 00:00:00 2001 From: Ayan Sinha Mahapatra Date: Wed, 18 Mar 2026 20:35:08 +0530 Subject: [PATCH 9/9] Create license index for release app archives Signed-off-by: Ayan Sinha Mahapatra --- etc/release/scancode-create-release-app-linux.sh | 1 + etc/release/scancode-create-release-app-macos.sh | 1 + etc/release/scancode-create-release-app-windows.sh | 1 + 3 files changed, 3 insertions(+) diff --git a/etc/release/scancode-create-release-app-linux.sh b/etc/release/scancode-create-release-app-linux.sh index 8c783c5c565..27ccd39e698 100755 --- a/etc/release/scancode-create-release-app-linux.sh +++ b/etc/release/scancode-create-release-app-linux.sh @@ -66,6 +66,7 @@ cp -r etc/thirdparty $release_dir/etc ./configure --dev venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model +venv/bin/scancode-reindex-licenses venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel diff --git a/etc/release/scancode-create-release-app-macos.sh b/etc/release/scancode-create-release-app-macos.sh index cd15b2bf211..8598ef5d302 100755 --- a/etc/release/scancode-create-release-app-macos.sh +++ b/etc/release/scancode-create-release-app-macos.sh @@ -64,6 +64,7 @@ cp -r etc/thirdparty $release_dir/etc ./configure --dev venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model +venv/bin/scancode-reindex-licenses venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel diff --git a/etc/release/scancode-create-release-app-windows.sh b/etc/release/scancode-create-release-app-windows.sh index be5e63a8add..cdb8fdb5caf 100755 --- a/etc/release/scancode-create-release-app-windows.sh +++ b/etc/release/scancode-create-release-app-windows.sh @@ -64,6 +64,7 @@ cp -r etc/thirdparty $release_dir/etc venv/bin/scancode-reindex-package-patterns venv/bin/scancode-train-gibberish-model +venv/bin/scancode-reindex-licenses venv/bin/flot --pyproject pyproject-scancode-toolkit.toml --wheel venv/bin/flot --pyproject pyproject-licensedcode-index.toml --wheel