diff --git a/.gitignore b/.gitignore index 8624a3d..6554fb6 100644 --- a/.gitignore +++ b/.gitignore @@ -65,77 +65,3 @@ /snakemake-8.18.2.tar.gz /snakemake-8.30.0.tar.gz /snakemake-8.30.0-assets.tar.zst -/snakemake-9.3.3.tar.gz -/snakemake-9.3.3-assets.tar.zst -/snakemake-9.3.4.tar.gz -/snakemake-9.3.4-assets.tar.zst -/snakemake-9.4.0.tar.gz -/snakemake-9.4.0-assets.tar.zst -/snakemake-9.5.1.tar.gz -/snakemake-9.5.1-assets.tar.zst -/snakemake-6dee2b55fbfff3bdad33cecdbeb8bd55ff4586bc.tar.gz -/snakemake-6dee2b55fbfff3bdad33cecdbeb8bd55ff4586bc-assets.tar.zst -/snakemake-9.6.1.tar.gz -/snakemake-9.6.1-assets.tar.zst -/snakemake-9.6.2.tar.gz -/snakemake-9.6.2-assets.tar.zst -/snakemake-9.7.1.tar.gz -/snakemake-9.7.1-assets.tar.zst -/snakemake-9.8.0.tar.gz -/snakemake-9.8.0-assets.tar.zst -/snakemake-9.8.1.tar.gz -/snakemake-9.8.1-assets.tar.zst -/snakemake-9.8.2.tar.gz -/snakemake-9.8.2-assets.tar.zst -/snakemake-9.9.0.tar.gz -/snakemake-9.9.0-assets.tar.zst -/snakemake-9.10.0.tar.gz -/snakemake-9.10.0-assets.tar.zst -/snakemake-9.10.1.tar.gz -/snakemake-9.10.1-assets.tar.zst -/snakemake-9.11.0.tar.gz -/snakemake-9.11.0-assets.tar.zst -/snakemake-9.11.2.tar.gz -/snakemake-9.11.2-assets.tar.zst -/snakemake-9.11.3.tar.gz -/snakemake-9.11.3-assets.tar.zst -/snakemake-9.11.4.tar.gz -/snakemake-9.11.4-assets.tar.zst -/snakemake-9.11.5.tar.gz -/snakemake-9.11.5-assets.tar.zst -/snakemake-9.11.6.tar.gz -/snakemake-9.11.6-assets.tar.zst -/snakemake-9.11.7.tar.gz -/snakemake-9.11.7-assets.tar.zst -/snakemake-9.11.8.tar.gz -/snakemake-9.11.8-assets.tar.zst -/snakemake-9.11.9.tar.gz -/snakemake-9.11.9-assets.tar.zst -/snakemake-9.12.0.tar.gz -/snakemake-9.12.0-assets.tar.zst -/snakemake-9.13.0.tar.gz -/snakemake-9.13.0-assets.tar.zst -/snakemake-9.13.1.tar.gz -/snakemake-9.13.1-assets.tar.zst -/snakemake-9.13.2.tar.gz -/snakemake-9.13.2-assets.tar.zst -/snakemake-9.13.3.tar.gz -/snakemake-9.13.3-assets.tar.zst -/snakemake-9.13.4.tar.gz -/snakemake-9.13.4-assets.tar.zst -/snakemake-9.13.5.tar.gz -/snakemake-9.13.5-assets.tar.zst -/snakemake-9.13.6.tar.gz -/snakemake-9.13.6-assets.tar.zst -/snakemake-9.13.7.tar.gz -/snakemake-9.13.7-assets.tar.zst -/snakemake-9.14.2.tar.gz -/snakemake-9.14.2-assets.tar.zst -/snakemake-9.14.3.tar.gz -/snakemake-9.14.3-assets.tar.zst -/snakemake-9.14.4.tar.gz -/snakemake-9.14.4-assets.tar.zst -/snakemake-9.14.5.tar.gz -/snakemake-9.14.5-assets.tar.zst -/snakemake-9.14.6.tar.gz -/snakemake-9.14.6-assets.tar.zst diff --git a/.packit.yaml b/.packit.yaml new file mode 100644 index 0000000..2959457 --- /dev/null +++ b/.packit.yaml @@ -0,0 +1,13 @@ +upstream_project_url: https://github.com/snakemake/snakemake +copy_upstream_release_description: false +upstream_tag_template: v{version} + +jobs: + - job: pull_from_upstream + trigger: release + dist_git_branches: + - fedora-rawhide + - job: koji_build + trigger: commit + dist_git_branches: + - fedora-all diff --git a/0001-Revert-chore-work-around-setuptools-76-hash-mismatch.patch b/0001-Revert-chore-work-around-setuptools-76-hash-mismatch.patch new file mode 100644 index 0000000..509268a --- /dev/null +++ b/0001-Revert-chore-work-around-setuptools-76-hash-mismatch.patch @@ -0,0 +1,54 @@ +From 9d99c1c7fc2bb7ebfcba570fe64f07b0646f294a Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Tue, 18 Mar 2025 22:18:47 -0400 +Subject: [PATCH] Revert "chore: work around setuptools 76 hash mismatch from + March 9, 2025 (#3370)" + +This reverts commit 477e5f80d781334afcd549c612823caba1ef6299. +--- + pyproject.toml | 3 +-- + test-environment.yml | 5 ++--- + 2 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/pyproject.toml b/pyproject.toml +index 52229b4d..275a4655 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -1,8 +1,7 @@ + [build-system] + build-backend = "setuptools.build_meta" + requires = [ +- # TODO relax upper bound, as of March 9 2025 there is a hash mismatch in setuptools on pypi +- "setuptools>=42,<76", ++ "setuptools>=42", + 'tomli; python_version < "3.11"', + ] + +diff --git a/test-environment.yml b/test-environment.yml +index 6b778458..df8a30de 100644 +--- a/test-environment.yml ++++ b/test-environment.yml +@@ -4,7 +4,6 @@ channels: + - nodefaults + dependencies: + - python >=3.11 +- - setuptools + - yte + - packaging + - boto3 +@@ -58,10 +57,10 @@ dependencies: + - nodejs # for cwltool + - immutables + - conda +- - cwltool +- - cwl-utils + - pip + - pip: ++ - cwltool ++ - cwl-utils + - snakemake-interface-executor-plugins >=9.3.1 + - snakemake-executor-plugin-cluster-generic >=1.0.9 + - snakemake-storage-plugin-http +-- +2.48.1 + diff --git a/0001-chore-Add-license-texts-for-things-bundled-in-the-as.patch b/0001-chore-Add-license-texts-for-things-bundled-in-the-as.patch new file mode 100644 index 0000000..759db2d --- /dev/null +++ b/0001-chore-Add-license-texts-for-things-bundled-in-the-as.patch @@ -0,0 +1,677 @@ +From 5d4175e75a0981d9d925ecde4297d3b568c403c2 Mon Sep 17 00:00:00 2001 +From: Ben Beasley +Date: Tue, 11 Mar 2025 11:46:53 -0400 +Subject: [PATCH] chore: Add license texts for things bundled in the assets + (#3099) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + +This PR is intended to apply on top of +https://github.com/snakemake/snakemake/pull/3098; see that PR for the +first two commits. + +From there, I attempted to account for all of the NPM packages that are +bundled in `vega/vega.js` via dependencies. I made an effort to verify +that every license file added in this commit actually corresponds to +some code present in `vega.js`. + +Next, I inspected `vega.js` for comments indicating that particular +routines were copied, derived, or adapted from other projects, and added +the license files for those projects. I didn’t attempt to judge whether +or not any of snippets might be distant enough from their inspirations +that they could perhaps claim not to be derived works under a particular +set of copyright laws – I just took the attributions at their word. + +Almost all of these licenses are ones (like `MIT`, `Apache-2.0`, `ISC` +or `BSD-3-Clause`) that require including the copyright and permission +statements (the license text) in copies and derived works, so while this +work is fussy, tedious, and unrewarding, it would seem to be necessary. + +So far, I only dug through `vega.js`. I still need to check if there is +anything in `vega-lite.js` or `vega-embed.js` that isn’t already +accounted for in `vega.js`, and I need to look at the other libraries +too. Still, I thought I should post my work in progress in case it +collected any feedback. + + +### QC + + +* [ ] The PR contains a test case for the changes or the changes are +already covered by an existing test case. **N/A – this change is not +really testable – except that building the package confirms the +checksums match.** +* [x] The documentation (`docs/`) is updated to reflect the changes or +this is not necessary (e.g. if the change does neither modify the +language nor the behavior or functionalities of Snakemake). **N/A – no +documentation update is believed to be necessary.** + + + +## Summary by CodeRabbit + +- **New Features** +- Added numerous new assets and dependencies related to the Vega +library, enhancing functionality. +- Expanded package declarations for various D3 modules and other +libraries in the reporting system. +- Introduced a new class for executing Xonsh scripts, allowing for more +scripting options. +- Added a new rule for running Python scripts in a Conda environment, +improving workflow flexibility. +- Enhanced documentation with a new "Maintainers" section and expanded +resources. + - Introduced a new test suite for validating Conda functionalities. +- Enhanced data validation capabilities using both Pandas and Polars for +handling sample data. + +- **Bug Fixes** +- Ensured that licenses and versions are accurately maintained for +various libraries. +- Improved error handling for Windows-specific issues in the testing +framework. + + +--------- + +Co-authored-by: Filipe G. Vieira <1151762+fgvieira@users.noreply.github.com> +Co-authored-by: Johannes Köster +--- + snakemake/assets/__init__.py | 400 ++++++++++++++++++ + .../report/html_reporter/data/packages.py | 137 ++++++ + 2 files changed, 537 insertions(+) + +diff --git a/snakemake/assets/__init__.py b/snakemake/assets/__init__.py +index 123bf130..ac343e25 100644 +--- a/snakemake/assets/__init__.py ++++ b/snakemake/assets/__init__.py +@@ -93,6 +93,262 @@ class Assets: + sha256="b75f7ed0af20dedadf92c52bc236161bcf0d294ff2e6e34ca76403203349f71d", + version="5.21.0", + ), ++ # Begin dependencies for vega, included in vega/vega.js ++ # Versions from https://github.com/vega/vega/blob/v5.21.0/yarn.lock. ++ # Via vega-crossfilter, vega-encode, vega-format, ++ # vega-functions, vega-geo, vega-regression, vega-scale, vega-statistics, ++ # vega-time, vega-transforms, vega-view; and via d3-geo (via vega-functions, ++ # vega-geo, vega-projection); and via d3-geo-projection (via vega-projection) ++ # ++ # This has its own dependency, internmap (1.0.1); however, while we can ++ # find code from vega-crossfilter and d3-array in vega.js, there does ++ # not appear to be any code from internmap after tree-shaking. ++ "d3-array/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-array/refs/tags/v{version}/LICENSE", ++ sha256="0747bebeb06b10954913149be9b9a8bdf6fad3e6fdcbd9f9524e7a94c13d2cea", ++ version="2.12.1", ++ ), ++ # Via vega-format ++ "d3-format/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-format/refs/tags/v{version}/LICENSE", ++ sha256="7eea8533ea92bd8c32a901e89ecb0305890905bb12711449565ddff96891146d", ++ version="2.0.0", ++ ), ++ # Via vega-format ++ "d3-time-format/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-time-format/refs/tags/v{version}/LICENSE", ++ sha256="7a3cb0e5055874e67db9aa2d5fe26de23204fa994ffbad198901ffe9c812a717", ++ version="3.0.0", ++ ), ++ # Via vega-time, vega-view; and via d3-time-format (via vega-format) ++ "d3-time/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-time/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.1.1", ++ ), ++ # Via vega-encode, vega-scale ++ "d3-interpolate/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-interpolate/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.0.1", ++ ), ++ # Via vega-functions, vega-geo; and via d3-interpolate (via vega-encode) ++ "d3-color/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-color/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.0.0", ++ ), ++ # Via vega-scale ++ "d3-scale/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-scale/refs/tags/v{version}/LICENSE", ++ sha256="7eea8533ea92bd8c32a901e89ecb0305890905bb12711449565ddff96891146d", ++ version="3.3.0", ++ ), ++ # Via vega-expression (vega-lite also depends on vega-expression) ++ # The license file included in the NPM package does not exist directly ++ # in https://github.com/DefinitelyTyped/DefinitelyTyped, so we use an ++ # unpkg URL to reference the contents of the NPM package instead. ++ "@types-estree/LICENSE": Asset( ++ url="https://unpkg.com/@types/estree@{version}/LICENSE", ++ sha256="c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383", ++ version="0.0.50", ++ ), ++ # Via vega-force ++ "d3-force/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-force/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.1.1", ++ ), ++ # Via d3-force (via vega-force) ++ "d3-dispatch/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-dispatch/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.0.0", ++ ), ++ # Via d3-force (via vega-force) ++ "d3-quadtree/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-quadtree/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.0.0", ++ ), ++ # Via vega-view; and via d3-force (via vega-force) ++ "d3-timer/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-timer/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.0.0", ++ ), ++ # Via vega-functions, vega-geo, vega-projection (directly and via ++ # d3-geo-projection) ++ "d3-geo/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-geo/refs/tags/v{version}/LICENSE", ++ sha256="c3c9d41a75b64963748657932167ec4c56404b8fd557d4f89c9eeda6e2fdf39a", ++ version="2.0.2", ++ ), ++ # Via vega-hierarchy ++ "d3-hierarchy/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-hierarchy/refs/tags/v{version}/LICENSE", ++ sha256="e1211892da0b0e0585b7aebe8f98c1274fba15bafe47fa1f4ee8a7a502c06304", ++ version="2.0.0", ++ ), ++ # Via vega-loader ++ # This has its own dependencies (commander 2.20.3, iconv-lite 0.4.24, ++ # rw 1.3.3), but they are all used only in the command-line tools ++ # rather than in the library that is bundled in vega.js. ++ "d3-dsv/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-dsv/refs/tags/v{version}/LICENSE", ++ sha256="8b5304265ccedbd17567aa14a0dc6b9bf4013fee44964c46aa54fdf8527d6a68", ++ version="2.0.0", ++ ), ++ # Via vega-loader; also from vega-geo/src/util/contours.js, "Based on ++ # https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js" ++ # This has its own dependency (commander 2.20.3), but it is used only ++ # in the command-line tools rather than in the library that is bundled ++ # in vega.js. Dependency node-fetch 2.6.4, via vega-loader, is not ++ # used for browser builds. ++ "topojson-client/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/topojson/topojson-client/refs/tags/v{version}/LICENSE", ++ sha256="4c4d15b635e04e691825a76db7d33f7f2033b55669a7430011694f31e6c65999", ++ version="3.1.0", ++ ), ++ # Via vega-projection ++ # This has its own dependencies (commander 2.20.3, resolve 1.20.0), but ++ # they are all used only in the command-line tools rather than in the ++ # library that is bundled in vega.js. ++ "d3-geo-projection/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-geo-projection/refs/tags/v{version}/LICENSE", ++ sha256="4108a126a74cc35d4d5ae39ca5d0cc926fa7c8ec40e459a0c6d3481c69decbd8", ++ version="3.0.0", ++ ), ++ # Via vega-scenegraph (directly and via d3-shape) ++ "d3-path/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-path/refs/tags/v{version}/LICENSE", ++ sha256="b8265327ab678f554800e71188b1cc6b1ff57522e292d2b1c0be66f27cf328b6", ++ version="2.0.0", ++ ), ++ # Via vega-scenegraph ++ "d3-shape/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-shape/refs/tags/v{version}/LICENSE", ++ sha256="7eea8533ea92bd8c32a901e89ecb0305890905bb12711449565ddff96891146d", ++ version="2.1.0", ++ ), ++ # Via vega-voronoi ++ "d3-delaunay/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-delaunay/refs/tags/v{version}/LICENSE", ++ sha256="d19bf35c4080eea32e098a9c8d62540ffd425611ac8dfc856a233f0357d8b02e", ++ version="5.2.0", ++ ), ++ # Via d3-delaunay (via vega-voronoi) ++ "delaunator/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/mapbox/delaunator/refs/tags/v{version}/LICENSE", ++ sha256="27043d1a6a0e1985fde12660decbbd3b23c67de900b00609c90d4f0aa492f425", ++ version="4.0.1", ++ ), ++ # End dependencies for vega, included in vega/vega.js ++ # Begin copied/derived/adapted code in vega, included in vega/vega.js ++ # From vega-util/src/lruCache.js, "adapted from ++ # https://github.com/dominictarr/hashlru/ (MIT License)". Version 1.0.4 ++ # was the current version when the function was added to vega, in ++ # commit f153863f3575bff1b42294c9cb065d80afb757ff on 2020-02-28. ++ "hashlru/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/dominictarr/hashlru/refs/tags/v{version}/LICENSE", ++ sha256="08e4bd7a280eaaf1fbcaad9dad1fb94412477fcdd1cf81660988303297e5e1d1", ++ version="1.0.4", ++ ), ++ # From ++ # vega-statistics/src/regression/{poly,r-squared,pow,log,linear}.js, ++ # "Adapted from d3-regression by Harry Stevens". Version 1.2.1 was the ++ # current version when the functions were added to vega, in commit ++ # 71610e4456a3a4145435d83f8458748ba137a2a3 2019-05-10. That release was ++ # not tagged in git, so we use the corresponding commit hash. ++ "d3-regression/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/HarryStevens/d3-regression/e23d40a663dffba14b92cb42d9989de3a32894b5/LICENSE", ++ sha256="d210203f922101502894baf700b9a392e323a26e4b603ab166c57e09a6e773b5", ++ version="1.2.1", ++ ), ++ # From vega-statistics/src/regression/poly.js, "Adapted from ++ # d3-regression by Harry Stevens [...] which was adapted from ++ # regression-js by Tom Alexander" Version 2.0.1 was the current version ++ # when the functions were added to vega, in commit ++ # 71610e4456a3a4145435d83f8458748ba137a2a3 2019-05-10. ++ "regression/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/Tom-Alexander/regression-js/refs/tags/{version}/LICENSE", ++ sha256="2f932f5cfb9b042cc6c0089ee8004b33e3746ffeab879341dbd453c150524307", ++ version="2.0.1", ++ ), ++ # From vega-statistics/src/regression/loess.js, "Adapted from ++ # science.js by Jason Davies". Version 1.9.3 was the current version ++ # when the functions were added to vega, in commit ++ # 71610e4456a3a4145435d83f8458748ba137a2a3 on 2019-05-10. ++ "science/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/jasondavies/science.js/refs/tags/v{version}/LICENSE", ++ sha256="3bd1fdf686ffcad175daddcb36ee28599ac8f090b6cec2c7654118c8a6f3d4c9", ++ version="1.9.3", ++ ), ++ # From src/quickselect.js in d3-array, "Based on ++ # https://github.com/mourner/quickselect". Version 2.0.0 was the ++ # current version when the file was added to d3-array, in commit ++ # d447c2a31cd6aacf54a40b22c29620f7e17bbd7e on 2018-11-10. ++ "quickselect/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/mourner/quickselect/refs/tags/v{version}/LICENSE", ++ sha256="597034cb7c11c916ad407344ea99a0b08e3c443a6b4421460f1d23c411c69707", ++ version="2.0.0", ++ ), ++ # From vega-statistics/src/normal.js, "Ported from Apache Commons ++ # Math". Version 3.6.1 was the current version when this implementation ++ # of erfinv was added to vega, in commit ++ # c26050f21b0c95620f8f1a3094056716ec6c5aaa on 2019-09-26. ++ "commons-math/LICENSE.txt": Asset( ++ url="https://raw.githubusercontent.com/apache/commons-math/refs/tags/MATH_3_6_1/LICENSE.txt", ++ sha256="64f23963615950bad9ddd31569a7f09afbbe11b81d94873ffd9b1cac6081a11d", ++ version="3.6.1", ++ ), ++ "commons-math/NOTICE.txt": Asset( ++ url="https://raw.githubusercontent.com/apache/commons-math/refs/tags/MATH_3_6_1/NOTICE.txt", ++ sha256="5495442a32bfc2b93b4a8f2c34c5c218d16cca434aa5684fb953d9419120e3fa", ++ version="3.6.1", ++ ), ++ # From vega-expression/src/parser.js, "The following expression parser ++ # is based on Esprima (http://esprima.org/)." Unusually, the original ++ # license text is reproduced in the source file, so we could get by ++ # without a separate license file (and in fact the license file lacks ++ # the necessary copyright statement present in the code) but we add it ++ # for consistency. Version 2.2.0 was the last version of Esprima that ++ # had a copyright statement in esprima.js attributing specific ++ # individual contributors, as reproduced in the vega source. ++ "esprima/LICENSE.BSD": Asset( ++ url="https://raw.githubusercontent.com/jquery/esprima/refs/tags/{version}/LICENSE.BSD", ++ sha256="0e74697a68cebdcd61502c30fe80ab7f9e341d995dcd452023654d57133534b1", ++ version="2.2.0", ++ ), ++ # From vega-scenegraph/src/path/arc.js, "Copied from Inkscape svgtopdf, ++ # thanks!" We cannot find the original implementation in Inkscape or ++ # anywhere else, so we do not add a license file for this snippet. ++ # From vega-scenegraph/src/path/parse.js, "Path parsing and rendering ++ # code adapted from fabric.js -- Thanks!" This was added in commit ++ # 82932143de7cef4187a34026689df12abaa25959 on 2018-12-20, and the ++ # current release of fabric.js at that time was 2.4.5. ++ "fabric/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/fabricjs/fabric.js/refs/tags/v{version}/LICENSE", ++ sha256="9f6c2cc99aa9c618df93fed7d1cf7279d4e329d92dd2ce5e96173c73ce305055", ++ version="2.4.5", ++ ), ++ # From vega-geo/src/util/{contours,density2D}.js, "Implementation ++ # adapted from d3/d3-contour. Thanks!" When these routines were added ++ # in 0ab6b730a7e576d33d00e12063855bb132194191 on 2019-11-11, the latest ++ # version was 1.3.2. ++ "d3-contour/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/d3/d3-contour/refs/tags/v{version}/LICENSE", ++ sha256="5f5dcce265668080a60fbdc513f6f8ef21466780bcaa331e64ee39df19e63b30", ++ version="1.3.2", ++ ), ++ # From vega-geo/src/util/contours.js, "Based on ++ # https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js" ++ "shapefile/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/mbostock/shapefile/refs/tags/v{version}/LICENSE.txt", ++ sha256="c16529a9d5b8802982abd714a6823344e24b0cb5131596bc343927ead605d708", ++ version="0.6.2", ++ ), ++ # End copied/derived/adapted code in vega, included in vega/vega.js + "vega-lite/vega-lite.js": Asset( + url="https://cdnjs.cloudflare.com/ajax/libs/vega-lite/{version}/vega-lite.js", + sha256="6eb7f93121cd9f44cf8640244f87c5e143f87c7a0b6cd113da4a9e41e3adf0aa", +@@ -103,6 +359,57 @@ class Assets: + sha256="f618900fd0d64046963b29f40590cdd1e341a2f41449f99110d82fd81fea808c", + version="5.2.0", + ), ++ # Begin dependencies for vega-lite, included in vega-lite/vega-lite.js ++ # Versions from https://github.com/vega/vega-lite/blob/v5.2.0/yarn.lock. ++ "@types-clone/LICENSE": Asset( ++ url="https://unpkg.com/@types/clone@{version}/LICENSE", ++ sha256="c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383", ++ version="2.1.1", ++ ), ++ "array-flat-polyfill/LICENSE": Asset( ++ # Releases are not tagged in git; we use the commit hash ++ # corresponding to the 1.0.1 release ++ url="https://raw.githubusercontent.com/jonathantneal/array-flat-polyfill/362d855cb6ea2ef12f0676b116c5f9e4233b6f31/LICENSE.md", ++ sha256="597756adcb51f243ef4fb386920377f61d012ace0904364e1a8ee9aaec6afc84", ++ version="1.0.1", ++ ), ++ "clone/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/pvorb/clone/refs/tags/v{version}/LICENSE", ++ sha256="3fb0857ef0133928cf72c88dfc464e931486e88778961eedec25585e2321507f", ++ version="2.1.2", ++ ), ++ "fast-deep-equal/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/epoberezkin/fast-deep-equal/refs/tags/v{version}/LICENSE", ++ sha256="7bf9b2de73a6b356761c948d0e9eeb4be6c1270bd04c79cd489c1e400ffdfc1a", ++ version="3.1.3", ++ ), ++ "fast-json-stable-stringify/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/epoberezkin/fast-json-stable-stringify/refs/tags/v{version}/LICENSE", ++ sha256="a833d366242c298cf1b10263516572fb8dcbe68eb5072cdcac2b4546e2b4eb36", ++ version="2.1.0", ++ ), ++ "json-stringify-pretty-compact/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/lydell/json-stringify-pretty-compact/refs/tags/v{version}/LICENSE", ++ sha256="d0800a7c9b5f723f7fe029f75d3a9ae44173178b9729d1521e18371ab24ae97a", ++ version="3.0.0", ++ ), ++ # The tslib package is among vega-lite's direct dependencies, and the ++ # yarn.lock file shows three versions could be included: 2.2.0, 2.1.0 ++ # (both MIT-licensed), and 1.1.0 (Apache-2.0-licensed). However, we ++ # found no trace of any of these in the actual vega-lite.js bundle. ++ # ---- ++ # The following packages are part of vega, and are already covered by ++ # vega/LICENSE. ++ # - vega-event-selector: no dependencies ++ # - vega-expression: depends on vega-util, @types/estree (already ++ # covered as one of vega's dependencies) ++ # - vega-util (no dependencies; includes code from hashlru, already ++ # covered as one of vega's dependencies) ++ # ---- ++ # End dependencies for vega-lite, included in vega-lite/vega-lite.js ++ # Begin copied/derived/adapted code in vega-lite, included in vega-lite/vega-lite.js ++ # - hashlru is included in vega-util; already covered as one of vega's dependencies ++ # End copied/derived/adapted code in vega-lite, included in vega-lite/vega-lite.js + "vega-embed/vega-embed.js": Asset( + url="https://cdnjs.cloudflare.com/ajax/libs/vega-embed/{version}/vega-embed.js", + sha256="4e546c1f86eb200333606440e92f76e2940b905757018d9672cd1708e4e6ff0a", +@@ -113,6 +420,78 @@ class Assets: + sha256="32df67148f0fc3db0eb9e263a7b75d07f1eb14c61955005a4a39c6918d10d137", + version="6.20.8", + ), ++ # Begin dependencies for vega-embed, included in vega-embed/vega-embed.js ++ # Versions from https://github.com/vega/vega-embed/blob/v6.20.8/yarn.lock. ++ "fast-json-patch/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/Starcounter-Jack/JSON-Patch/refs/tags/v{version}/LICENSE.txt", ++ sha256="26593d78926902a82eb9bc7e40d1811fc381055f23516b92fe48ca8399bf02df", ++ version="3.1.0", ++ ), ++ # json-stringify-pretty-compact 3.0.0 is already covered as one of ++ # vega's dependencies ++ # ---- ++ # There are four versions of the semver package in yarn.lock (5.7.1, ++ # 6.3.0, 7.0.0, 7.3.5), but it appears that only one copy remains in ++ # the vega-embed.js bundle. The bundle has a compareBuild function, ++ # added in 6.1.0. It does not export a "tokens" list, added in 6.3.0 ++ # and present in 7.0.0, but that is not conclusive because the package ++ # was split into separate source files to improve tree-shaking. By ++ # 7.3.5, the first line of the SemVer class constructor changes to ++ # "options = parseOptions(options)", and this does match what we see in ++ # the bundle, so we conclude that we have semver 7.3.5. In any case, ++ # the ISC license was unchanged across all four versions. ++ "semver/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/npm/node-semver/refs/tags/v{version}/LICENSE", ++ sha256="4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b", ++ version="7.3.5", ++ ), ++ # The tslib package is among vega-embed's direct dependencies, and the ++ # yarn.lock file shows four versions could be included: 2.3.1, 2.1.0, ++ # 1.14.1 (all MIT-licensed), and 1.1.0 (Apache-2.0-licensed). However, ++ # we found no trace of any of these in the actual vega-embed.js bundle. ++ # ---- ++ # The following packages are part of vega, and are already covered by ++ # vega/LICENSE. ++ # - vega-interpreter: no dependencies ++ # ---- ++ # This is not part of https://github.com/vega/vega, as far as we can ++ # tell, so we handle it separately. The repository ++ # https://github.com/vega/schema linked from NPM appears to contain ++ # only JSON schemas, not JavaScript source code, so we use an unpkg URL ++ # to reference the contents of the NPM package instead. ++ "vega-schema-url-parser/LICENSE": Asset( ++ url="https://unpkg.com/vega-schema-url-parser@{version}/LICENSE", ++ sha256="eeb1606fda238f623c36d1eb5e27c33b986a446445340b220c141097424af045", ++ version="2.2.0", ++ ), ++ "vega-themes/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/vega/vega-themes/refs/tags/v{version}/LICENSE", ++ sha256="ceb75fa4fbebbc381c0465442a502ffc13b73f36ccb385a66bcd5f55869e3979", ++ version="2.10.0", ++ ), ++ # Depends on vega-util, which is already covered in vega ++ "vega-tooltip/LICENSE": Asset( ++ url="https://raw.githubusercontent.com/vega/vega-tooltip/refs/tags/v{version}/LICENSE", ++ sha256="93cd20d9cee8c77c080d1a585e3b07644ad2c8e9ccdfc86e350136884d62d935", ++ version="0.28.0", ++ ), ++ # End dependencies for vega-embed, included in vega-embed/vega-embed.js ++ # Begin copied/derived/adapted code in vega-embed, included in vega-embed/vega-embed.js ++ # - hashlru is included in vega-util (via vega-tooltip); already ++ # covered as one of vega's dependencies ++ # - _areEquals() is based on fast-deep-equal; already covered as one of ++ # vega-lite's dependencies ++ # - googlecharts theme in vega-themes carries its own copyright statement, ++ # Copyright 2020 Google LLC. ++ # ++ # Use of this source code is governed by a BSD-style ++ # license that can be found in the LICENSE file or at ++ # https://developers.google.com/open-source/licenses/bsd ++ # No plain-text version of that URL is available, and the license has ++ # the same BSD-3-Clause permission statement as vega-themes itself, ++ # so we consider the combination of vega-themes/LICENSE and the ++ # copyright statement in the source code sufficient. ++ # End copied/derived/adapted code in vega-embed, included in vega-embed/vega-embed.js + "heroicons/LICENSE": Asset( + url="https://raw.githubusercontent.com/tailwindlabs/heroicons/refs/tags/v{version}/LICENSE", + sha256="75523ddd65d9620bea09f84e89d0c373b4205a3708b8a1e9f9598a5438a3e641", +@@ -128,6 +507,27 @@ class Assets: + sha256="f657f99d3fb9647db92628e96007aabb46e5f04f33e49999075aab8e250ca7ce", + version="15.7.2", + ), ++ # Begin dependencies for prop-types, included in prop-types/prop-types.min.js ++ # Versions from https://github.com/facebook/prop-types/blob/v15.7.2/yarn.lock ++ # ---- ++ # The loose-envify package is among prop-types's direct dependencies, ++ # and the yarn.lock file shows two versions could be included: 1.4.0 ++ # and 1.3.1 (both MIT-licensed). However, we found no trace of ++ # loose-envify code in the actual prop-types.min.js bundle, so it ++ # appears this dependency was removed in tree-shaking, along with its ++ # dependency js-tokens (3.0.0 and/or 4.0.0). ++ # ---- ++ # The object-assign package (version 4.1.1) is among prop-types's ++ # direct dependencies, but we found no trace of it in the actual ++ # prop-types.min.js bundle, so it appears this dependency (a polyfill) ++ # was removed in tree-shaking. ++ # ---- ++ # The react-is package (version 16.8.1) is among prop-types's ++ # direct dependencies, but we found no trace of it in the actual ++ # prop-types.min.js bundle, so it appears this dependency was removed ++ # in tree-shaking. ++ # ---- ++ # End dependencies for prop-types, included in prop-types/prop-types.min.js + } + + @classmethod +diff --git a/snakemake/report/html_reporter/data/packages.py b/snakemake/report/html_reporter/data/packages.py +index 963a4c10..2b8e364f 100644 +--- a/snakemake/report/html_reporter/data/packages.py ++++ b/snakemake/report/html_reporter/data/packages.py +@@ -38,14 +38,151 @@ def get_packages(): + source_path="vega/vega.js", + license_path="vega/LICENSE", + ), ++ # Begin dependencies for vega, included in vega/vega.js ++ "d3-array": Package( ++ license_path="d3-array/LICENSE", ++ ), ++ "d3-format": Package( ++ license_path="d3-format/LICENSE", ++ ), ++ "d3-time-format": Package( ++ license_path="d3-time-format/LICENSE", ++ ), ++ "d3-time": Package( ++ license_path="d3-time/LICENSE", ++ ), ++ "d3-interpolate": Package( ++ license_path="d3-interpolate/LICENSE", ++ ), ++ "d3-color": Package( ++ license_path="d3-color/LICENSE", ++ ), ++ "d3-scale": Package( ++ license_path="d3-scale/LICENSE", ++ ), ++ "@types-estree": Package( ++ license_path="@types-estree/LICENSE", ++ ), ++ "d3-force": Package( ++ license_path="d3-force/LICENSE", ++ ), ++ "d3-dispatch": Package( ++ license_path="d3-dispatch/LICENSE", ++ ), ++ "d3-quadtree": Package( ++ license_path="d3-quadtree/LICENSE", ++ ), ++ "d3-timer": Package( ++ license_path="d3-timer/LICENSE", ++ ), ++ "d3-geo": Package( ++ license_path="d3-geo/LICENSE", ++ ), ++ "d3-hierarchy": Package( ++ license_path="d3-hierarchy/LICENSE", ++ ), ++ "d3-dsv": Package( ++ license_path="d3-dsv/LICENSE", ++ ), ++ "topojson-client": Package( ++ license_path="topojson-client/LICENSE", ++ ), ++ "d3-geo-projection": Package( ++ license_path="d3-geo-projection/LICENSE", ++ ), ++ "d3-path": Package( ++ license_path="d3-path/LICENSE", ++ ), ++ "d3-shape": Package( ++ license_path="d3-shape/LICENSE", ++ ), ++ "d3-delaunay": Package( ++ license_path="d3-delaunay/LICENSE", ++ ), ++ "delaunator": Package( ++ license_path="delaunator/LICENSE", ++ ), ++ # End dependencies for vega, included in vega/vega.js ++ # Begin copied/derived/adapted code in vega, included in vega/vega.js ++ "hashlru": Package( ++ license_path="hashlru/LICENSE", ++ ), ++ "d3-regression": Package( ++ license_path="d3-regression/LICENSE", ++ ), ++ "regression": Package( ++ license_path="regression/LICENSE", ++ ), ++ "science": Package( ++ license_path="science/LICENSE", ++ ), ++ "quickselect": Package( ++ license_path="quickselect/LICENSE", ++ ), ++ "commons-math": Package( ++ license_path="commons-math/LICENSE.txt", ++ # This must be included with LICENSE.txt. ++ notice="commons-math/NOTICE.txt", ++ ), ++ "esprima": Package( ++ license_path="esprima/LICENSE.BSD", ++ ), ++ "fabric": Package( ++ license_path="fabric/LICENSE", ++ ), ++ "d3-contour": Package( ++ license_path="d3-contour/LICENSE", ++ ), ++ # End copied/derived/adapted code in vega, included in vega/vega.js + "vega-lite": Package( + source_path="vega-lite/vega-lite.js", + license_path="vega-lite/LICENSE", + ), ++ # Begin dependencies for vega-lite, included in vega-lite/vega-lite.js ++ # (excluding those shared with vega and therefore already documented) ++ "@types-clone": Package( ++ license_path="@types-estree/LICENSE", ++ ), ++ "array-flat-polyfill": Package( ++ license_path="array-flat-polyfill/LICENSE", ++ ), ++ "clone": Package( ++ license_path="clone/LICENSE", ++ ), ++ "fast-deep-equal": Package( ++ license_path="fast-deep-equal/LICENSE", ++ ), ++ "fast-json-stable-stringify": Package( ++ license_path="fast-json-stable-stringify/LICENSE", ++ ), ++ "json-stringify-pretty-compact": Package( ++ license_path="json-stringify-pretty-compact/LICENSE", ++ ), ++ # End dependencies for vega-lite, included in vega-lite/vega-lite.js ++ # Any copied/derived/adapted code in vega-lite is shared with vega. + "vega-embed": Package( + source_path="vega-embed/vega-embed.js", + license_path="vega-embed/LICENSE", + ), ++ # Begin dependencies for vega-embed, included in vega-embed/vega-embed.js ++ # (excluding those shared with vega/vega-lite and therefore already documented) ++ "fast-json-patch": Package( ++ license_path="fast-json-patch/LICENSE", ++ ), ++ "semver": Package( ++ license_path="semver/LICENSE", ++ ), ++ "vega-schema-url-parser": Package( ++ license_path="vega-schema-url-parser/LICENSE", ++ ), ++ "vega-themes": Package( ++ license_path="vega-themes/LICENSE", ++ ), ++ "vega-tooltip": Package( ++ license_path="vega-tooltip/LICENSE", ++ ), ++ # End dependencies for vega-embed, included in vega-embed/vega-embed.js ++ # Any copied/derived/adapted code in vega-embed is shared with vega and/or vega-lite. + "heroicons": Package( + license_path="heroicons/LICENSE", + ), +-- +2.48.1 + diff --git a/README.packit b/README.packit new file mode 100644 index 0000000..94a5d96 --- /dev/null +++ b/README.packit @@ -0,0 +1,3 @@ +This repository is maintained by packit. +https://packit.dev/ +The file was generated using packit 0.100.2.post1.dev4+g31a74ebd. diff --git a/get_assets b/get_assets index c69a1cd..85a81ca 100755 --- a/get_assets +++ b/get_assets @@ -25,7 +25,7 @@ tar -xzf "${TARNAME}" # Capture modification time from the original source archive, before we touch # anything; everything in our asset archive will have this mtime for better # reproducibility. -MTIME="$(stat --format='%Y' "${XDIR}/src/snakemake/assets/")" +MTIME="$(stat --format='%Y' "${XDIR}/snakemake/assets/")" echo "==== Apply patches ====" 1>&2 spectool --list-files "${SPEC}" | @@ -40,14 +40,14 @@ spectool --list-files "${SPEC}" | done echo "==== Download assets ====" 1>&2 -PYTHONPATH="${PWD}/${XDIR}/src/snakemake" python3 <<'EOF' +PYTHONPATH="${PWD}/${XDIR}/snakemake" python3 <<'EOF' from assets import Assets Assets.deploy() EOF echo "==== Modify assets ====" 1>&2 echo "--> Remove array-flat-polyfill (CC0-1.0 code, unused)" 1>&2 -target='src/snakemake/assets/data/vega-lite/vega-lite.js' +target='snakemake/assets/data/vega-lite/vega-lite.js' echo "To be removed from ${target}:" 1>&2 grep -E '^[[:blank:]]*Array\.prototype\.flat[[:blank:]]*\|\|' \ "${XDIR}/${target}" 1>&2 @@ -55,15 +55,15 @@ sed -r -i '/^[[:blank:]]*Array\.prototype\.flat[[:blank:]]*\|\|/d' \ "${XDIR}/${target}" echo '--> Search for vestiges of array-flat-polyfill' 1>&2 if grep -ErinI 'defineProperty\(Array\.prototype,[[:blank:]]*.flat' \ - "${XDIR}/src/snakemake/assets" + "${XDIR}/snakemake/assets" then echo 'MANUAL AUDIT REQUIRED' 1>&2 exit 1 fi # Remove license file and the directory containing it -rm -rv "${XDIR}/src/snakemake/assets/data/array-flat-polyfill" +rm -rv "${XDIR}/snakemake/assets/data/array-flat-polyfill" echo "--> Search for missed CC0-1.0 licenses" 1>&2 -if grep -ErinI '\bCC0\b' "${XDIR}/src/snakemake/assets" +if grep -ErinI '\bCC0\b' "${XDIR}/snakemake/assets" then echo 'MANUAL AUDIT REQUIRED' 1>&2 exit 1 @@ -71,7 +71,7 @@ fi echo "==== Archive assets ====" 1>&2 RESULT="${XDIR}-assets.tar.zst" -ls -ld "${XDIR}/src/snakemake/assets/" +ls -ld "${XDIR}/snakemake/assets/" # https://www.gnu.org/software/tar/manual/html_section/Reproducibility.html TZ=UTC LC_ALL=C tar \ --create \ @@ -82,7 +82,7 @@ TZ=UTC LC_ALL=C tar \ --pax-option='delete=atime,delete=ctime' \ --clamp-mtime --mtime="@${MTIME}" \ --directory="${XDIR}" \ - src/snakemake/assets/data | + snakemake/assets/data | zstdmt --ultra -22 > "${RESULT}" mv -v "${RESULT}" "${DIST_GIT}" diff --git a/snakemake-9.1.1-modified-assets.patch b/snakemake-8.30.0-modified-assets.patch similarity index 69% rename from snakemake-9.1.1-modified-assets.patch rename to snakemake-8.30.0-modified-assets.patch index 6aa4419..8946d82 100644 --- a/snakemake-9.1.1-modified-assets.patch +++ b/snakemake-8.30.0-modified-assets.patch @@ -1,7 +1,7 @@ -diff -Naur snakemake-9.1.1-original/src/snakemake/assets/__init__.py snakemake-9.1.1/src/snakemake/assets/__init__.py ---- snakemake-9.1.1-original/src/snakemake/assets/__init__.py 2025-03-21 14:49:12.112309938 -0400 -+++ snakemake-9.1.1/src/snakemake/assets/__init__.py 2025-03-21 14:49:56.495171724 -0400 -@@ -379,9 +379,12 @@ +diff -Naur snakemake-8.30.0-original/snakemake/assets/__init__.py snakemake-8.30.0/snakemake/assets/__init__.py +--- snakemake-8.30.0-original/snakemake/assets/__init__.py 2025-03-19 10:16:19.899201489 -0400 ++++ snakemake-8.30.0/snakemake/assets/__init__.py 2025-03-19 10:20:34.376310829 -0400 +@@ -349,9 +349,12 @@ version="0.6.2", ), # End copied/derived/adapted code in vega, included in vega/vega.js @@ -15,7 +15,7 @@ diff -Naur snakemake-9.1.1-original/src/snakemake/assets/__init__.py snakemake-9 version="5.2.0", ), "vega-lite/LICENSE": Asset( -@@ -428,13 +431,6 @@ +@@ -366,13 +369,6 @@ sha256="c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383", version="2.1.1", ), @@ -29,12 +29,12 @@ diff -Naur snakemake-9.1.1-original/src/snakemake/assets/__init__.py snakemake-9 "clone/LICENSE": Asset( url="https://raw.githubusercontent.com/pvorb/clone/refs/tags/v{version}/LICENSE", sha256="3fb0857ef0133928cf72c88dfc464e931486e88778961eedec25585e2321507f", -diff -Naur snakemake-9.1.1-original/src/snakemake/report/html_reporter/data/packages.py snakemake-9.1.1/src/snakemake/report/html_reporter/data/packages.py ---- snakemake-9.1.1-original/src/snakemake/report/html_reporter/data/packages.py 2025-03-21 14:49:08.721489278 -0400 -+++ snakemake-9.1.1/src/snakemake/report/html_reporter/data/packages.py 2025-03-21 14:49:56.496478714 -0400 +diff -Naur snakemake-8.30.0-original/snakemake/report/html_reporter/data/packages.py snakemake-8.30.0/snakemake/report/html_reporter/data/packages.py +--- snakemake-8.30.0-original/snakemake/report/html_reporter/data/packages.py 2025-03-19 10:16:19.900335558 -0400 ++++ snakemake-8.30.0/snakemake/report/html_reporter/data/packages.py 2025-03-19 10:16:47.850551627 -0400 @@ -143,9 +143,6 @@ "@types-clone": Package( - license_path="@types-clone/LICENSE", + license_path="@types-estree/LICENSE", ), - "array-flat-polyfill": Package( - license_path="array-flat-polyfill/LICENSE", diff --git a/snakemake.rpmlintrc b/snakemake.rpmlintrc index b0e2093..4a4b850 100644 --- a/snakemake.rpmlintrc +++ b/snakemake.rpmlintrc @@ -1,12 +1,17 @@ # It is normal that extras metapackages should not have documentation, or any # files at all. addFilter(r"\+\w+.noarch: W: no-documentation") -# Removed in Snakemake 9.6 with no equivalent replacement. -addFilter(r" obsolete-not-provided snakemake\+(messaging)$") +# These extras were removed with Snakemake 8.0 and have no equivalent +# replacements. +addFilter(r" obsolete-not-provided snakemake\+(azure|google-cloud)$") # The -doc subpackage was removed and has no equivalent replacement. addFilter(r" obsolete-not-provided snakemake-doc$") +# Not a spelling error +addFilter(r"spelling-error \('([Mm]etapackage)s?',") +# Some small files may incidentally have duplicate contents. Because they are +# small in size and few in number, it is not worth the spec-file complexity to +# hardlink them (which would itself trigger an rpmlint warning about +# cross-directory hardlinking). +addFilter(r"files-duplicate .*/snakemake/.*/remote/[^/]+\.py") # This is, unfortunately, intentional. See the comments in the spec file. addFilter(r" python-leftover-require python-unversioned-command$") -# The assets bundle needs to be generated with a script, so it has no URL (and -# .tar.zst is perfectly legitimate). -addFilter(r" (invalid-url|inconsistent-file-extension).* snakemake-.*-assets\.tar\.zst") diff --git a/snakemake.spec b/snakemake.spec index 6bb8fdb..a2dd730 100644 --- a/snakemake.spec +++ b/snakemake.spec @@ -1,10 +1,7 @@ # Work around a series of circular test dependencies: # -# ⬐─python-snakemake-logger-plugin-rich🠔────╮ -# python-snakemake-interface-logger-plugins─╯ -# │↑python-snakemake-interface-scheduler-plugins -# │││↑ python-snakemake-interface-report-plugins -# ↓│↓│ ↓↑ ⬐───╮ +# python-snakemake-interface-report-plugins +# ↓↑ ⬐───╮ # snakemake → python-snakemake-interface-executor-plugins⬎ # ↑↑↑ │ ⬑────────────────────python-snakemake-executor-plugin-cluster-generic # │││ ↳python-snakemake-interface-storage-plugins─────────────────╮ @@ -15,26 +12,17 @@ # # A good build order is: # -# 1. BOOTSTRAP: -# python-snakemake-interface-common -# 2. BOOTSTRAP: -# python-snakemake-interface-executor-plugins -# python-snakemake-interface-logger-plugins +# 1. BOOTSTRAP: python-snakemake-interface-executor-plugins, +# python-snakemake-interface-storage-plugins, # python-snakemake-interface-report-plugins -# python-snakemake-interface-scheduler-plugins -# python-snakemake-interface-storage-plugins -# 3. BOOTSTRAP: snakemake -# 4. python-snakemake-executor-plugin-cluster-generic -# python-snakemake-logger-plugin-rich +# 2. BOOTSTRAP: snakemake +# 3. python-snakemake-executor-plugin-cluster-generic, +# python-snakemake-storage-plugin-http, +# python-snakemake-storage-plugin-s3, # python-snakemake-storage-plugin-fs -# python-snakemake-storage-plugin-http -# python-snakemake-storage-plugin-s3 -# 5. snakemake -# python-snakemake-interface-executor-plugins -# python-snakemake-interface-logger-plugins +# 4. snakemake, python-snakemake-interface-executor-plugins, +# python-snakemake-interface-storage-plugins, # python-snakemake-interface-report-plugins -# python-snakemake-interface-scheduler-plugins -# python-snakemake-interface-storage-plugins %bcond bootstrap 0 %bcond tests %{without bootstrap} # Run tests that require network access? This only makes sense for local mock @@ -43,35 +31,47 @@ # Almost all of the conda tests require network access, but there are also # other failures that are not straightforward to understand. %bcond conda_tests 0 -%bcond gcs_tests 1 + +%global _description %{expand: +The Snakemake workflow management system is a tool to create reproducible and +scalable data analyses. Workflows are described via a human readable, Python +based language. They can be seamlessly scaled to server, cluster, grid and +cloud environments, without the need to modify the workflow definition. +Finally, Snakemake workflows can entail a description of required software, +which will be automatically deployed to any execution environment.} Name: snakemake -Version: 9.14.6 -%global srcversion %(echo '%{version}' | cut -d '^' -f 1) +Version: 8.30.0 Release: %autorelease Summary: Workflow management system to create reproducible and scalable data analyses -# The primary license for Snakemake is MIT; web assets contribute a variety of -# other licenses. +# The primary license for Snakemake is MIT; versioneer contributes Unlicense, +# and web assets contribute a variety of other licenses. # # Apache-2.0 AND BSD-2-Clause AND BSD-3-CLause AND ISC AND MIT AND MIT-0: -# - src/snakemake/assets/data/vega/vega.js +# - snakemake/assets/data/vega/vega.js # # BSD-3-Clause AND MIT: -# - src/snakemake/assets/data/vega-lite/vega-lite.js +# - snakemake/assets/data/vega-lite/vega-lite.js # # BSD-3-Clause AND ISC AND MIT: -# - src/snakemake/assets/data/vega-embed/vega-embed.js +# - snakemake/assets/data/vega-embed/vega-embed.js # # MIT: # - All Snakemake code unless otherwise noted # - heroicons: It is unclear if anything derived from heroicons is actually # present in the package, but upstream carries a copy of its license file, so # we mention the possibility. -# - src/snakemake/assets/data/prop-types/prop-types.min.js -# - src/snakemake/assets/data/tailwindcss/tailwind.css +# - snakemake/assets/data/prop-types/prop-types.min.js +# - snakemake/assets/data/tailwindcss/tailwind.css # -# == License breakdown: src/snakemake/assets/data/vega/vega.js == +# Unlicense: +# - versioneer.py +# - snakemake/_version.py (which says “This file is released into the public +# domain,” but the comments in versioneer.py make it clear that Unlicense is +# intended for the generated files as well) +# +# == License breakdown for snakemake/assets/data/vega/vega.js == # # The primary license for npm(vega) is BSD-3-Clause. The bundle contains: # @@ -101,7 +101,7 @@ Summary: Workflow management system to create reproducible and scalable d # MIT-0: # - npm(fabric), bundled as a copied, derived, or adapted snippet # -# == License breakdown: src/snakemake/assets/data/vega-lite/vega-lite.js == +# == License breakdown for snakemake/assets/data/vega-lite/vega-lite.js == # # The primary license for npm(vega-lite) is BSD-3-Clause. The bundle contains: # @@ -116,7 +116,7 @@ Summary: Workflow management system to create reproducible and scalable d # - npm(hashlru), bundled as a copied, derived, or adapted snippet # - npm(json-stringify-pretty-compact) # -# == License breakdown: src/snakemake/assets/data/vega-embed/vega-embed.js == +# == License breakdown for snakemake/assets/data/vega-embed/vega-embed.js == # # The primary license for npm(vega-embed) is BSD-3-Clause. The bundle contains: # @@ -133,7 +133,8 @@ License: %{shrink: BSD-3-Clause AND ISC AND MIT AND - MIT-0 + MIT-0 AND + Unlicense } URL: https://snakemake.readthedocs.io/en/stable/index.html %global forgeurl https://github.com/snakemake/snakemake @@ -151,6 +152,17 @@ Source0: %{forgeurl}/archive/v%{version}/snakemake-%{version}.tar.gz Source1: snakemake-%{version}-assets.tar.zst Source2: get_assets +# Upstream upper-bounded the version of setuptools to work around a hash +# mismatch in setuptools 76 on PyPI observed on March 9, 2025. The system +# setuptools is fine. The upper-bound was removed in a later release. Here we +# revert it as a downstream-only patch. +Patch: 0001-Revert-chore-work-around-setuptools-76-hash-mismatch.patch + +# chore: Add license texts for things bundled in the assets +# https://github.com/snakemake/snakemake/pull/3099 +# Rebased on v8.30.0 +Patch: 0001-chore-Add-license-texts-for-things-bundled-in-the-as.patch + # Downstream-only: adjust the asset metadata in the sources, including # checksums, for any adjustments that happened in the get_assets script. # @@ -158,19 +170,12 @@ Source2: get_assets # download assets, it skips this patch, because we need to first fetch the # original assets in order to then modify them. The signal for this behavior is # the substring "modified-assets" in the patch name. -Patch: snakemake-9.1.1-modified-assets.patch - -BuildSystem: pyproject -# Generate BR’s for all supported extras to ensure they do not FTI -BuildOption(generate_buildrequires): -x reports -BuildOption(install): -l snakemake -BuildOption(check): %{shrink: - -e '*.tests*' - %{?!with_gcs_tests:-e 'snakemake.executors.google_lifesciences_helper'} - } +Patch: snakemake-8.30.0-modified-assets.patch BuildArch: noarch +BuildRequires: python3-devel + BuildRequires: help2man # Snakemake uses (unversioned) "python" as the default remote execution @@ -203,18 +208,18 @@ Provides: vim-snakemake = %{version}-%{release} # of a Pygments license file), but the styles come from the system # python3-pygments package and are not actually bundled in this package. -# tailwind.css 3.4.16 is src/snakemake/assets/data/tailwindcss/tailwind.css, -# but we do not normally treat CSS frameworks as bundled dependencies, and it -# is not clear how we should name a virtusl Provides if we added one. +# tailwind.css 3.4.16 is snakemake/assets/data/tailwindcss/tailwind.css, but we +# do not normally treat CSS frameworks as bundled dependencies, and it is not +# clear how we should name a virtusl Provides if we added one. -# src/snakemake/assets/data/react/react.production.min.js +# snakemake/assets/data/react/react.production.min.js Provides: bundled(npm(react)) = 18.2.0 -# src/snakemake/assets/data/react/react-dom.production.min.js +# snakemake/assets/data/react/react-dom.production.min.js Provides: bundled(npm(react-dom)) = 18.2.0 -# src/snakemake/assets/data/vega/vega.js +# snakemake/assets/data/vega/vega.js Provides: bundled(npm(vega)) = 5.21.0 -# Bundled in src/snakemake/assets/data/vega/vega.js as dependencies: +# Bundled in snakemake/assets/data/vega/vega.js as dependencies: # For versions of vega-* packages, see: # https://github.com/vega/vega/blob/v5.21.0/packages Provides: bundled(npm(vega-crossfilter)) = 4.0.5 @@ -244,7 +249,7 @@ Provides: bundled(npm(vega-view)) = 5.10.1 Provides: bundled(npm(vega-view-transforms)) = 4.5.8 Provides: bundled(npm(vega-voronoi)) = 4.1.5 Provides: bundled(npm(vega-wordcloud)) = 4.1.3 -# For these, see notes in src/snakemake/assets/__init__.py. +# For these, see notes in snakemake/assets/__init__.py. Provides: bundled(npm(@types/estree)) = 0.0.50 Provides: bundled(npm(d3-array)) = 2.12.1 Provides: bundled(npm(d3-color)) = 2.0.0 @@ -266,8 +271,8 @@ Provides: bundled(npm(d3-time-format)) = 3.0.0 Provides: bundled(npm(d3-timer)) = 2.0.0 Provides: bundled(npm(delaunator)) = 4.0.1 Provides: bundled(npm(topojson-client)) = 3.1.0 -# Present in src/snakemake/assets/data/vega/vega.js in the form of copied, -# derived, or adapted snippets. See notes in src/snakemake/assets/__init__.py. +# Present in snakemake/assets/data/vega/vega.js in the form of copied, derived, +# or adapted snippets. See notes in snakemake/assets/__init__.py. # Implementation of erfinv is based on: Provides: bundled(apache-commons-math) = 3.6.1 # Expression parser is based on: @@ -281,21 +286,21 @@ Provides: bundled(npm(regression)) = 2.0.1 Provides: bundled(npm(science)) = 1.9.3 Provides: bundled(npm(shapefile)) = 0.6.2 -# src/snakemake/assets/data/vega-lite/vega-lite.js +# snakemake/assets/data/vega-lite/vega-lite.js Provides: bundled(npm(vega-lite)) = 5.2.0 # NOTE: Some of the following virtual Provides are commented out. These are # correct, and need to be considered when determining the license of # vega-lite.js, but they do not need to be repeated in the spec file because # they duplicate virtual Provides from vega.js. # -# Bundled in src/snakemake/assets/data/vega-lite/vega-lite.js as dependencies: -# See notes in src/snakemake/assets/__init__.py. +# Bundled in snakemake/assets/data/vega-lite/vega-lite.js as dependencies: +# See notes in snakemake/assets/__init__.py. Provides: bundled(npm(@types/clone)) = 2.1.1 Provides: bundled(npm(clone)) = 2.1.2 Provides: bundled(npm(fast-deep-equal)) = 3.1.3 Provides: bundled(npm(fast-json-stable-stringify)) = 2.1.0 Provides: bundled(npm(json-stringify-pretty-compact)) = 3.0.0 -# See notes in src/snakemake/assets/__init__.py, as well as dependencies in +# See notes in snakemake/assets/__init__.py, as well as dependencies in # https://github.com/vega/vega-lite/blob/v5.2.0/package.json, and for versions, # see https://github.com/vega/vega-lite/blob/v5.2.0/yarn.lock; these correspond # to those associated with vega 5.2.1. @@ -303,25 +308,24 @@ Provides: bundled(npm(json-stringify-pretty-compact)) = 3.0.0 #Provides: bundled(npm(vega-event-selector)) = 3.0.0 #Provides: bundled(npm(vega-expression)) = 5.0.0 #Provides: bundled(npm(vega-util)) = 1.17.0 -# Present in src/snakemake/assets/data/vega-lite/vega-lite.js in the form of +# Present in snakemake/assets/data/vega-lite/vega-lite.js in the form of # copied, derived, or adapted snippets. See notes in -# src/snakemake/assets/__init__.py. +# snakemake/assets/__init__.py. #Provides: bundled(npm(hashlru)) = 1.0.4 -# src/snakemake/assets/data/vega-embed/vega-embed.js +# snakemake/assets/data/vega-embed/vega-embed.js Provides: bundled(npm(vega-embed)) = 6.20.8 # NOTE: Some of the following virtual Provides are commented out. These are # correct, and need to be considered when determining the license of # vega-embed.js, but they do not need to be repeated in the spec file because # they duplicate virtual Provides from vega.js and/or vega-lite.js. # -# Bundled in src/snakemake/assets/data/vega-embed/vega-embed.js as -# dependencies: -# See notes in src/snakemake/assets/__init__.py. +# Bundled in snakemake/assets/data/vega-embed/vega-embed.js as dependencies: +# See notes in snakemake/assets/__init__.py. Provides: bundled(npm(fast-json-patch)) = 3.1.0 #Provides: bundled(npm(json-stringify-pretty-compact)) = 3.0.0 Provides: bundled(npm(semver)) = 7.3.5 -# See notes in src/snakemake/assets/__init__.py, as well as dependencies in +# See notes in snakemake/assets/__init__.py, as well as dependencies in # https://github.com/vega/vega-embed/blob/v6.20.8/package.json, and for # versions, see https://github.com/vega/vega-embed/blob/v6.20.8/yarn.lock; # these correspond to those associated with vega 5.2.1. @@ -330,9 +334,9 @@ Provides: bundled(npm(vega-schema-url-parser)) = 2.2.0 Provides: bundled(npm(vega-themes)) = 2.10.0 Provides: bundled(npm(vega-tooltip)) = 0.28.0 #Provides: bundled(npm(vega-util)) = 1.17.0 -# Present in src/snakemake/assets/data/vega-embed/vega-embed.js in the form of +# Present in snakemake/assets/data/vega-embed/vega-embed.js in the form of # copied, derived, or adapted snippets. See notes in -# src/snakemake/assets/__init__.py. +# snakemake/assets/__init__.py. #Provides: bundled(npm(hashlru)) = 1.0.4 # _areEquals() is based on: #Provides: bundled(npm(fast-deep-equal)) = 3.1.3 @@ -342,23 +346,23 @@ Provides: bundled(npm(vega-tooltip)) = 0.28.0 # the virtual Provides, just in case we have missed something. Provides: bundled(npm(heroicons)) = 1.0.3 -# src/snakemake/assets/data/prop-types/prop-types.min.js +# snakemake/assets/data/prop-types/prop-types.min.js Provides: bundled(npm(prop-types)) = 15.7.2 +# These extras were removed upstream in Snakemake 8.0.0. Retain the Obsoletes +# until F40 reaches EOL so we have a clean upgrade path. +Obsoletes: snakemake+azure < 8.1.0-1 +Obsoletes: snakemake+google-cloud < 8.1.0-1 # We no longer build Sphinx-generated PDF documentation. Beginning with 8.2.3, # this would require patching out sphinxawesome-theme from docs/conf.py. It’s # possible but tedious. Obsoletes: snakemake-doc < 8.2.1-2 -# Removed in 9.6.0; keep the Obsoletes through Fedora 45. -Obsoletes: snakemake+messaging < 9.6.1-1 %if %{with tests} # For several tests (either apptainer or singularity-ce should work): BuildRequires: (apptainer or singularity-ce) %if %{with conda_tests} -# We need this for test_jupyter_notebook*, even if we are not running tests -# that have conda in their names. When the conda_tests bcond is enabled, this -# is also needed for tests/tests_using_conda.py. +# For tests/tests_using_conda.py BuildRequires: conda # For test_conda_pin_file, test_conda_named, test_conda_function BuildRequires: ripgrep @@ -387,18 +391,8 @@ BuildRequires: %{py3_dist snakemake-storage-plugin-s3} %endif # For import-testing snakemake.gui BuildRequires: %{py3_dist flask} -%if %{with gcs_tests} # For import-testing snakemake.executors.google_lifesciences_helper: BuildRequires: %{py3_dist google-cloud-storage} -%endif - -%global _description %{expand: -The Snakemake workflow management system is a tool to create reproducible and -scalable data analyses. Workflows are described via a human readable, Python -based language. They can be seamlessly scaled to server, cluster, grid and -cloud environments, without the need to modify the workflow definition. -Finally, Snakemake workflows can entail a description of required software, -which will be automatically deployed to any execution environment.} %description %_description @@ -406,14 +400,20 @@ which will be automatically deployed to any execution environment.} # No metapackage for “pep” extra because the following are not packaged: # - python3-eido # - python3-peppy -# Therefore, also no metapakge for “all” extra -%pyproject_extras_subpkg -n snakemake reports +%pyproject_extras_subpkg -n snakemake reports messaging %prep %autosetup -n snakemake-%{version} -p1 %setup -q -T -D -a 1 -c -n snakemake-%{version} +%py3_shebang_fix . +# Remove shebangs from non-executable scripts. The Python script is executable +# in the source tree but will be installed without executable permissions. +sed -r -i '1{/^#!/d}' \ + snakemake/executors/jobscript.sh \ + snakemake/executors/google_lifesciences_helper.py + # Copy and rename nano and vim extensions readmes for use in the main # documentation directory. for editor in nano vim @@ -422,41 +422,36 @@ do done # The CDN URL for tailwind.css does not deliver a file with a stable checksum, -# so upstream has not recorded a checksum in src/snakemake/assets/__init__.py. -# A consequence of this is that setup.py will *always* re-download -# tailwind.css, even if it is already present, when building an sdist or -# bdist/wheel. Of course, this is not acceptable in an offline build, so we -# record the actual checksum of the tailwind.css file we are packaging. -cat >> src/snakemake/assets/__init__.py <> snakemake/assets/__init__.py <