Skip to content

fix: 3342 faster touch runs and warning messages for non-existing files#3398

Merged
johanneskoester merged 17 commits intomainfrom
3342-faster---touch-runs
Mar 14, 2025
Merged

fix: 3342 faster touch runs and warning messages for non-existing files#3398
johanneskoester merged 17 commits intomainfrom
3342-faster---touch-runs

Conversation

@Marco-Masera
Copy link
Copy Markdown
Contributor

@Marco-Masera Marco-Masera commented Mar 12, 2025

Description

This PR tries to optimize the --touch runs but running the sleep command only for jobs that actually need to touch files.
The sleep command is moved into the async touch function and run only if there are files to be created.

Sleeping inside this async should block the entire asyncio event loop, which is the desired behavior here as the order of files creation is preserved.

For jobs with non-existing files, a warning messsage is displayed to the user. A new log_warning function is added in the Job class.

Summary by CodeRabbit

  • New Features

    • Introduced a configurable pause during file processing to enhance operational flexibility.
  • Refactor

    • Streamlined the process for checking and processing output files, ensuring clearer differentiation between file types.
    • Improved logging to notify when certain expected files are not present.

@Marco-Masera Marco-Masera linked an issue Mar 12, 2025 that may be closed by this pull request
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 12, 2025

📝 Walkthrough

Walkthrough

The changes introduce a new constant SLEEPING_TIME in the Executor class to replace a hardcoded sleep value. The run_job method now uses a dynamic sleep duration and restructures the file handling logic. Instead of iterating over each file, it uses two comprehensions to collect storage-based and local files separately, and then tracks non-existing files. A sleep is triggered if any files are present, and a warning is logged for files that are missing.

Changes

File Change Summary
src/snakemake/executors/touch.py - Added constant SLEEPING_TIME to Executor
- Replaced fixed time.sleep(0.1) with dynamic sleep using SLEEPING_TIME
- Refactored output file handling using comprehensions for distinguishing storage and local files
- Added logging warning for non-existing files

Sequence Diagram(s)

sequenceDiagram
    participant Executor
    participant StorageFS as "Storage Files"
    participant LocalFS as "Local Files"
    participant Logger

    Note over Executor: run_job is invoked
    Executor->>Executor: Evaluate job.output files
    Executor->>StorageFS: Check for storage-based file existence
    StorageFS-->>Executor: Return storage file status
    Executor->>LocalFS: Check for local file existence
    LocalFS-->>Executor: Return local file status
    alt Files exist
        Executor->>Executor: Sleep for SLEEPING_TIME
        Executor->>Executor: Touch storage and local files
    else No files exist
        Executor->>Logger: Log warning for non-existing files
    end
Loading

Tip

⚡🧪 Multi-step agentic review comment chat (experimental)
  • We're introducing multi-step agentic chat in review comments. This experimental feature enhances review discussions with the CodeRabbit agentic chat by enabling advanced interactions, including the ability to create pull requests directly from comments.
    - To enable this feature, set early_access to true under in the settings.

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 43e4bde and 8f9db10.

📒 Files selected for processing (1)
  • src/snakemake/executors/touch.py (2 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.py`: Do not try to improve formatting. Do not suggest ...

**/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

  • src/snakemake/executors/touch.py
⏰ Context from checks skipped due to timeout of 90000ms (19)
  • GitHub Check: tests (10, windows-latest, py312, bash)
  • GitHub Check: tests (10, windows-latest, py311, bash)
  • GitHub Check: tests (10, ubuntu-latest, py312, bash)
  • GitHub Check: tests (10, ubuntu-latest, py311, bash)
  • GitHub Check: tests (4, windows-latest, py311, bash)
  • GitHub Check: tests (4, ubuntu-latest, py312, bash)
  • GitHub Check: tests (4, ubuntu-latest, py311, bash)
  • GitHub Check: tests (3, windows-latest, py312, bash)
  • GitHub Check: tests (3, windows-latest, py311, bash)
  • GitHub Check: tests (3, ubuntu-latest, py312, bash)
  • GitHub Check: tests (3, ubuntu-latest, py311, bash)
  • GitHub Check: tests (2, windows-latest, py312, bash)
  • GitHub Check: tests (2, windows-latest, py311, bash)
  • GitHub Check: tests (2, ubuntu-latest, py312, bash)
  • GitHub Check: tests (2, ubuntu-latest, py311, bash)
  • GitHub Check: tests (1, windows-latest, py312, bash)
  • GitHub Check: tests (1, windows-latest, py311, bash)
  • GitHub Check: tests (1, ubuntu-latest, py312, bash)
  • GitHub Check: tests (1, ubuntu-latest, py311, bash)
🔇 Additional comments (5)
src/snakemake/executors/touch.py (5)

18-18: Added logger import for new warning message functionality.

The addition of the logger import is necessary for the new warning message feature that alerts users about non-existing files.


33-33: Good use of a named constant for sleep duration.

Replacing the hardcoded sleep value with a named constant SLEEPING_TIME improves code maintainability and makes it easier to adjust the duration if needed in the future.


45-59: Improved file categorization for better handling.

The restructured code now clearly separates files into three categories:

  1. Files that are in storage and exist
  2. Files that exist locally but not in storage
  3. Files that don't exist at all

This organization improves code clarity and supports the new warning feature.


60-65: Optimization: Sleep only when necessary.

This change directly addresses the PR objective by only sleeping when there are files to touch, improving performance for jobs that don't need to touch any files.


66-69:

Details

❓ Verification inconclusive

Enhanced user experience with warning for non-existing files.

The addition of a warning message for non-existing files is a valuable improvement that helps users identify potential issues in their workflow.

However, please verify that the elements in non_existing_files set can be properly joined as strings:


🏁 Script executed:

#!/bin/bash
# Check if the files in job.output have a string representation compatible with join
ast-grep --pattern "class $_:
  $$$
  def __str__(self):
    $$$
" | grep -B 5 -A 5 "__str__"

Length of output: 108


Manual Verification Needed: Confirm String Conversion of non_existing_files Elements
The added warning message improves user feedback when expected output files are missing. However, our automated check did not return evidence that every element in the non_existing_files set reliably converts to a string. Please manually verify that each item in non_existing_files either is already a string or implements a proper __str__ method, ensuring that the join operation functions as expected.

  • Location: src/snakemake/executors/touch.py, lines 66–69
  • Action: Confirm that all items in non_existing_files are string-convertible; if necessary, explicitly convert them to strings before joining.
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link
Copy Markdown
Contributor

Please format your code with black: black snakemake tests/*.py.

@Marco-Masera Marco-Masera changed the title 3342 faster touch runs Fix: 3342 faster touch runs Mar 12, 2025
@Marco-Masera Marco-Masera changed the title Fix: 3342 faster touch runs Fix: 3342 faster touch runs and warning messages for unexisting files Mar 12, 2025
@Marco-Masera Marco-Masera changed the title Fix: 3342 faster touch runs and warning messages for unexisting files Fix: 3342 faster touch runs and warning messages for non-existing files Mar 12, 2025
@Marco-Masera Marco-Masera changed the title Fix: 3342 faster touch runs and warning messages for non-existing files fix: 3342 faster touch runs and warning messages for non-existing files Mar 12, 2025
@Marco-Masera Marco-Masera marked this pull request as ready for review March 12, 2025 13:25
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
snakemake/executors/touch.py (2)

70-74: Enhanced user experience with warning messages.

Adding warnings for missing output files improves user awareness and debugging capabilities. Users will now be properly informed when files don't exist.

However, there's an unnecessary f-prefix in the first part of the warning message.

-                            msg=f"Missing rule's output files: "
+                            msg="Missing rule's output files: "
🧰 Tools
🪛 Ruff (0.8.2)

72-72: f-string without any placeholders

Remove extraneous f prefix

(F541)


18-18: Remove unused import.

The logger import is not being used directly in this file as the job now uses its own log_warning method.

-from snakemake.logging import logger
🧰 Tools
🪛 Ruff (0.8.2)

18-18: snakemake.logging.logger imported but unused

Remove unused import: snakemake.logging.logger

(F401)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b40f599 and f9454f0.

📒 Files selected for processing (3)
  • snakemake/executors/touch.py (2 hunks)
  • snakemake/jobs.py (1 hunks)
  • snakemake/logging.py (2 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.py`: Do not try to improve formatting. Do not suggest ...

**/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

  • snakemake/logging.py
  • snakemake/jobs.py
  • snakemake/executors/touch.py
🪛 Ruff (0.8.2)
snakemake/executors/touch.py

18-18: snakemake.logging.logger imported but unused

Remove unused import: snakemake.logging.logger

(F401)


72-72: f-string without any placeholders

Remove extraneous f prefix

(F541)

🔇 Additional comments (6)
snakemake/jobs.py (1)

1133-1136: Well-implemented warning logging method.

This new log_warning method enhances the error reporting capabilities of jobs by providing structured warnings that follow the same format as errors. It correctly reuses the existing get_log_error_info method to maintain consistency.

snakemake/logging.py (2)

420-422: Good addition of job warning handler.

The job_warning method is a logical addition that complements the existing job_error handler. It follows the same pattern by accepting keyword arguments and setting the appropriate level.


603-628: Well-structured warning handler implementation.

The implementation of the job_warning text handler follows the established pattern of the job_error handler, ensuring consistency in how warnings are formatted and displayed. This makes the warning messages just as informative as error messages.

snakemake/executors/touch.py (3)

33-33: Good use of a constant for sleeping time.

Defining SLEEPING_TIME as a class constant improves code maintainability by centralizing the value and making it easy to adjust if needed.


45-63: Improved file categorization for more efficient processing.

This change organizes output files into distinct categories (storage files vs. local files) and identifies non-existing files. This clear separation improves both the code structure and enables conditional sleeping.


64-69: Performance optimization: conditional sleeping.

The optimization to only sleep when there are files to touch is excellent. This directly addresses the PR objective of making --touch runs faster by avoiding unnecessary delays for jobs that don't need to touch files.

Copy link
Copy Markdown
Contributor

@johanneskoester johanneskoester left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot! Some suggestions below.

Comment on lines +71 to +74
job.log_warning(
msg=f"Missing rule's output files: "
+ f"{', '.join(non_existing_files)}. --touch skipped for this job."
)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
job.log_warning(
msg=f"Missing rule's output files: "
+ f"{', '.join(non_existing_files)}. --touch skipped for this job."
)
logger.warning(
f"Output files not touched because they don't exist: {', '.join(non_existing_files)}"
)

Marco-Masera and others added 4 commits March 12, 2025 14:42
Co-authored-by: Johannes Köster <johannes.koester@tu-dortmund.de>
Co-authored-by: Johannes Köster <johannes.koester@tu-dortmund.de>
Co-authored-by: Johannes Köster <johannes.koester@tu-dortmund.de>
@sonarqubecloud
Copy link
Copy Markdown

@Marco-Masera Marco-Masera enabled auto-merge (squash) March 13, 2025 10:37
@johanneskoester johanneskoester merged commit cd9c3c3 into main Mar 14, 2025
48 checks passed
@johanneskoester johanneskoester deleted the 3342-faster---touch-runs branch March 14, 2025 09:43
@github-project-automation github-project-automation bot moved this from In review to Done in Snakemake Hackathon March 2025 Mar 14, 2025
johanneskoester pushed a commit that referenced this pull request Mar 14, 2025
🤖 I have created a release *beep* *boop*
---


##
[9.0.0](v8.30.0...v9.0.0)
(2025-03-14)


### ⚠ BREAKING CHANGES

* Logging refactor & add LoggerPluginInterface
([#3107](#3107))

### Features

* [#3412](#3412) - keep
shadow folder of failed job if --keep-incomplete flag is set.
([#3430](#3430))
([22978c3](22978c3))
* add flag --report-after-run to automatically generate the report after
a successfull workflow run
([#3428](#3428))
([b0a7f03](b0a7f03))
* add flatten function to IO utils
([#3424](#3424))
([67fa392](67fa392))
* add helper functions to parse input files
([#2918](#2918))
([63e45a7](63e45a7))
* Add option to print redacted file names
([#3089](#3089))
([ba4d264](ba4d264))
* add support for validation of polars dataframe and lazyframe
([#3262](#3262))
([c7473a6](c7473a6))
* added support for rendering dag with mermaid js
([#3409](#3409))
([7bf8381](7bf8381))
* adding --replace-workflow-config to fully replace workflow configs
(from config: directive) with --configfile, instead of merging them
([#3381](#3381))
([47504a0](47504a0))
* Dynamic module name
([#3401](#3401))
([024dc32](024dc32))
* Enable saving and reloading IOCache object
([#3386](#3386))
([c935953](c935953))
* files added in rule params with workflow.source_path will be available
in used containers
([#3385](#3385))
([a6e45bf](a6e45bf))
* Fix keep_local in storage directive and more freedom over remote
retrieval behaviour
([#3410](#3410))
([67b4739](67b4739))
* inherit parameters of use rule and extend/replace individual items
them when using 'with' directive
([#3365](#3365))
([93e4b92](93e4b92))
* Logging refactor & add LoggerPluginInterface
([#3107](#3107))
([86f1d6e](86f1d6e))
* Maximal file size for checksums
([#3368](#3368))
([b039f8a](b039f8a))
* Modernize package configuration using Pixi
([#3369](#3369))
([77992d8](77992d8))
* multiext support for named input/output
([#3372](#3372))
([05e1378](05e1378))
* optionally auto-group jobs via temp files in case of remote execution
([#3378](#3378))
([cc9bba2](cc9bba2))


### Bug Fixes

* `--delete-all-output` ignores `--dry-run`
([#3265](#3265))
([23fef82](23fef82))
* 3342 faster touch runs and warning messages for non-existing files
([#3398](#3398))
([cd9c3c3](cd9c3c3))
* add default value to max-jobs-per-timespan
([#3043](#3043))
([2959abe](2959abe))
* checkpoints inside modules are overwritten
([#3359](#3359))
([fba3ac7](fba3ac7))
* Convert Path to IOFile
([#3405](#3405))
([c58684c](c58684c))
* Do not perform storage object cleanup with --keep-storage-local-copies
set ([#3358](#3358))
([9a6d14b](9a6d14b))
* edgecases of source deployment in case of remote execution
([#3396](#3396))
([5da13be](5da13be))
* enhance error message formatting for strict DAG-building mode
([#3376](#3376))
([a1c39ee](a1c39ee))
* fix bug in checkpoint handling that led to exceptions in case
checkpoint output was missing upon rerun
([#3423](#3423))
([8cf4a2f](8cf4a2f))
* force check all required outputs
([#3341](#3341))
([495a4e7](495a4e7))
* group job formatting
([#3442](#3442))
([f0b10a3](f0b10a3))
* in remote jobs, upload storage in topological order such that
modification dates are preserved (e.g. in case of group jobs)
([#3377](#3377))
([eace08f](eace08f))
* only skip eval when resource depends on input
([#3374](#3374))
([4574c92](4574c92))
* Prevent execution of conda in apptainer when not explicitly requested
in software deployment method
([#3388](#3388))
([c43c5c0](c43c5c0))
* print filenames with quotes around them in RuleException
([#3269](#3269))
([6baeda5](6baeda5))
* Re-evaluation of free resources
([#3399](#3399))
([6371293](6371293))
* ReadTheDocs layout issue due to src directory change
([#3419](#3419))
([695b127](695b127))
* robustly escaping quotes in generated bash scripts (v2)
([#3297](#3297))
([#3389](#3389))
([58720bd](58720bd))
* Show apptainer image URL in snakemake report
([#3407](#3407))
([45f0450](45f0450))
* Update ReadTheDocs configuration for documentation build to use Pixi
([#3433](#3433))
([3f227a6](3f227a6))


### Documentation

* Add pixi setup instructions to general use tutorial
([#3382](#3382))
([115e81b](115e81b))
* fix contribution section heading levels, fix docs testing setup order
([#3360](#3360))
([051dc53](051dc53))
* fix link to github.com/snakemake/poetry-snakemake-plugin
([#3436](#3436))
([ec6d97c](ec6d97c))
* fix quoting
([#3394](#3394))
([b40f599](b40f599))
* fix rerun-triggers default
([#3403](#3403))
([4430e23](4430e23))
* fix typo 'safe' -&gt; 'save'
([#3384](#3384))
([7755861](7755861))
* mention code formatting in the contribution section
([#3431](#3431))
([e8682b7](e8682b7))
* remove duplicated 'functions'.
([#3356](#3356))
([7c595db](7c595db))
* update broken links documentation
([#3437](#3437))
([e3d0d88](e3d0d88))
* Updating contributing guidelines with new pixi dev setup
([#3415](#3415))
([8e95a12](8e95a12))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: snakemake-bot <snakemake-bot-admin@googlegroups.com>
kjohnsen pushed a commit to kjohnsen/snakemake that referenced this pull request Dec 15, 2025
…es (snakemake#3398)

### Description

This PR tries to optimize the --touch runs but running the *sleep*
command only for jobs that actually need to touch files.
The *sleep* command is moved into the async *touch* function and run
only if there are files to be created.

Sleeping inside this async should block the entire asyncio event loop,
which is the desired behavior here as the order of files creation is
preserved.

For jobs with non-existing files, a warning messsage is displayed to the
user. A new *log_warning* function is added in the Job class.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced a configurable pause during file processing to enhance
operational flexibility.
  
- **Refactor**
- Streamlined the process for checking and processing output files,
ensuring clearer differentiation between file types.
- Improved logging to notify when certain expected files are not
present.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Johannes Köster <johannes.koester@tu-dortmund.de>
kjohnsen pushed a commit to kjohnsen/snakemake that referenced this pull request Dec 15, 2025
🤖 I have created a release *beep* *boop*
---


##
[9.0.0](snakemake/snakemake@v8.30.0...v9.0.0)
(2025-03-14)


### ⚠ BREAKING CHANGES

* Logging refactor & add LoggerPluginInterface
([snakemake#3107](snakemake#3107))

### Features

* [snakemake#3412](snakemake#3412) - keep
shadow folder of failed job if --keep-incomplete flag is set.
([snakemake#3430](snakemake#3430))
([22978c3](snakemake@22978c3))
* add flag --report-after-run to automatically generate the report after
a successfull workflow run
([snakemake#3428](snakemake#3428))
([b0a7f03](snakemake@b0a7f03))
* add flatten function to IO utils
([snakemake#3424](snakemake#3424))
([67fa392](snakemake@67fa392))
* add helper functions to parse input files
([snakemake#2918](snakemake#2918))
([63e45a7](snakemake@63e45a7))
* Add option to print redacted file names
([snakemake#3089](snakemake#3089))
([ba4d264](snakemake@ba4d264))
* add support for validation of polars dataframe and lazyframe
([snakemake#3262](snakemake#3262))
([c7473a6](snakemake@c7473a6))
* added support for rendering dag with mermaid js
([snakemake#3409](snakemake#3409))
([7bf8381](snakemake@7bf8381))
* adding --replace-workflow-config to fully replace workflow configs
(from config: directive) with --configfile, instead of merging them
([snakemake#3381](snakemake#3381))
([47504a0](snakemake@47504a0))
* Dynamic module name
([snakemake#3401](snakemake#3401))
([024dc32](snakemake@024dc32))
* Enable saving and reloading IOCache object
([snakemake#3386](snakemake#3386))
([c935953](snakemake@c935953))
* files added in rule params with workflow.source_path will be available
in used containers
([snakemake#3385](snakemake#3385))
([a6e45bf](snakemake@a6e45bf))
* Fix keep_local in storage directive and more freedom over remote
retrieval behaviour
([snakemake#3410](snakemake#3410))
([67b4739](snakemake@67b4739))
* inherit parameters of use rule and extend/replace individual items
them when using 'with' directive
([snakemake#3365](snakemake#3365))
([93e4b92](snakemake@93e4b92))
* Logging refactor & add LoggerPluginInterface
([snakemake#3107](snakemake#3107))
([86f1d6e](snakemake@86f1d6e))
* Maximal file size for checksums
([snakemake#3368](snakemake#3368))
([b039f8a](snakemake@b039f8a))
* Modernize package configuration using Pixi
([snakemake#3369](snakemake#3369))
([77992d8](snakemake@77992d8))
* multiext support for named input/output
([snakemake#3372](snakemake#3372))
([05e1378](snakemake@05e1378))
* optionally auto-group jobs via temp files in case of remote execution
([snakemake#3378](snakemake#3378))
([cc9bba2](snakemake@cc9bba2))


### Bug Fixes

* `--delete-all-output` ignores `--dry-run`
([snakemake#3265](snakemake#3265))
([23fef82](snakemake@23fef82))
* 3342 faster touch runs and warning messages for non-existing files
([snakemake#3398](snakemake#3398))
([cd9c3c3](snakemake@cd9c3c3))
* add default value to max-jobs-per-timespan
([snakemake#3043](snakemake#3043))
([2959abe](snakemake@2959abe))
* checkpoints inside modules are overwritten
([snakemake#3359](snakemake#3359))
([fba3ac7](snakemake@fba3ac7))
* Convert Path to IOFile
([snakemake#3405](snakemake#3405))
([c58684c](snakemake@c58684c))
* Do not perform storage object cleanup with --keep-storage-local-copies
set ([snakemake#3358](snakemake#3358))
([9a6d14b](snakemake@9a6d14b))
* edgecases of source deployment in case of remote execution
([snakemake#3396](snakemake#3396))
([5da13be](snakemake@5da13be))
* enhance error message formatting for strict DAG-building mode
([snakemake#3376](snakemake#3376))
([a1c39ee](snakemake@a1c39ee))
* fix bug in checkpoint handling that led to exceptions in case
checkpoint output was missing upon rerun
([snakemake#3423](snakemake#3423))
([8cf4a2f](snakemake@8cf4a2f))
* force check all required outputs
([snakemake#3341](snakemake#3341))
([495a4e7](snakemake@495a4e7))
* group job formatting
([snakemake#3442](snakemake#3442))
([f0b10a3](snakemake@f0b10a3))
* in remote jobs, upload storage in topological order such that
modification dates are preserved (e.g. in case of group jobs)
([snakemake#3377](snakemake#3377))
([eace08f](snakemake@eace08f))
* only skip eval when resource depends on input
([snakemake#3374](snakemake#3374))
([4574c92](snakemake@4574c92))
* Prevent execution of conda in apptainer when not explicitly requested
in software deployment method
([snakemake#3388](snakemake#3388))
([c43c5c0](snakemake@c43c5c0))
* print filenames with quotes around them in RuleException
([snakemake#3269](snakemake#3269))
([6baeda5](snakemake@6baeda5))
* Re-evaluation of free resources
([snakemake#3399](snakemake#3399))
([6371293](snakemake@6371293))
* ReadTheDocs layout issue due to src directory change
([snakemake#3419](snakemake#3419))
([695b127](snakemake@695b127))
* robustly escaping quotes in generated bash scripts (v2)
([snakemake#3297](snakemake#3297))
([snakemake#3389](snakemake#3389))
([58720bd](snakemake@58720bd))
* Show apptainer image URL in snakemake report
([snakemake#3407](snakemake#3407))
([45f0450](snakemake@45f0450))
* Update ReadTheDocs configuration for documentation build to use Pixi
([snakemake#3433](snakemake#3433))
([3f227a6](snakemake@3f227a6))


### Documentation

* Add pixi setup instructions to general use tutorial
([snakemake#3382](snakemake#3382))
([115e81b](snakemake@115e81b))
* fix contribution section heading levels, fix docs testing setup order
([snakemake#3360](snakemake#3360))
([051dc53](snakemake@051dc53))
* fix link to github.com/snakemake/poetry-snakemake-plugin
([snakemake#3436](snakemake#3436))
([ec6d97c](snakemake@ec6d97c))
* fix quoting
([snakemake#3394](snakemake#3394))
([b40f599](snakemake@b40f599))
* fix rerun-triggers default
([snakemake#3403](snakemake#3403))
([4430e23](snakemake@4430e23))
* fix typo 'safe' -&gt; 'save'
([snakemake#3384](snakemake#3384))
([7755861](snakemake@7755861))
* mention code formatting in the contribution section
([snakemake#3431](snakemake#3431))
([e8682b7](snakemake@e8682b7))
* remove duplicated 'functions'.
([snakemake#3356](snakemake#3356))
([7c595db](snakemake@7c595db))
* update broken links documentation
([snakemake#3437](snakemake#3437))
([e3d0d88](snakemake@e3d0d88))
* Updating contributing guidelines with new pixi dev setup
([snakemake#3415](snakemake#3415))
([8e95a12](snakemake@8e95a12))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: snakemake-bot <snakemake-bot-admin@googlegroups.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

Faster --touch runs

2 participants