feat: Faster ci test setup #2489
Conversation
Maybe needed since things are configured with micromamba
|
@johanneskoester. This is ready for review. |
johanneskoester
left a comment
There was a problem hiding this comment.
Awesome, thanks a lot!
| @@ -0,0 +1,308 @@ | |||
| { | |||
There was a problem hiding this comment.
I guess new tests that do not occur in this file are just put in one of the buckets and not ignored? Is there a way to update the durations file from the main branch, via a separate job that records and updates the timings?
There was a problem hiding this comment.
They are not ignored. New tests are just assumed to have an average duration. So if the test suite changes significantly it can be good to update the file. It may also be smart to keep separate duration files for linux and windows.
Is there a way to update the durations file from the main branch, via a separate job that records and updates the timings?
Yes. That would be easy enough. I could make separate workflow which would grab the duration files as artifacts, combine them to a single file and then make automated pull request. I know conda does something similar. Maybe it could run once a week/month.
I will make a follow-up PR if you think it is worth it?
There was a problem hiding this comment.
Yes, sounds great and would be much appreciated!
|
Kudos, SonarCloud Quality Gate passed! |
🤖 I have created a release *beep* *boop* --- ## [8.0.0](v7.32.2...v8.0.0) (2023-12-20) ### ⚠ BREAKING CHANGES Snakemake 8 marks the beginning of decomposing Snakemake into a framework of plugins. This enables the democratization of method development within the Snakemake ecosystem. We start with plugins for storage and execution backends. In the future, there will be plugins for the scheduling, metadata, software deployment, reporting, and many more. This way, it will be possible to easily launch and explore new developments in workflow management and reproducible data analysis without the need to get your work merged into the main codebase of Snakemake and also without the need to develop a new workflow management system as a proof of concept. In detail, Snakemake 8 introduces the following changes. Unfortunately it was unavoidable to break some usages (we apologize). Nevertheless, we tried to ensure that every removed or modified feature has been replaced with an equivalent reimplementation, as outlined in our [migration docs](https://snakemake.readthedocs.io/en/latest/getting_started/migration.html#migrating-to-snakemake-8). While Snakemake 8 has an even more thorough testing framework than any release before, and while it has been quite heavily tested in practice by us, you might initially experience bugs and glitches for which we want to apologize beforehand. We think that the massive codebase improvements are worth it in the long run, and hope that everything goes well. As always, any pull requests with test cases and pointers to bugs are more than welcome. #### Detailed breaking changes * removed the long time ago deprecated support for dynamic, version, and subworkflow (see [the migration docs](https://snakemake.readthedocs.io/en/latest/getting_started/migration.html#migrating-to-snakemake-8)) * migrated old remote providers into storage plugins (see [the migration docs](https://snakemake.readthedocs.io/en/latest/getting_started/migration.html#migrating-to-snakemake-8)) * migrated execution backends into plugins, including a change in the respective command line interfaces (see [the migration docs](https://snakemake.readthedocs.io/en/latest/getting_started/migration.html#migrating-to-snakemake-8)) * deprecates `--use-conda` and `--use-singularity` in favor of `--software-deployment-method conda` or `--software-deployment-method apptainer` and `--software-deployment-method conda apptainer` (see [the migration docs](https://snakemake.readthedocs.io/en/latest/getting_started/migration.html#migrating-to-snakemake-8)) * profile support is now versioned, such that different profiles can be written for different minimum Snakemake versions (see [the migration docs](https://snakemake.readthedocs.io/en/latest/getting_started/migration.html#migrating-to-snakemake-8)) * redesigned Snakemake API. It now uses a modern, dataclass based approach (see [the migration docs](https://snakemake.readthedocs.io/en/latest/getting_started/migration.html#migrating-to-snakemake-8)) ### Features * add ability to inject conda environments into running Snakefile ([#2479](#2479)) ([6140e29](6140e29)) * add functionality for deploying sources if no shared FS is assumed ([#2486](#2486)) ([76eac3c](76eac3c)) * add option to control software deployment mode (shared or non shared FS) ([#2525](#2525)) ([04ec2c0](04ec2c0)) * allow detailed configuration of shared FS usage ([#2528](#2528)) ([0d34be9](0d34be9)) * allow environment variables in string values of profile (e.g. paths may now contain elements like $USER). ([58dc70c](58dc70c)) * allow python expressions in --set-resources ([#2521](#2521)) ([022a31e](022a31e)) * allow to set latency_wait in executor test suite ([c0bca0b](c0bca0b)) * automatically upload workflow sources to default storage provider if no shared FS is used ([a450c49](a450c49)) * Faster ci test setup ([#2489](#2489)) ([4798e8a](4798e8a)) * implement precommand ([#2482](#2482)) ([ff0f979](ff0f979)) * redesigned Snakemake API. It now uses a modern, dataclass based approach ([#2403](#2403)) ([2be3bfa](2be3bfa)) * support for external executor plugins ([#2305](#2305)) ([c9eaa4e](c9eaa4e)) * version specific profile config files (profile/config.v8+.yaml with profile/config.yaml as fallback that matches any version) ([#2498](#2498)) ([47e5811](47e5811)) ### Bug Fixes * adapt to changes in snakemake-interface-executor-plugins ([635c68a](635c68a)) * add storage provider args to deploy sources command ([67178e3](67178e3)) * add testcase for script directive to work with Python 3.7 and corresponding fix. ([0b4ae2e](0b4ae2e)) * allow pepfile and pepschema to take pathlib ([#2546](#2546)) ([ca91661](ca91661)) * also inherit rule proxies if there is no rulename modifier specified in a use rule statement ([#2440](#2440)) ([1570289](1570289)) * assume at most 8GB memory for default resources. This way, we avoid exploding memory requirements for large input files that are very unlikely to be put entirely into memory by any tool. ([11c2ecc](11c2ecc)) * comparison to float in scheduler ([ef44d84](ef44d84)) * detect job paths that leave and then enter a group. Such paths are invalid because then the group depends on itself. ([#2527](#2527)) ([5383a4d](5383a4d)) * ensure that auto deployment of default storage provider works in containers with read-only root home. ([1a347ff](1a347ff)) * ensure that log and benchmark files are uploaded to storage as well ([#2545](#2545)) ([6aabb5d](6aabb5d)) * ensure that targetjob is always forced. This fixes a bug causing run-directive rules to not being executed even when enforced via e.g. -R. ([#2448](#2448)) ([b2a60d5](b2a60d5)) * fix cache handling and unlock handling ([2f4d5e1](2f4d5e1)) * fix nargs definition for --deploy-sources ([fc252c8](fc252c8)) * fix path handling when detective profiles ([fe63881](fe63881)) * fix storage handling on windows by converting all paths to posix paths ([#2519](#2519)) ([7864a76](7864a76)) * handle different f-string tokens in py3.12 ([#2485](#2485)) ([f2c7613](f2c7613)) * handle storage for local jobs; add test case ([6d978ef](6d978ef)) * handling of group jobs when obtaining temp input files ([71be1de](71be1de)) * import ([#2402](#2402)) ([2c831f1](2c831f1)) * improved error handling for storage upload; fixed bugs caused by outdated calls to IOFile.exists(). ([720bb84](720bb84)) * improved error messages in case of invalid storage queries ([9671fd0](9671fd0)) * in addition to localrules statement, infer that job is local if it has any input or output file that is marked as local ([#2541](#2541)) ([e8b682b](e8b682b)) * only deactivate conda inject envs upon workflow tear down ([#2503](#2503)) ([e6dfdd4](e6dfdd4)) * Panoptes --wms-monitor-arg ([#2444](#2444)) ([98d2bdf](98d2bdf)) * proper reuse of rule proxies when importing several times from the same module ([#2404](#2404)) ([e867dda](e867dda)) * Restore backward compatibility for Google Life Sciences executor ([#2461](#2461)) ([5e3a464](5e3a464)) * shadow "full" mode ignore symlinks ([#2516](#2516)) ([1d58120](1d58120)) * show failed logs in executor testcases ([92f7bf4](92f7bf4)) * Slack log service ([#2537](#2537)) ([26eb4ba](26eb4ba)) * sort report (sub-)categories in lexicographical order ([#2449](#2449)) ([d0705ad](d0705ad)) * update minimum snakemake-interface-storage-plugins version ([0ef7226](0ef7226)) * use temporary directory (faster, more likely local, always writable) for persistence and source cache in case of remote execution without shared fs ([#2502](#2502)) ([c8fa7ba](c8fa7ba)) * wait for logs before showing them on error ([a4ff328](a4ff328)) ### Documentation * document name directive with example ([#2534](#2534)) ([cce5551](cce5551)) * fix syntax in cluster example ([#2460](#2460)) ([64e9645](64e9645)) * notes on arm based machines in tutorial docs ([0586f04](0586f04)) * **rust:** Fix typo on rust-script version ([#2488](#2488)) ([a79dd94](a79dd94)) --- 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: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Johannes Köster <[email protected]>








Description
This PR speeds up the CI tests.
This was done by using setup-micromamba to install mamba and the Python environment. This is especially fast because the environment is cached.
Here are the speed improvements for micromamba install + environment creation:
(maybe snakemake should use micromamba for its conda-jobs)...
The black formatting job is also much faster: Total time: 60 sec -> 11 sec.
A small speed up also comes from replacing the
cancel-previousjob with a github-action built-feature (concurrency) which does the same.Finally, a lot of speedup comes from adding a
.test_durationfile sopytest-splitcan minimize test time by spreading the tests across jobs in an optimal way. This cuts 30% of the actual test time.QC
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).