diff --git a/.gitignore b/.gitignore index 8624a3d..7635a3f 100644 --- a/.gitignore +++ b/.gitignore @@ -29,113 +29,3 @@ /snakemake-7.32.2.tar.gz /snakemake-7.32.3.tar.gz /snakemake-7.32.4.tar.gz -/snakemake-8.1.2.tar.gz -/snakemake-8.2.1.tar.gz -/snakemake-8.2.3.tar.gz -/snakemake-8.4.3.tar.gz -/snakemake-8.4.4.tar.gz -/snakemake-8.4.6.tar.gz -/snakemake-8.4.7.tar.gz -/snakemake-8.4.8.tar.gz -/snakemake-8.4.9.tar.gz -/snakemake-8.4.12.tar.gz -/snakemake-8.5.2.tar.gz -/snakemake-8.5.3.tar.gz -/snakemake-8.5.4.tar.gz -/snakemake-8.5.5.tar.gz -/snakemake-8.6.0.tar.gz -/snakemake-8.7.0.tar.gz -/snakemake-8.8.0.tar.gz -/snakemake-8.9.0.tar.gz -/snakemake-8.10.4.tar.gz -/snakemake-8.10.6.tar.gz -/snakemake-8.10.7.tar.gz -/snakemake-8.10.8.tar.gz -/snakemake-8.11.0.tar.gz -/snakemake-8.11.1.tar.gz -/snakemake-8.11.3.tar.gz -/snakemake-8.11.6.tar.gz -/snakemake-8.12.0.tar.gz -/snakemake-8.13.0.tar.gz -/snakemake-8.14.0.tar.gz -/snakemake-8.15.2.tar.gz -/snakemake-8.16.0.tar.gz -/snakemake-8.17.0.tar.gz -/snakemake-8.18.0.tar.gz -/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/README.packit b/README.packit new file mode 100644 index 0000000..786c2a0 --- /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.80.0.post8+gf2b5fcbc. diff --git a/get_assets b/get_assets deleted file mode 100755 index c69a1cd..0000000 --- a/get_assets +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/sh -set -o nounset -set -o errexit - -DIST_GIT="$(cd "$(dirname "$0")"; pwd)" -SPEC="${DIST_GIT}/snakemake.spec" - -WORKDIR="$(mktemp -d)" -trap "rm -rf '${WORKDIR}'" INT TERM EXIT -cd "${WORKDIR}" -# Make sure we have an absolute path to the working directory. -WORKDIR="${PWD}" - -echo "==== Download source archive ====" 1>&2 -SOURCE0="$( - spectool --list-files "${SPEC}" | - awk '$1 == "Source0:" { print $2 }' -)" -TARNAME="$(basename "${SOURCE0}")" -XDIR="$(basename "${TARNAME}" '.tar.gz')" -spectool --get-files "${SPEC}" - -echo "==== Extract source archive ====" 1>&2 -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/")" - -echo "==== Apply patches ====" 1>&2 -spectool --list-files "${SPEC}" | - awk '/^Patch/ && !/modified-assets/ { print $2 }' | - while read -r patchfile - do - set -o nounset - set -o errexit - echo "--> ${patchfile}" 1>&2 - cd "${WORKDIR}/${XDIR}" - patch -p1 < "${DIST_GIT}/$(basename "${patchfile}")" - done - -echo "==== Download assets ====" 1>&2 -PYTHONPATH="${PWD}/${XDIR}/src/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' -echo "To be removed from ${target}:" 1>&2 -grep -E '^[[:blank:]]*Array\.prototype\.flat[[:blank:]]*\|\|' \ - "${XDIR}/${target}" 1>&2 -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" -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" -echo "--> Search for missed CC0-1.0 licenses" 1>&2 -if grep -ErinI '\bCC0\b' "${XDIR}/src/snakemake/assets" -then - echo 'MANUAL AUDIT REQUIRED' 1>&2 - exit 1 -fi - -echo "==== Archive assets ====" 1>&2 -RESULT="${XDIR}-assets.tar.zst" -ls -ld "${XDIR}/src/snakemake/assets/" -# https://www.gnu.org/software/tar/manual/html_section/Reproducibility.html -TZ=UTC LC_ALL=C tar \ - --create \ - --sort=name \ - --format=posix \ - --numeric-owner --owner=0 --group=0 \ - --mode=go+u,go-w \ - --pax-option='delete=atime,delete=ctime' \ - --clamp-mtime --mtime="@${MTIME}" \ - --directory="${XDIR}" \ - src/snakemake/assets/data | - zstdmt --ultra -22 > "${RESULT}" - -mv -v "${RESULT}" "${DIST_GIT}" diff --git a/snakemake-7.11.0-docs-no-animated-demo.patch b/snakemake-7.11.0-docs-no-animated-demo.patch new file mode 100644 index 0000000..cef4e57 --- /dev/null +++ b/snakemake-7.11.0-docs-no-animated-demo.patch @@ -0,0 +1,16 @@ +diff -Naur snakemake-7.11.0-original/docs/snakefiles/rules.rst snakemake-7.11.0/docs/snakefiles/rules.rst +--- snakemake-7.11.0-original/docs/snakefiles/rules.rst 2022-07-27 10:01:28.000000000 -0400 ++++ snakemake-7.11.0/docs/snakefiles/rules.rst 2022-07-27 11:54:32.457308100 -0400 +@@ -970,12 +970,6 @@ + snakemake --cluster ... --jobs 100 --until test.txt + + Then, the notebook rule can easily be executed locally. +-An demo of the entire interactive editing process can be found by clicking below: +- +-.. image:: images/snakemake-notebook-demo.gif +- :scale: 20% +- :alt: Notebook integration demo +- :align: center + + Finally, it is advisable to combine the ``notebook`` directive with the ``conda`` directive (see :ref:`integrated_package_management`) in order to define a software stack to use. + At least, this software stack should contain jupyter and the language to use (e.g. Python or R). diff --git a/snakemake-7.32.4-pulp-2.8.patch b/snakemake-7.32.4-pulp-2.8.patch new file mode 100644 index 0000000..f26dd34 --- /dev/null +++ b/snakemake-7.32.4-pulp-2.8.patch @@ -0,0 +1,12 @@ +diff -Naur snakemake-7.32.4-original/snakemake/__init__.py snakemake-7.32.4/snakemake/__init__.py +--- snakemake-7.32.4-original/snakemake/__init__.py 2023-09-18 10:42:36.000000000 -0400 ++++ snakemake-7.32.4/snakemake/__init__.py 2024-07-16 10:12:09.542270257 -0400 +@@ -1604,7 +1604,7 @@ + try: + import pulp + +- lp_solvers = pulp.list_solvers(onlyAvailable=True) ++ lp_solvers = pulp.listSolvers(onlyAvailable=True) + except ImportError: + # Dummy list for the case that pulp is not available + # This only happened when building docs. diff --git a/snakemake-9.1.1-modified-assets.patch b/snakemake-9.1.1-modified-assets.patch deleted file mode 100644 index 6aa4419..0000000 --- a/snakemake-9.1.1-modified-assets.patch +++ /dev/null @@ -1,44 +0,0 @@ -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 @@ - version="0.6.2", - ), - # End copied/derived/adapted code in vega, included in vega/vega.js -+ # Fedora patch: We have removed array-flat-polyfill from the bundle -+ # since its CC0-1.0 code is not-allowed for code; the checksum of the -+ # packaged bundle therefore differs from that of the published one. - "vega-lite/vega-lite.js": Asset( - url="https://cdnjs.cloudflare.com/ajax/libs/vega-lite/{version}/vega-lite.js", -- sha256="6eb7f93121cd9f44cf8640244f87c5e143f87c7a0b6cd113da4a9e41e3adf0aa", -+ sha256="5b9880c2bf7c1daac912ca1e80b384daf2e7dedc3c6b62bc5159ed86d3c51c7b", - version="5.2.0", - ), - "vega-lite/LICENSE": Asset( -@@ -428,13 +431,6 @@ - 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", -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 -@@ -143,9 +143,6 @@ - "@types-clone": Package( - license_path="@types-clone/LICENSE", - ), -- "array-flat-polyfill": Package( -- license_path="array-flat-polyfill/LICENSE", -- ), - "clone": Package( - license_path="clone/LICENSE", - ), diff --git a/snakemake.rpmlintrc b/snakemake.rpmlintrc deleted file mode 100644 index b0e2093..0000000 --- a/snakemake.rpmlintrc +++ /dev/null @@ -1,12 +0,0 @@ -# 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)$") -# The -doc subpackage was removed and has no equivalent replacement. -addFilter(r" obsolete-not-provided snakemake-doc$") -# 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..baadeeb 100644 --- a/snakemake.spec +++ b/snakemake.spec @@ -1,396 +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 -# ๏ฟฌโ”‚๏ฟฌโ”‚ ๏ฟฌ๏ฟช โฌโ”€โ”€โ”€โ•ฎ -# snakemake โ†’ python-snakemake-interface-executor-pluginsโฌŽ -# ๏ฟช๏ฟช๏ฟช โ”‚ โฌ‘โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€python-snakemake-executor-plugin-cluster-generic -# โ”‚โ”‚โ”‚ โ†ณpython-snakemake-interface-storage-pluginsโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ -# โ”‚โ”‚โ”‚ ๏ฟฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ”‚ -# โ”‚โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€python-snakemake-storage-plugin-httpโ”‚โ”‚ -# โ”‚โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€python-snakemake-storage-plugin-s3๐Ÿ ”โ”€โ•ฏโ”‚ -# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€python-snakemake-storage-plugin-fs๐Ÿ ”โ”€โ”€โ•ฏ -# -# A good build order is: -# -# 1. BOOTSTRAP: -# python-snakemake-interface-common -# 2. BOOTSTRAP: -# python-snakemake-interface-executor-plugins -# python-snakemake-interface-logger-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 -# 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 -# 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 -# builds in combination with --enable-network. -%bcond network_tests 0 -# 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 - -Name: snakemake -Version: 9.14.6 -%global srcversion %(echo '%{version}' | cut -d '^' -f 1) -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. -# -# 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 -# -# BSD-3-Clause AND MIT: -# - src/snakemake/assets/data/vega-lite/vega-lite.js -# -# BSD-3-Clause AND ISC AND MIT: -# - src/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 -# -# == License breakdown: src/snakemake/assets/data/vega/vega.js == -# -# The primary license for npm(vega) is BSD-3-Clause. The bundle contains: -# -# Apache-2.0: -# - apache-commons-math, from which an implementation of erfinv is derived -# BSD-2-Clause: -# - npm(esprima), bundled as a copied, derived, or adapted snippet -# BSD-3-Clause: -# - npm(vega) and various npm(vega-*) libraries -# - npm(d3-contour), bundled as a copied, derived, or adapted snippet -# - npm(d3-regression), bundled as a copied, derived, or adapted snippet -# - npm(science), bundled as a copied, derived, or adapted snippet -# - npm(shapefile), bundled as a copied, derived, or adapted snippet -# ISC: -# - various npm(d3-*) libraries -# - npm(delaunator) -# - npm(quickselect) -# - npm(topojson-client) -# ISC AND MIT: -# - npm(d3-geo) (MIT is due to some code being derived from GeographicLib) -# - npm(d3-geo-projection) (MIT is due to some code being derived from -# https://github.com/scijs/integrate-adaptive-simpson) -# MIT: -# - npm(@types/estree) -# - npm(hashlru), bundled as a copied, derived, or adapted snippet -# - npm(regression), bundled as a copied, derived, or adapted snippet -# MIT-0: -# - npm(fabric), bundled as a copied, derived, or adapted snippet -# -# == License breakdown: src/snakemake/assets/data/vega-lite/vega-lite.js == -# -# The primary license for npm(vega-lite) is BSD-3-Clause. The bundle contains: -# -# BSD-3-Clause: -# - npm(vega-lite) and various npm(vega-*) libraries -# MIT: -# - npm(@types/clone) -# - npm(@types/estree) -# - npm(clone) -# - npm(fast-deep-equal) -# - npm(fast-json-stable-stringify) -# - 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 == -# -# The primary license for npm(vega-embed) is BSD-3-Clause. The bundle contains: -# -# BSD-3-Clause: -# - npm(vega-embed) and various npm(vega-*) libraries -# ISC: -# - npm(semver) -# MIT: -# - npm(fast-json-patch) -# - npm(json-stringify-pretty-compact) -License: %{shrink: - Apache-2.0 AND - BSD-2-Clause AND - BSD-3-Clause AND - ISC AND - MIT AND - MIT-0 - } -URL: https://snakemake.readthedocs.io/en/stable/index.html -%global forgeurl https://github.com/snakemake/snakemake -# We could use the PyPI sdist, which already contains the HTML report assets, -# but we would lose at least the vim extensions and changelog, and we would -# have to nontrivially modify the sdist to remove a CC0-1.0-licensed polyfill -# before uploading it to the lookaside cache, so doing so would not be -# meaningfully easier than using the GitHub archive with an additional source -# for the assets. -Source0: %{forgeurl}/archive/v%{version}/snakemake-%{version}.tar.gz -# The assets for HTML reports are normally downloaded in setup.py when creating -# the sdist. We use a script, Source2, executed with no arguments (implicitly -# relying on the spec file in the same directory) to download the assets, -# modify them as necessary, and pack them into an additional source archive. -Source1: snakemake-%{version}-assets.tar.zst -Source2: get_assets - -# Downstream-only: adjust the asset metadata in the sources, including -# checksums, for any adjustments that happened in the get_assets script. -# -# When the get_assets script unpacks and patches Source0 in order to use it to -# 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'} - } - -BuildArch: noarch - -BuildRequires: help2man - -# Snakemake uses (unversioned) "python" as the default remote execution -# command. Because remote hosts could be Windows machines, and those are likely -# to lack "python3.exe" (see https://github.com/python/cpython/issues/99185), -# we didnโ€™t try to convince upstream to change this. Instead, we (reluctantly) -# just make sure that our own Snakemake installations are compatible by -# depending on python-unversioned-command. -BuildRequires: python-unversioned-command -Requires: python-unversioned-command - -BuildRequires: vim-filesystem -Requires: vim-filesystem - -# Required for snakemake.script.RScript, snakemake.notebook.RJupyterNotebook -# (Some of the tests in tests/tests_using_conda.py require this.) -BuildRequires: R-core -Recommends: R-core - -Provides: vim-snakemake = %{version}-%{release} - -# Regarding pre-compiled/pre-minified JavaScript, see: -# - https://pagure.io/fesco/issue/3177 -# - https://pagure.io/packaging-committee/pull-request/1370 -# Regarding CSS, see: -# - https://pagure.io/fesco/issue/3269 -# - https://pagure.io/packaging-committee/pull-request/1402 - -# Styles from Pygments are bundled in generated HTML reports (thus the presence -# 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. - -# src/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 -Provides: bundled(npm(react-dom)) = 18.2.0 - -# src/snakemake/assets/data/vega/vega.js -Provides: bundled(npm(vega)) = 5.21.0 -# Bundled in src/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 -Provides: bundled(npm(vega-dataflow)) = 5.7.4 -Provides: bundled(npm(vega-encode)) = 4.8.3 -Provides: bundled(npm(vega-event-selector)) = 3.0.0 -Provides: bundled(npm(vega-expression)) = 5.0.0 -Provides: bundled(npm(vega-force)) = 4.0.7 -Provides: bundled(npm(vega-format)) = 1.0.4 -Provides: bundled(npm(vega-functions)) = 5.12.1 -Provides: bundled(npm(vega-geo)) = 4.3.8 -Provides: bundled(npm(vega-hierarchy)) = 4.0.9 -Provides: bundled(npm(vega-label)) = 1.1.0 -Provides: bundled(npm(vega-loader)) = 4.4.1 -Provides: bundled(npm(vega-parser)) = 6.1.4 -Provides: bundled(npm(vega-projection)) = 1.4.5 -Provides: bundled(npm(vega-regression)) = 1.0.9 -Provides: bundled(npm(vega-runtime)) = 6.1.3 -Provides: bundled(npm(vega-scale)) = 7.1.1 -Provides: bundled(npm(vega-scenegraph)) = 4.9.4 -Provides: bundled(npm(vega-statistics)) = 5.3.1 -Provides: bundled(npm(vega-time)) = 2.0.4 -Provides: bundled(npm(vega-transforms)) = 4.9.5 -Provides: bundled(npm(vega-typings)) = 0.22.0 -Provides: bundled(npm(vega-util)) = 1.17.0 -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. -Provides: bundled(npm(@types/estree)) = 0.0.50 -Provides: bundled(npm(d3-array)) = 2.12.1 -Provides: bundled(npm(d3-color)) = 2.0.0 -Provides: bundled(npm(d3-delaunay)) = 5.2.0 -Provides: bundled(npm(d3-dispatch)) = 2.0.0 -Provides: bundled(npm(d3-dsv)) = 2.0.0 -Provides: bundled(npm(d3-force)) = 2.1.1 -Provides: bundled(npm(d3-format)) = 2.0.0 -Provides: bundled(npm(d3-geo)) = 2.0.2 -Provides: bundled(npm(d3-geo-projection)) = 3.0.0 -Provides: bundled(npm(d3-hierarchy)) = 2.0.0 -Provides: bundled(npm(d3-interpolate)) = 2.0.1 -Provides: bundled(npm(d3-path)) = 2.0.0 -Provides: bundled(npm(d3-quadtree)) = 2.0.0 -Provides: bundled(npm(d3-scale)) = 3.3.0 -Provides: bundled(npm(d3-shape)) = 2.1.0 -Provides: bundled(npm(d3-time)) = 2.1.1 -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. -# Implementation of erfinv is based on: -Provides: bundled(apache-commons-math) = 3.6.1 -# Expression parser is based on: -Provides: bundled(esprima) = 2.2.0 -Provides: bundled(fabric) = 2.4.5 -Provides: bundled(npm(d3-contour)) = 1.3.2 -Provides: bundled(npm(d3-regression)) = 1.2.1 -Provides: bundled(npm(hashlru)) = 1.0.4 -Provides: bundled(npm(quickselect)) = 2.0.0 -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 -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. -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 -# 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. -#Provides: bundled(npm(@types/estree)) = 0.0.50 -#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 -# copied, derived, or adapted snippets. See notes in -# src/snakemake/assets/__init__.py. -#Provides: bundled(npm(hashlru)) = 1.0.4 - -# src/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. -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 -# 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. -Provides: bundled(npm(vega-interpreter)) = 1.0.4 -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 -# copied, derived, or adapted snippets. See notes in -# src/snakemake/assets/__init__.py. -#Provides: bundled(npm(hashlru)) = 1.0.4 -# _areEquals() is based on: -#Provides: bundled(npm(fast-deep-equal)) = 3.1.3 - -# 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 dutifully add -# 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 -Provides: bundled(npm(prop-types)) = 15.7.2 - -# 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. -BuildRequires: conda -# For test_conda_pin_file, test_conda_named, test_conda_function -BuildRequires: ripgrep -# For test_script_xsh -BuildRequires: xonsh -%endif -# For test_env_modules: -BuildRequires: environment-modules -# For test_filegraph and test_env_modules, which use dot: -BuildRequires: graphviz -# For test_github_issue1158: -BuildRequires: strace -# For test_benchmark and test_benchmark_jsonl: -BuildRequires: stress-ng - -# See test-environment.yml for a listing of test dependencies, along with a lot -# of other cruft. -BuildRequires: %{py3_dist boto3} -BuildRequires: %{py3_dist pandas} -BuildRequires: %{py3_dist pytest} -BuildRequires: %{py3_dist pytest-mock} -BuildRequires: %{py3_dist snakemake-executor-plugin-cluster-generic} -BuildRequires: %{py3_dist snakemake-storage-plugin-http} -BuildRequires: %{py3_dist snakemake-storage-plugin-fs} -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 +%bcond tests 1 +# Sphinx-generated HTML documentation is not suitable for packaging; see +# https://bugzilla.redhat.com/show_bug.cgi?id=2006555 for discussion. +%bcond doc_pdf 1 %global _description %{expand: The Snakemake workflow management system is a tool to create reproducible and @@ -400,20 +11,94 @@ 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: 7.32.4 +Release: %autorelease +Summary: Workflow management system to create reproducible and scalable data analyses + +# The entire project is (SPDX) MIT, except: +# - versioneer.py is Unlicense +# - snakemake/_version.py says: +# This file is released into the public domain. +# which would be LicenseRef-Fedora-Public-Domain, except that the comments in +# versioneer.py make it clear that Unlicense is intended for the generated +# files as well. +License: MIT AND Unlicense +URL: https://snakemake.readthedocs.io/en/stable/index.html +Source0: https://github.com/snakemake/snakemake/archive/v%{version}/snakemake-%{version}.tar.gz + +BuildArch: noarch + +# Since we build the docs as a PDF, we canโ€™t include an animated GIF demo. +# Patch out the image reference and the text referring to it. +Patch: snakemake-7.11.0-docs-no-animated-demo.patch +# Fix compatibility with python-pulp 2.8.0 +# Downstream-only since snakemake 7.x is no longer developed, and 8.x is OK +Patch: snakemake-7.32.4-pulp-2.8.patch + +BuildRequires: python3-devel + +BuildRequires: help2man + +BuildRequires: vim-filesystem +Requires: vim-filesystem + +Provides: vim-snakemake = %{version}-%{release} + +# The patch for pulp 2.8 is not backwards-compatible with 2.7. +Requires: (%{py3_dist pulp} >= 2.8 if %{py3_dist pulp}) + +%if %{with tests} +# See test-environment.yml for a listing of test dependencies, along with a lot +# of other cruft. +BuildRequires: %{py3_dist boto3} +BuildRequires: %{py3_dist configargparse} +# For tests/test_google_lifesciences.py; but it would need a network connection +#BuildRequires: %%{py3_dist google-api-python-client} +#BuildRequires: %%{py3_dist google-cloud-storage} +BuildRequires: %{py3_dist pandas} +BuildRequires: %{py3_dist pytest} +BuildRequires: %{py3_dist requests-mock} +%endif + %description %_description +%package doc + +Summary: %{summary} + +BuildArch: noarch + +%if %{with doc_pdf} +BuildRequires: make +BuildRequires: python3-sphinx-latex +BuildRequires: latexmk +BuildRequires: tex-xetex-bin +BuildRequires: /usr/bin/xindy +BuildRequires: /usr/bin/rsvg-convert +%endif + +%description doc %_description # 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 google-cloud azure %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 +# Fix calls to unversioned Python interpreter +sed -r -i 's@"python"@"%{python3}"@g' tests/test_linting.py +# Now part of Sphinx: +sed -r -i '/sphinxcontrib-napoleon/d' docs/requirements.txt +# Since pdflatex cannot handle Unicode inputs in general: +echo "latex_engine = 'xelatex'" >> docs/conf.py # Copy and rename nano and vim extensions readmes for use in the main # documentation directory. for editor in nano vim @@ -421,45 +106,29 @@ do cp -vp "misc/${editor}/README.md" "README-${editor}.md" 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 < %{buildroot}%{_mandir}/man1/snakemake.1 +# No man page for snakemake-bash-completion since it is not intended for manual +# invocation. + +# Generate and install shell completions. +install -d %{buildroot}%{bash_completions_dir} +# Since 7.29.0, snakemake --bash-completion no longer works without a Snakefile +# https://github.com/snakemake/snakemake/issues/2336 +touch Snakefile +PATH="${PATH-}:%{buildroot}%{_bindir}" \ + PYTHONPATH='%{buildroot}%{python3_sitelib}' \ + snakemake --bash-completion \ + > %{buildroot}%{bash_completions_dir}/snakemake.bash # Install nano syntax highlighting install -t '%{buildroot}%{_datadir}/nano' -D -m 0644 -p \ @@ -480,111 +161,42 @@ cp -vrp misc/vim/* '%{buildroot}%{_datadir}/vim/vimfiles' find '%{buildroot}%{_datadir}/vim/vimfiles' \ -type f -name 'README.*' -print -delete - -%check -a +%check %if %{with tests} -%if %{without network_tests} -# The following require network access (at least DNS) and pass if it is -# available. -k="${k-}${k+ and }not test_ancient" -k="${k-}${k+ and }not test_dynamic_container" -k="${k-}${k+ and }not test_github_issue78" -k="${k-}${k+ and }not test_issue1083" -k="${k-}${k+ and }not test_issue3361_pass" -k="${k-}${k+ and }not test_keep_local" -k="${k-}${k+ and }not test_modules_prefix" -k="${k-}${k+ and }not test_report_after_run" -k="${k-}${k+ and }not test_retrieve" -k="${k-}${k+ and }not test_shell_exec" -%endif +# Lint output โ€œMigrate long run directives into scripts or notebooks โ€ฆโ€ is +# apparently not expected by upstream +k="${k-}${k+ and }not test_lint[long_run-positive]" +# Needs a network connection +k="${k-}${k+ and }not test_tibanna" +# Requires py-tes. Currently not packaged for Fedora. +k="${k-}${k+ and }not test_tes" +# Require a running slurm instance; maybe this is possible to set up +# temporarily in the offline build environment, but we donโ€™t know how. +k="${k-}${k+ and }not test_slurm_" -# These use the s3_storage test fixture, which sets up a server on the local -# loopback interface. For some reason, this does not seem to work in mock, with -# or without network access enabled. It is very likely that this is a quirk of -# the build environment rather than a real issue. -k="${k-}${k+ and }not test_default_storage" -k="${k-}${k+ and }not test_default_storage_local_job" -k="${k-}${k+ and }not test_output_file_cache_storage" -k="${k-}${k+ and }not test_storage" - -# The following requires cwltool, -# https://github.com/common-workflow-language/cwltool, which is not packaged. -k="${k-}${k+ and }not test_cwl_singularity" - -# The following requires polars, which is not packaged. -k="${k-}${k+ and }not test_params_pickling" -k="${k-}${k+ and }not test_validate" - -# The following require the โ€œpepโ€ extra. They might also require network -# access. -k="${k-}${k+ and }not test_modules_peppy" -k="${k-}${k+ and }not test_pep_pathlib" -k="${k-}${k+ and }not test_peppy" - -%if %{without conda_tests} -# All of these try to call conda info --json. We might experiment with making -# conda an unconditional BuildRequires, or with enabling the conda_tests bcond -# and filtering out the tests we cannot run, but we should wait for: +# Needs a network connection (and GCP credentials): +ignore="${ignore-} --ignore=tests/test_google_lifesciences.py" +# ______ ERROR collecting tests/test_conda_python_script/test_script.py ______ +# import file mismatch: +# imported module 'test_script' has this __file__ attribute: +# /builddir/build/BUILD/snakemake-7.31.1/tests/test_conda_python_3_7_script/test_script.py +# which is not the same as the test file we want to collect: +# /builddir/build/BUILD/snakemake-7.31.1/tests/test_conda_python_script/test_script.py +# HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules # -# F43FailsToInstall: python3-conda -# https://bugzilla.redhat.com/show_bug.cgi?id=2371696 -k="${k-}${k+ and }not test_jupyter_notebook" -k="${k-}${k+ and }not test_jupyter_notebook_nbconvert" -k="${k-}${k+ and }not test_jupyter_notebook_draft" +# Plus, this would add an unwanted BuildRequires on %%{py3_dist Pillow}. +ignore="${ignore-} --ignore-glob=tests/test_conda_python_3_7_script/*" + +%pytest -v -k "${k-}" ${ignore-} %endif -# Flaky; so far, we have not attempted to understand or report these. -# -# FAILED ../tests/tests.py::test_update_flag - AssertionError: wrong result -# produced for file 'test.txt': -# ------found------ -# foo -# -----expected----- -# foo -# bar -# ----------------- -k="${k-}${k+ and }not test_update_flag" -# FAILED ../tests/tests.py::test_queue_input_dryrun - -# snakemake_interface_common.exceptions.WorkflowError: At least one job did not -# complete successfully. -# (produces no other useful output) - -# Hangs on s390x; we have not attempted to understand or report this, although -# it would be nice to do so. For simplicity, we just skip it on all -# architectures. -k="${k-}${k+ and }not test_github_issue1158" - -# Workaround for Python path issues -cd src/ - -# See discussion in https://github.com/snakemake/snakemake/issues/2961 -# regarding running individual tests explicitly rather than letting pytest -# discover them freely, and see the โ€œRunning the full test suiteโ€ section in -# docs/project_info/contributing.rst for the list of tests that should be run. -# - tests/test_api.py requires network access and S3 credentials -%pytest -v -k "${k-}" ${ignore-} \ - ../tests/tests.py \ -%if %{with conda_tests} - ../tests/tests_using_conda.py \ -%endif - ../tests/test_expand.py \ - ../tests/test_io.py \ - ../tests/test_schema.py \ - ../tests/test_linting.py \ - ../tests/test_executor_test_suite.py \ - ../tests/test_internals.py -%endif - - %files -f %{pyproject_files} -%doc CHANGELOG.md -%doc README.md -%doc README-nano.md -%doc README-vim.md - %{_bindir}/snakemake %{_mandir}/man1/snakemake.1* +%{_bindir}/snakemake-bash-completion +%{bash_completions_dir}/snakemake.bash + # This is not owned by the filesystem package, and there is no nano-filesystem # subpackage, so we co-own the directory to avoid depending on nano. %dir %{_datadir}/nano/ @@ -594,6 +206,16 @@ cd src/ %{_datadir}/vim/vimfiles/ftplugin/snakemake/ %{_datadir}/vim/vimfiles/syntax/snakemake.vim +%files doc +%license LICENSE.md +%doc CHANGELOG.md +%doc CODE_OF_CONDUCT.md +%doc README.md +%doc README-nano.md +%doc README-vim.md +%if %{with doc_pdf} +%doc docs/_build/latex/Snakemake.pdf +%endif %changelog %autochangelog diff --git a/sources b/sources index ac14f3c..41d1ecb 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (snakemake-9.14.6.tar.gz) = 3858d5610271fbf3617e3b88b10b55546ddb2eafffa929a882bf5584c91f85280fa7c5b25bae8951e4feb5aa9568ba51c0979c35b37472d03e1efc239392f1ae -SHA512 (snakemake-9.14.6-assets.tar.zst) = c58043d640c14cdb4057b515ee65d8c8eb76a4abf34d7ebae70cc929023df780ef234dd5a8fa9d76a96bb1aceda8dab1c8f5337d72ff6bb9ae7d6b82c10a16a7 +SHA512 (snakemake-7.32.4.tar.gz) = 34fef61528b18facab798652c88ed5c698ef02161e023255fdd024b7c7781c4e582cdb04b2740fdff9b6f3600acaec719742984acee57920bb48ef3b5af99d9a