runnable 0.17.0__tar.gz → 0.18.0__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {runnable-0.17.0 → runnable-0.18.0}/PKG-INFO +1 -7
- runnable-0.18.0/extensions/catalog/pyproject.toml +14 -0
- runnable-0.18.0/extensions/job_executor/pyproject.toml +16 -0
- runnable-0.18.0/extensions/nodes/pyproject.toml +15 -0
- runnable-0.18.0/extensions/pipeline_executor/pyproject.toml +16 -0
- runnable-0.18.0/extensions/run_log_store/pyproject.toml +15 -0
- runnable-0.18.0/extensions/secrets/pyproject.toml +15 -0
- {runnable-0.17.0 → runnable-0.18.0}/pyproject.toml +25 -15
- {runnable-0.17.0 → runnable-0.18.0}/runnable/sdk.py +40 -99
- runnable-0.17.0/.dockerignore +0 -10
- runnable-0.17.0/.github/workflows/docs.yaml +0 -18
- runnable-0.17.0/.github/workflows/pr.yaml +0 -53
- runnable-0.17.0/.github/workflows/release.yaml +0 -101
- runnable-0.17.0/.mypy.ini +0 -48
- runnable-0.17.0/.pre-commit-config.yaml +0 -34
- runnable-0.17.0/.python-version +0 -1
- runnable-0.17.0/CHANGELOG.md +0 -1897
- runnable-0.17.0/Dockerfile +0 -22
- runnable-0.17.0/docs/assets/cropped.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-expose-parameters.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-kubeflow-exec.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-kubeflow-ui.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-nested.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-parallel-map.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-sequential-map.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-workflows-gant.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/argo-workflows-logs.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/mlflow.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/mlflow_example.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/mlflow_step.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/notebook_api_parameters.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/notebook_env_parameters.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/notebook_input_parameters.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/notebook_native_parameters.png +0 -0
- runnable-0.17.0/docs/assets/screenshots/simple_notebook.png +0 -0
- runnable-0.17.0/docs/assets/speed.png +0 -0
- runnable-0.17.0/docs/assets/sport.png +0 -0
- runnable-0.17.0/docs/assets/work_dark.png +0 -0
- runnable-0.17.0/docs/assets/work_light.png +0 -0
- runnable-0.17.0/docs/concepts/catalog.md +0 -87
- runnable-0.17.0/docs/concepts/index.md +0 -55
- runnable-0.17.0/docs/concepts/map.md +0 -227
- runnable-0.17.0/docs/concepts/nesting.md +0 -1354
- runnable-0.17.0/docs/concepts/parallel.md +0 -134
- runnable-0.17.0/docs/concepts/parameters.md +0 -255
- runnable-0.17.0/docs/concepts/pipeline.md +0 -176
- runnable-0.17.0/docs/concepts/run-log.md +0 -144
- runnable-0.17.0/docs/concepts/secrets.md +0 -69
- runnable-0.17.0/docs/concepts/task.md +0 -146
- runnable-0.17.0/docs/configurations/catalog.md +0 -279
- runnable-0.17.0/docs/configurations/executors/argo.md +0 -1650
- runnable-0.17.0/docs/configurations/executors/container-environments.md +0 -71
- runnable-0.17.0/docs/configurations/executors/local-container.md +0 -352
- runnable-0.17.0/docs/configurations/executors/local.md +0 -17
- runnable-0.17.0/docs/configurations/executors/mocked.md +0 -1015
- runnable-0.17.0/docs/configurations/overview.md +0 -80
- runnable-0.17.0/docs/configurations/run-log.md +0 -427
- runnable-0.17.0/docs/configurations/secrets.md +0 -140
- runnable-0.17.0/docs/css/extra.css +0 -3
- runnable-0.17.0/docs/index.md +0 -190
- runnable-0.17.0/docs/iterative.md +0 -44
- runnable-0.17.0/docs/reference.md +0 -146
- runnable-0.17.0/docs/tutorial/overview.md +0 -0
- runnable-0.17.0/docs/tutorial/script-based.md +0 -0
- runnable-0.17.0/docs/tutorial/single-notebook.md +0 -0
- runnable-0.17.0/docs/tutorial/switching-configs.md +0 -0
- runnable-0.17.0/docs/tutorial/using-parallel.md +0 -0
- runnable-0.17.0/docs/tutorial/wrap-up.md +0 -0
- runnable-0.17.0/docs/usage.md +0 -56
- runnable-0.17.0/docs/why-runnable.md +0 -104
- runnable-0.17.0/examples/01-tasks/notebook.py +0 -44
- runnable-0.17.0/examples/01-tasks/notebook.yaml +0 -31
- runnable-0.17.0/examples/01-tasks/python_tasks.py +0 -43
- runnable-0.17.0/examples/01-tasks/python_tasks.yaml +0 -23
- runnable-0.17.0/examples/01-tasks/scripts.py +0 -37
- runnable-0.17.0/examples/01-tasks/scripts.yaml +0 -20
- runnable-0.17.0/examples/01-tasks/stub.py +0 -42
- runnable-0.17.0/examples/01-tasks/stub.yaml +0 -29
- runnable-0.17.0/examples/02-sequential/default_fail.py +0 -36
- runnable-0.17.0/examples/02-sequential/default_fail.yaml +0 -23
- runnable-0.17.0/examples/02-sequential/on_failure_fail.py +0 -42
- runnable-0.17.0/examples/02-sequential/on_failure_fail.yaml +0 -34
- runnable-0.17.0/examples/02-sequential/on_failure_succeed.py +0 -42
- runnable-0.17.0/examples/02-sequential/on_failure_succeed.yaml +0 -34
- runnable-0.17.0/examples/02-sequential/traversal.py +0 -65
- runnable-0.17.0/examples/02-sequential/traversal.yaml +0 -46
- runnable-0.17.0/examples/03-parameters/passing_parameters_notebook.py +0 -59
- runnable-0.17.0/examples/03-parameters/passing_parameters_notebook.yaml +0 -38
- runnable-0.17.0/examples/03-parameters/passing_parameters_python.py +0 -55
- runnable-0.17.0/examples/03-parameters/passing_parameters_python.yaml +0 -38
- runnable-0.17.0/examples/03-parameters/passing_parameters_shell.py +0 -73
- runnable-0.17.0/examples/03-parameters/passing_parameters_shell.yaml +0 -51
- runnable-0.17.0/examples/03-parameters/static_parameters_non_python.py +0 -61
- runnable-0.17.0/examples/03-parameters/static_parameters_non_python.yaml +0 -46
- runnable-0.17.0/examples/03-parameters/static_parameters_python.py +0 -77
- runnable-0.17.0/examples/03-parameters/static_parameters_python.yaml +0 -33
- runnable-0.17.0/examples/04-catalog/catalog.py +0 -131
- runnable-0.17.0/examples/04-catalog/catalog.yaml +0 -115
- runnable-0.17.0/examples/06-parallel/nesting.py +0 -87
- runnable-0.17.0/examples/06-parallel/nesting.yaml +0 -50
- runnable-0.17.0/examples/06-parallel/parallel.py +0 -66
- runnable-0.17.0/examples/06-parallel/parallel.yaml +0 -45
- runnable-0.17.0/examples/07-map/custom_reducer.py +0 -129
- runnable-0.17.0/examples/07-map/custom_reducer.yaml +0 -73
- runnable-0.17.0/examples/07-map/map.py +0 -133
- runnable-0.17.0/examples/07-map/map.yaml +0 -74
- runnable-0.17.0/examples/08-mocking/default.yaml +0 -13
- runnable-0.17.0/examples/08-mocking/patching.yaml +0 -19
- runnable-0.17.0/examples/09-retry/config.yaml +0 -4
- runnable-0.17.0/examples/09-retry/python_tasks.py +0 -60
- runnable-0.17.0/examples/09-retry/python_tasks.yaml +0 -33
- runnable-0.17.0/examples/11-jobs/catalog.py +0 -23
- runnable-0.17.0/examples/11-jobs/catalog.yaml +0 -5
- runnable-0.17.0/examples/11-jobs/k8s-job.yaml +0 -41
- runnable-0.17.0/examples/11-jobs/local-container.yaml +0 -4
- runnable-0.17.0/examples/11-jobs/notebook.yaml +0 -3
- runnable-0.17.0/examples/11-jobs/passing_parameters_python.py +0 -47
- runnable-0.17.0/examples/11-jobs/python_parameters.yaml +0 -11
- runnable-0.17.0/examples/11-jobs/python_tasks.py +0 -44
- runnable-0.17.0/examples/11-jobs/python_tasks.yaml +0 -2
- runnable-0.17.0/examples/11-jobs/scripts.yaml +0 -20
- runnable-0.17.0/examples/Dockerfile.39 +0 -31
- runnable-0.17.0/examples/README.md +0 -93
- runnable-0.17.0/examples/common/functions.py +0 -166
- runnable-0.17.0/examples/common/initial_parameters.yaml +0 -8
- runnable-0.17.0/examples/common/process_chunk.ipynb +0 -70
- runnable-0.17.0/examples/common/read_files.ipynb +0 -43
- runnable-0.17.0/examples/common/read_parameters.ipynb +0 -69
- runnable-0.17.0/examples/common/simple_notebook.ipynb +0 -46
- runnable-0.17.0/examples/common/simple_notebook_mocked.ipynb +0 -46
- runnable-0.17.0/examples/common/write_parameters.ipynb +0 -68
- runnable-0.17.0/examples/comparisons/README.md +0 -174
- runnable-0.17.0/examples/comparisons/kedro/README.md +0 -1
- runnable-0.17.0/examples/comparisons/kfp/README.md +0 -1
- runnable-0.17.0/examples/comparisons/metaflow/main.py +0 -135
- runnable-0.17.0/examples/comparisons/metaflow/parameters.json +0 -46
- runnable-0.17.0/examples/comparisons/runnable/main.py +0 -291
- runnable-0.17.0/examples/comparisons/runnable/runnable_params.yaml +0 -41
- runnable-0.17.0/examples/comparisons/source.py +0 -202
- runnable-0.17.0/examples/configs/argo-config-full.yaml +0 -50
- runnable-0.17.0/examples/configs/argo-config.yaml +0 -18
- runnable-0.17.0/examples/configs/chunked-fs-run_log.yaml +0 -2
- runnable-0.17.0/examples/configs/default.yaml +0 -11
- runnable-0.17.0/examples/configs/dotenv.yaml +0 -4
- runnable-0.17.0/examples/configs/in-memory.yaml +0 -14
- runnable-0.17.0/examples/configs/local-container.yaml +0 -7
- runnable-0.17.0/examples/configs/mocked-config-debug.yaml +0 -12
- runnable-0.17.0/examples/configs/mocked-config-simple.yaml +0 -8
- runnable-0.17.0/examples/configs/mocked-config-unittest.yaml +0 -12
- runnable-0.17.0/examples/configs/mocked-config.yaml +0 -12
- runnable-0.17.0/examples/configs/mocked_map_parameters.yaml +0 -7
- runnable-0.17.0/examples/configs/retry-config.yaml +0 -10
- runnable-0.17.0/examples/executors/argo-map-sequential.yaml +0 -42
- runnable-0.17.0/examples/executors/local-container-override.yaml +0 -23
- runnable-0.17.0/examples/executors/step_overrides_container.py +0 -53
- runnable-0.17.0/examples/executors/step_overrides_container.yaml +0 -35
- runnable-0.17.0/examples/generated-argo-pipeline.yaml +0 -175
- runnable-0.17.0/examples/iris_demo.py +0 -102
- runnable-0.17.0/examples/tutorials/mnist/baseline_comparison.py +0 -312
- runnable-0.17.0/examples/tutorials/mnist/hyper_parameter_tuning.py +0 -206
- runnable-0.17.0/examples/tutorials/mnist/modular_source.py +0 -171
- runnable-0.17.0/examples/tutorials/mnist/parameters.yaml +0 -36
- runnable-0.17.0/examples/tutorials/mnist/parameters_source.py +0 -173
- runnable-0.17.0/examples/tutorials/mnist/source.py +0 -80
- runnable-0.17.0/examples/tutorials/reddit_text_classification/parameters.yaml +0 -9
- runnable-0.17.0/examples/tutorials/reddit_text_classification/pipeline.py +0 -60
- runnable-0.17.0/examples/tutorials/reddit_text_classification/steps.py +0 -131
- runnable-0.17.0/extensions/catalog/pyproject.toml +0 -7
- runnable-0.17.0/extensions/job_executor/pyproject.toml +0 -7
- runnable-0.17.0/extensions/nodes/pyproject.toml +0 -7
- runnable-0.17.0/extensions/pipeline_executor/pyproject.toml +0 -7
- runnable-0.17.0/extensions/run_log_store/pyproject.toml +0 -7
- runnable-0.17.0/extensions/secrets/__init__.py +0 -0
- runnable-0.17.0/extensions/secrets/pyproject.toml +0 -7
- runnable-0.17.0/mkdocs.yml +0 -140
- runnable-0.17.0/tests/__init__.py +0 -0
- runnable-0.17.0/tests/conftest.py +0 -11
- runnable-0.17.0/tests/extensions/__init__.py +0 -0
- runnable-0.17.0/tests/extensions/catalog/test_catalog_extension.py +0 -52
- runnable-0.17.0/tests/extensions/catalog/test_file_system.py +0 -312
- runnable-0.17.0/tests/extensions/pipeline_executor/test_argo_executor.py +0 -138
- runnable-0.17.0/tests/extensions/pipeline_executor/test_generic_executor.py +0 -558
- runnable-0.17.0/tests/extensions/pipeline_executor/test_local_executor.py +0 -14
- runnable-0.17.0/tests/extensions/run_log_store/__init__.py +0 -0
- runnable-0.17.0/tests/extensions/run_log_store/test_file_system.py +0 -155
- runnable-0.17.0/tests/extensions/secrets/test_dotenv.py +0 -17
- runnable-0.17.0/tests/extensions/test_node_extensions.py +0 -265
- runnable-0.17.0/tests/runnable/test_catalog.py +0 -61
- runnable-0.17.0/tests/runnable/test_datastore.py +0 -551
- runnable-0.17.0/tests/runnable/test_executor.py +0 -30
- runnable-0.17.0/tests/runnable/test_graph.py +0 -451
- runnable-0.17.0/tests/runnable/test_nodes.py +0 -439
- runnable-0.17.0/tests/runnable/test_parmeters.py +0 -131
- runnable-0.17.0/tests/runnable/test_sdk.py +0 -37
- runnable-0.17.0/tests/runnable/test_secrets.py +0 -33
- runnable-0.17.0/tests/runnable/test_utils.py +0 -453
- runnable-0.17.0/tests/test_examples.py +0 -210
- runnable-0.17.0/tox.ini +0 -19
- runnable-0.17.0/uv.lock +0 -2441
- {runnable-0.17.0 → runnable-0.18.0}/.gitignore +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/LICENSE +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/__init__.py +0 -0
- /runnable-0.17.0/CONTRIBUTING.md → /runnable-0.18.0/extensions/catalog/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/catalog/file_system.py +0 -0
- /runnable-0.17.0/docs/architecture/yaml.md → /runnable-0.18.0/extensions/job_executor/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/job_executor/__init__.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/job_executor/k8s.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/job_executor/k8s_job_spec.yaml +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/job_executor/local.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/job_executor/local_container.py +0 -0
- /runnable-0.17.0/docs/configurations/executors/retry.md → /runnable-0.18.0/extensions/nodes/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/nodes/nodes.py +0 -0
- /runnable-0.17.0/docs/tutorial/dynamic-looping.md → /runnable-0.18.0/extensions/pipeline_executor/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/pipeline_executor/__init__.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/pipeline_executor/argo.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/pipeline_executor/argo_specification.yaml +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/pipeline_executor/local.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/pipeline_executor/local_container.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/pipeline_executor/mocked.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/pipeline_executor/retry.py +0 -0
- /runnable-0.17.0/docs/tutorial/modular-dags.md → /runnable-0.18.0/extensions/run_log_store/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/run_log_store/__init__.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/run_log_store/chunked_fs.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/run_log_store/db/implementation_FF.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/run_log_store/db/integration_FF.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/run_log_store/file_system.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/run_log_store/generic_chunked.py +0 -0
- /runnable-0.17.0/docs/tutorial/modular-notebooks.md → /runnable-0.18.0/extensions/secrets/README.md +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/extensions/secrets/dotenv.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/__init__.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/catalog.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/cli.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/context.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/datastore.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/defaults.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/entrypoints.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/exceptions.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/executor.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/graph.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/names.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/nodes.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/parameters.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/pickler.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/secrets.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/tasks.py +0 -0
- {runnable-0.17.0 → runnable-0.18.0}/runnable/utils.py +0 -0
@@ -1,23 +1,17 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: runnable
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.18.0
|
4
4
|
Summary: Add your description here
|
5
5
|
Author-email: "Vammi, Vijay" <vijay.vammi@astrazeneca.com>
|
6
6
|
License-File: LICENSE
|
7
7
|
Requires-Python: >=3.10
|
8
|
-
Requires-Dist: catalog
|
9
8
|
Requires-Dist: click-plugins>=1.1.1
|
10
9
|
Requires-Dist: click<=8.1.3
|
11
10
|
Requires-Dist: dill>=0.3.9
|
12
|
-
Requires-Dist: job-executor
|
13
|
-
Requires-Dist: nodes
|
14
|
-
Requires-Dist: pipeline-executor
|
15
11
|
Requires-Dist: pydantic>=2.10.3
|
16
12
|
Requires-Dist: python-dotenv>=1.0.1
|
17
13
|
Requires-Dist: rich>=13.9.4
|
18
14
|
Requires-Dist: ruamel-yaml>=0.18.6
|
19
|
-
Requires-Dist: run-log-store
|
20
|
-
Requires-Dist: secrets
|
21
15
|
Requires-Dist: setuptools>=75.6.0
|
22
16
|
Requires-Dist: stevedore>=5.4.0
|
23
17
|
Requires-Dist: typer>=0.15.1
|
@@ -0,0 +1,14 @@
|
|
1
|
+
[project]
|
2
|
+
name = "catalog"
|
3
|
+
version = "0.0.0"
|
4
|
+
description = "Add your description here"
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.10"
|
7
|
+
dependencies = []
|
8
|
+
|
9
|
+
[build-system]
|
10
|
+
requires = ["hatchling"]
|
11
|
+
build-backend = "hatchling.build"
|
12
|
+
|
13
|
+
[tool.hatch.build.targets.wheel]
|
14
|
+
packages = ["."]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
[project]
|
2
|
+
name = "job_executor"
|
3
|
+
version = "0.0.0"
|
4
|
+
description = "Add your description here"
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.10"
|
7
|
+
dependencies = []
|
8
|
+
|
9
|
+
|
10
|
+
[build-system]
|
11
|
+
requires = ["hatchling"]
|
12
|
+
build-backend = "hatchling.build"
|
13
|
+
|
14
|
+
|
15
|
+
[tool.hatch.build.targets.wheel]
|
16
|
+
packages = ["."]
|
@@ -0,0 +1,15 @@
|
|
1
|
+
[project]
|
2
|
+
name = "nodes"
|
3
|
+
version = "0.0.0"
|
4
|
+
description = "Add your description here"
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.10"
|
7
|
+
dependencies = []
|
8
|
+
|
9
|
+
|
10
|
+
[build-system]
|
11
|
+
requires = ["hatchling"]
|
12
|
+
build-backend = "hatchling.build"
|
13
|
+
|
14
|
+
[tool.hatch.build.targets.wheel]
|
15
|
+
packages = ["."]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
[project]
|
2
|
+
name = "pipeline_executor"
|
3
|
+
version = "0.0.0"
|
4
|
+
description = "Add your description here"
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.10"
|
7
|
+
dependencies = []
|
8
|
+
|
9
|
+
|
10
|
+
[build-system]
|
11
|
+
requires = ["hatchling"]
|
12
|
+
build-backend = "hatchling.build"
|
13
|
+
|
14
|
+
|
15
|
+
[tool.hatch.build.targets.wheel]
|
16
|
+
packages = ["."]
|
@@ -0,0 +1,15 @@
|
|
1
|
+
[project]
|
2
|
+
name = "run_log_store"
|
3
|
+
version = "0.0.0"
|
4
|
+
description = "Extensions to run log store"
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.10"
|
7
|
+
dependencies = []
|
8
|
+
|
9
|
+
|
10
|
+
[build-system]
|
11
|
+
requires = ["hatchling"]
|
12
|
+
build-backend = "hatchling.build"
|
13
|
+
|
14
|
+
[tool.hatch.build.targets.wheel]
|
15
|
+
packages = ["."]
|
@@ -0,0 +1,15 @@
|
|
1
|
+
[project]
|
2
|
+
name = "secrets"
|
3
|
+
version = "0.0.0"
|
4
|
+
description = "Extension to manage secrets"
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.10"
|
7
|
+
dependencies = []
|
8
|
+
|
9
|
+
|
10
|
+
[build-system]
|
11
|
+
requires = ["hatchling"]
|
12
|
+
build-backend = "hatchling.build"
|
13
|
+
|
14
|
+
[tool.hatch.build.targets.wheel]
|
15
|
+
packages = ["."]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "runnable"
|
3
|
-
version = "0.
|
3
|
+
version = "0.18.0"
|
4
4
|
description = "Add your description here"
|
5
5
|
readme = "README.md"
|
6
6
|
authors = [
|
@@ -18,17 +18,8 @@ dependencies = [
|
|
18
18
|
"setuptools>=75.6.0",
|
19
19
|
"python-dotenv>=1.0.1",
|
20
20
|
"typer>=0.15.1",
|
21
|
-
"nodes",
|
22
|
-
"secrets",
|
23
|
-
"catalog",
|
24
|
-
"run_log_store",
|
25
|
-
"pipeline_executor",
|
26
|
-
"job_executor",
|
27
21
|
]
|
28
22
|
|
29
|
-
[project.scripts]
|
30
|
-
runnable = 'runnable.cli:app'
|
31
|
-
|
32
23
|
[project.optional-dependencies]
|
33
24
|
docker = [
|
34
25
|
"docker>=7.1.0",
|
@@ -43,10 +34,6 @@ k8s = [
|
|
43
34
|
"kubernetes>=31.0.0",
|
44
35
|
]
|
45
36
|
|
46
|
-
[build-system]
|
47
|
-
requires = ["hatchling"]
|
48
|
-
build-backend = "hatchling.build"
|
49
|
-
|
50
37
|
[dependency-groups]
|
51
38
|
dev = [
|
52
39
|
"pytest-cov>=6.0.0",
|
@@ -68,7 +55,13 @@ release = [
|
|
68
55
|
]
|
69
56
|
|
70
57
|
[tool.uv.workspace]
|
71
|
-
members = ["extensions
|
58
|
+
members = ["extensions/catalog",
|
59
|
+
"extensions/job_executor",
|
60
|
+
"extensions/nodes",
|
61
|
+
"extensions/pipeline_executor",
|
62
|
+
"extensions/run_log_store",
|
63
|
+
"extensions/secrets",
|
64
|
+
]
|
72
65
|
|
73
66
|
[tool.uv.sources]
|
74
67
|
nodes = {workspace = true}
|
@@ -79,6 +72,22 @@ pipeline_executor = {workspace = true}
|
|
79
72
|
job_executor = {workspace = true}
|
80
73
|
|
81
74
|
|
75
|
+
[project.scripts]
|
76
|
+
runnable = 'runnable.cli:app'
|
77
|
+
|
78
|
+
[build-system]
|
79
|
+
requires = ["hatchling"]
|
80
|
+
build-backend = "hatchling.build"
|
81
|
+
|
82
|
+
[tool.hatch.build]
|
83
|
+
ignore-vcs = true
|
84
|
+
include = [
|
85
|
+
"/runnable",
|
86
|
+
"/extensions",
|
87
|
+
]
|
88
|
+
|
89
|
+
|
90
|
+
# Plugin systems
|
82
91
|
[project.entry-points.'pipeline_executor']
|
83
92
|
"local" = "extensions.pipeline_executor.local:LocalExecutor"
|
84
93
|
"local-container" = "extensions.pipeline_executor.local_container:LocalContainerExecutor"
|
@@ -127,6 +136,7 @@ file-system = "extensions.run_log_store.file_system:FileSystemRunLogstore"
|
|
127
136
|
"notebook" = "runnable.tasks:NotebookTaskType"
|
128
137
|
|
129
138
|
|
139
|
+
# Release configuration
|
130
140
|
[tool.semantic_release]
|
131
141
|
commit_parser = "angular"
|
132
142
|
major_on_zero = true
|
@@ -84,7 +84,7 @@ class BaseTraversal(ABC, BaseModel):
|
|
84
84
|
next_node: str = Field(default="", serialization_alias="next_node")
|
85
85
|
terminate_with_success: bool = Field(default=False, exclude=True)
|
86
86
|
terminate_with_failure: bool = Field(default=False, exclude=True)
|
87
|
-
on_failure:
|
87
|
+
on_failure: Optional[Pipeline] = Field(default=None)
|
88
88
|
|
89
89
|
model_config = ConfigDict(extra="forbid")
|
90
90
|
|
@@ -117,18 +117,6 @@ class BaseTraversal(ABC, BaseModel):
|
|
117
117
|
|
118
118
|
return other
|
119
119
|
|
120
|
-
def depends_on(self, node: StepType) -> Self:
|
121
|
-
assert not isinstance(node, Success)
|
122
|
-
assert not isinstance(node, Fail)
|
123
|
-
|
124
|
-
if node.next_node:
|
125
|
-
raise Exception(
|
126
|
-
f"The {node} node already has a next node: {node.next_node}"
|
127
|
-
)
|
128
|
-
|
129
|
-
node.next_node = self.name
|
130
|
-
return self
|
131
|
-
|
132
120
|
@model_validator(mode="after")
|
133
121
|
def validate_terminations(self) -> Self:
|
134
122
|
if self.terminate_with_failure and self.terminate_with_success:
|
@@ -175,7 +163,6 @@ class BaseTask(BaseTraversal):
|
|
175
163
|
if isinstance(x, str):
|
176
164
|
task_returns.append(TaskReturns(name=x, kind="json"))
|
177
165
|
continue
|
178
|
-
|
179
166
|
# Its already task returns
|
180
167
|
task_returns.append(x)
|
181
168
|
|
@@ -188,6 +175,9 @@ class BaseTask(BaseTraversal):
|
|
188
175
|
"A node not being terminated must have a user defined next node"
|
189
176
|
)
|
190
177
|
|
178
|
+
if self.on_failure:
|
179
|
+
self.on_failure = self.on_failure.steps[0].name # type: ignore
|
180
|
+
|
191
181
|
return TaskNode.parse_from_config(
|
192
182
|
self.model_dump(exclude_none=True, by_alias=True)
|
193
183
|
)
|
@@ -605,8 +595,6 @@ class Pipeline(BaseModel):
|
|
605
595
|
The order of steps is important as it determines the order of execution.
|
606
596
|
Any on failure behavior should the first step in ```on_failure``` pipelines.
|
607
597
|
|
608
|
-
|
609
|
-
|
610
598
|
on_failure (List[List[Pipeline], optional): A list of Pipelines to execute in case of failure.
|
611
599
|
|
612
600
|
For example, for the below pipeline:
|
@@ -624,7 +612,7 @@ class Pipeline(BaseModel):
|
|
624
612
|
|
625
613
|
"""
|
626
614
|
|
627
|
-
steps: List[
|
615
|
+
steps: List[StepType]
|
628
616
|
name: str = ""
|
629
617
|
description: str = ""
|
630
618
|
|
@@ -637,114 +625,67 @@ class Pipeline(BaseModel):
|
|
637
625
|
_dag: graph.Graph = PrivateAttr()
|
638
626
|
model_config = ConfigDict(extra="forbid")
|
639
627
|
|
640
|
-
def _validate_path(self, path: List[StepType], failure_path: bool = False) -> None:
|
641
|
-
# TODO: Drastically simplify this
|
642
|
-
# Check if one and only one step terminates with success
|
643
|
-
# Check no more than one step terminates with failure
|
644
|
-
|
645
|
-
reached_success = False
|
646
|
-
reached_failure = False
|
647
|
-
|
648
|
-
for step in path:
|
649
|
-
if step.terminate_with_success:
|
650
|
-
if reached_success:
|
651
|
-
raise Exception(
|
652
|
-
"A pipeline cannot have more than one step that terminates with success"
|
653
|
-
)
|
654
|
-
reached_success = True
|
655
|
-
continue
|
656
|
-
if step.terminate_with_failure:
|
657
|
-
if reached_failure:
|
658
|
-
raise Exception(
|
659
|
-
"A pipeline cannot have more than one step that terminates with failure"
|
660
|
-
)
|
661
|
-
reached_failure = True
|
662
|
-
|
663
|
-
if not reached_success and not reached_failure:
|
664
|
-
raise Exception(
|
665
|
-
"A pipeline must have at least one step that terminates with success"
|
666
|
-
)
|
667
|
-
|
668
|
-
def _construct_path(self, path: List[StepType]) -> None:
|
669
|
-
prev_step = path[0]
|
670
|
-
|
671
|
-
for step in path:
|
672
|
-
if step == prev_step:
|
673
|
-
continue
|
674
|
-
|
675
|
-
if prev_step.terminate_with_success or prev_step.terminate_with_failure:
|
676
|
-
raise Exception(
|
677
|
-
f"A step that terminates with success/failure cannot have a next step: {prev_step}"
|
678
|
-
)
|
679
|
-
|
680
|
-
if prev_step.next_node and prev_step.next_node not in ["success", "fail"]:
|
681
|
-
raise Exception(f"Step already has a next node: {prev_step} ")
|
682
|
-
|
683
|
-
prev_step.next_node = step.name
|
684
|
-
prev_step = step
|
685
|
-
|
686
628
|
def model_post_init(self, __context: Any) -> None:
|
687
629
|
"""
|
688
630
|
The sequence of steps can either be:
|
689
|
-
[step1, step2,..., stepN
|
631
|
+
[step1, step2,..., stepN]
|
690
632
|
indicates:
|
691
633
|
- step1 > step2 > ... > stepN
|
692
634
|
- We expect terminate with success or fail to be explicitly stated on a step.
|
693
635
|
- If it is stated, the step cannot have a next step defined apart from "success" and "fail".
|
694
|
-
|
695
|
-
The inner list of steps is only to accommodate on-failure behaviors.
|
696
|
-
- For sake of simplicity, lets assume that it has the same behavior as the happy pipeline.
|
697
|
-
- A task which was already seen should not be part of this.
|
698
|
-
- There should be at least one step which terminates with success
|
699
|
-
|
700
636
|
Any definition of pipeline should have one node that terminates with success.
|
701
637
|
"""
|
702
|
-
#
|
703
|
-
#
|
638
|
+
# The last step of the pipeline is defaulted to be a success step
|
639
|
+
# unless it is explicitly stated to terminate with failure.
|
640
|
+
terminal_step: StepType = self.steps[-1]
|
641
|
+
if not terminal_step.terminate_with_failure:
|
642
|
+
terminal_step.terminate_with_success = True
|
704
643
|
|
705
|
-
|
706
|
-
|
644
|
+
# assert that there is only one termination node with success or failure
|
645
|
+
# Assert that there are no duplicate step names
|
646
|
+
observed: Dict[str, str] = {}
|
647
|
+
count_termination: int = 0
|
707
648
|
|
708
649
|
for step in self.steps:
|
709
650
|
if isinstance(
|
710
651
|
step, (Stub, PythonTask, NotebookTask, ShellTask, Parallel, Map)
|
711
652
|
):
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
# Check all paths are valid and construct the path
|
720
|
-
paths = [success_path] + on_failure_paths
|
721
|
-
failure_path = False
|
722
|
-
for path in paths:
|
723
|
-
self._validate_path(path, failure_path)
|
724
|
-
self._construct_path(path)
|
725
|
-
|
726
|
-
failure_path = True
|
653
|
+
if step.terminate_with_success or step.terminate_with_failure:
|
654
|
+
count_termination += 1
|
655
|
+
if step.name in observed:
|
656
|
+
raise Exception(
|
657
|
+
f"Step names should be unique. Found duplicate: {step.name}"
|
658
|
+
)
|
659
|
+
observed[step.name] = step.name
|
727
660
|
|
728
|
-
|
661
|
+
if count_termination > 1:
|
662
|
+
raise AssertionError(
|
663
|
+
"A pipeline can only have one termination node with success or failure"
|
664
|
+
)
|
729
665
|
|
730
|
-
|
731
|
-
|
732
|
-
|
666
|
+
# link the steps by assigning the next_node name to be that name of the node
|
667
|
+
# immediately after it.
|
668
|
+
for i in range(len(self.steps) - 1):
|
669
|
+
self.steps[i] >> self.steps[i + 1]
|
733
670
|
|
734
|
-
|
735
|
-
|
671
|
+
# Add any on_failure pipelines to the steps
|
672
|
+
gathered_on_failure: List[StepType] = []
|
673
|
+
for step in self.steps:
|
674
|
+
if step.on_failure:
|
675
|
+
gathered_on_failure.extend(step.on_failure.steps)
|
736
676
|
|
737
677
|
self._dag = graph.Graph(
|
738
|
-
start_at=
|
678
|
+
start_at=self.steps[0].name,
|
739
679
|
description=self.description,
|
740
680
|
internal_branch_name=self.internal_branch_name,
|
741
681
|
)
|
742
682
|
|
743
|
-
|
683
|
+
self.steps.extend(gathered_on_failure)
|
684
|
+
|
685
|
+
for step in self.steps:
|
744
686
|
self._dag.add_node(step.create_node())
|
745
687
|
|
746
|
-
|
747
|
-
self._dag.add_terminal_nodes()
|
688
|
+
self._dag.add_terminal_nodes()
|
748
689
|
|
749
690
|
self._dag.check_graph()
|
750
691
|
|
runnable-0.17.0/.dockerignore
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
name: docs
|
2
|
-
on:
|
3
|
-
push:
|
4
|
-
branches:
|
5
|
-
- main
|
6
|
-
|
7
|
-
jobs:
|
8
|
-
deploy:
|
9
|
-
runs-on: ubuntu-latest
|
10
|
-
steps:
|
11
|
-
- uses: actions/checkout@v2
|
12
|
-
- name: Install uv
|
13
|
-
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
14
|
-
- name: "Set up Python"
|
15
|
-
run: uv python install
|
16
|
-
- run: |
|
17
|
-
uv sync --only-group docs
|
18
|
-
uv run mkdocs gh-deploy --force
|
@@ -1,53 +0,0 @@
|
|
1
|
-
on:
|
2
|
-
pull_request:
|
3
|
-
paths-ignore:
|
4
|
-
- "docs/**"
|
5
|
-
- "**.md"
|
6
|
-
- "examples/**"
|
7
|
-
- "mkdocs.yml"
|
8
|
-
branches:
|
9
|
-
- "main"
|
10
|
-
workflow_dispatch:
|
11
|
-
workflow_call:
|
12
|
-
|
13
|
-
jobs:
|
14
|
-
PRCheck:
|
15
|
-
runs-on: ubuntu-latest
|
16
|
-
steps:
|
17
|
-
- uses: actions/checkout@v3
|
18
|
-
- run: |
|
19
|
-
# Download the binary
|
20
|
-
curl -sLO https://github.com/argoproj/argo-workflows/releases/download/v3.5.4/argo-linux-amd64.gz
|
21
|
-
|
22
|
-
# Unzip
|
23
|
-
gunzip argo-linux-amd64.gz
|
24
|
-
|
25
|
-
# Make binary executable
|
26
|
-
chmod +x argo-linux-amd64
|
27
|
-
|
28
|
-
# Move binary to path
|
29
|
-
mv ./argo-linux-amd64 /usr/local/bin/argo
|
30
|
-
|
31
|
-
# Test installation
|
32
|
-
argo version
|
33
|
-
|
34
|
-
- name: Install uv
|
35
|
-
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
36
|
-
|
37
|
-
- name: "Set up Python"
|
38
|
-
run: uv python install
|
39
|
-
|
40
|
-
- name: Install the project
|
41
|
-
run: uv sync --all-extras --dev
|
42
|
-
|
43
|
-
- name: Run lint
|
44
|
-
# For example, using `flake8`
|
45
|
-
run: uvx ruff format
|
46
|
-
|
47
|
-
- name: Run tests
|
48
|
-
run: |
|
49
|
-
export PYTHONDONTWRITEBYTECODE=1
|
50
|
-
uv run pytest -m "not container"
|
51
|
-
|
52
|
-
- name: mypy
|
53
|
-
run: uv run mypy runnable extensions
|
@@ -1,101 +0,0 @@
|
|
1
|
-
on:
|
2
|
-
push:
|
3
|
-
paths-ignore:
|
4
|
-
- "docs/**"
|
5
|
-
- "**.md"
|
6
|
-
- "examples/**"
|
7
|
-
branches:
|
8
|
-
- "main"
|
9
|
-
|
10
|
-
|
11
|
-
jobs:
|
12
|
-
PRCheck:
|
13
|
-
uses: "./.github/workflows/pr.yaml"
|
14
|
-
|
15
|
-
Release:
|
16
|
-
runs-on: ubuntu-latest
|
17
|
-
needs: PRCheck
|
18
|
-
steps:
|
19
|
-
- uses: actions/checkout@v3
|
20
|
-
with:
|
21
|
-
fetch-depth: 0
|
22
|
-
- name: Install uv
|
23
|
-
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
24
|
-
|
25
|
-
- name: "Set up Python"
|
26
|
-
run: uv python install
|
27
|
-
- run: |
|
28
|
-
uv sync --only-group release
|
29
|
-
- name: Figure version
|
30
|
-
continue-on-error: true
|
31
|
-
env:
|
32
|
-
GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
33
|
-
id: last_tag
|
34
|
-
run: |
|
35
|
-
CURRENT=$(uv run semantic-release -v --noop version --print-last-released)
|
36
|
-
echo "Current: $CURRENT"
|
37
|
-
|
38
|
-
VERSION=$(uv run semantic-release -v --noop version --print)
|
39
|
-
echo "new: $VERSION"
|
40
|
-
|
41
|
-
if [ "$CURRENT" == "$VERSION" ]; then
|
42
|
-
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
43
|
-
exit 1
|
44
|
-
fi
|
45
|
-
|
46
|
-
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
47
|
-
exit 0
|
48
|
-
|
49
|
-
- name: Apply new tag
|
50
|
-
if: steps.last_tag.outcome == 'success'
|
51
|
-
env:
|
52
|
-
VERSION: ${{ steps.last_tag.outputs.version }}
|
53
|
-
uses: actions/github-script@v6
|
54
|
-
with:
|
55
|
-
script: |
|
56
|
-
const {VERSION} = process.env
|
57
|
-
const tag = `refs/tags/${VERSION}`
|
58
|
-
await github.rest.git.createRef({
|
59
|
-
owner: context.repo.owner,
|
60
|
-
repo: context.repo.repo,
|
61
|
-
ref: tag,
|
62
|
-
sha: context.sha
|
63
|
-
})
|
64
|
-
|
65
|
-
- name: Publish to PyPI
|
66
|
-
if: steps.last_tag.outcome == 'success'
|
67
|
-
env:
|
68
|
-
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
69
|
-
APPLY_TAG: ${{ steps.last_tag.outputs.version }}
|
70
|
-
run: |
|
71
|
-
uvx --from=toml-cli toml set --toml-path=pyproject.toml project.version $APPLY_TAG
|
72
|
-
uv build
|
73
|
-
uv publish --token $PYPI_TOKEN
|
74
|
-
|
75
|
-
- name: test_installation
|
76
|
-
if: steps.last_tag.outcome == 'success'
|
77
|
-
run: uv run --with runnable --no-project -- python -c "import runnable"
|
78
|
-
|
79
|
-
- name: "Create release"
|
80
|
-
if: steps.last_tag.outcome == 'success'
|
81
|
-
env:
|
82
|
-
RELEASE_TAG: ${{ steps.last_tag.outputs.version }}
|
83
|
-
uses: "actions/github-script@v6"
|
84
|
-
with:
|
85
|
-
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
86
|
-
script: |
|
87
|
-
try {
|
88
|
-
const response = await github.rest.repos.createRelease({
|
89
|
-
draft: false,
|
90
|
-
generate_release_notes: true,
|
91
|
-
name: process.env.RELEASE_TAG,
|
92
|
-
owner: context.repo.owner,
|
93
|
-
prerelease: false,
|
94
|
-
repo: context.repo.repo,
|
95
|
-
tag_name: process.env.RELEASE_TAG,
|
96
|
-
});
|
97
|
-
core.exportVariable('RELEASE_ID', response.data.id);
|
98
|
-
core.exportVariable('RELEASE_UPLOAD_URL', response.data.upload_url);
|
99
|
-
} catch (error) {
|
100
|
-
core.setFailed(error.message);
|
101
|
-
}
|
runnable-0.17.0/.mypy.ini
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
[mypy]
|
2
|
-
exclude = _*FF.py
|
3
|
-
ignore_missing_imports = True
|
4
|
-
plugins = pydantic.mypy
|
5
|
-
show_error_codes = True
|
6
|
-
|
7
|
-
follow_imports = silent
|
8
|
-
warn_redundant_casts = True
|
9
|
-
warn_unused_ignores = True
|
10
|
-
#disallow_any_generics = True # This complicates it a lot
|
11
|
-
check_untyped_defs = True
|
12
|
-
implicit_reexport = True
|
13
|
-
|
14
|
-
# for strict mypy: (this is the tricky one :-))
|
15
|
-
#disallow_untyped_defs = True
|
16
|
-
|
17
|
-
[pydantic-mypy]
|
18
|
-
init_forbid_extra = True
|
19
|
-
init_typed = True
|
20
|
-
warn_required_dynamic_aliases = True
|
21
|
-
warn_untyped_fields = True
|
22
|
-
|
23
|
-
[mypy-ruamel.*]
|
24
|
-
ignore_missing_imports = True
|
25
|
-
|
26
|
-
[mypy-docker.*]
|
27
|
-
ignore_missing_imports = True
|
28
|
-
|
29
|
-
[mypy-pkg_resources.*]
|
30
|
-
ignore_missing_imports = True
|
31
|
-
|
32
|
-
[mypy-pydantic.*]
|
33
|
-
ignore_missing_imports = True
|
34
|
-
|
35
|
-
[mypy-yachalk.*]
|
36
|
-
ignore_missing_imports = True
|
37
|
-
|
38
|
-
[mypy-stevedore.*]
|
39
|
-
ignore_missing_imports = True
|
40
|
-
|
41
|
-
[mypy-papermill.*]
|
42
|
-
ignore_missing_imports = True
|
43
|
-
|
44
|
-
[mypy-click.*]
|
45
|
-
ignore_missing_imports = True
|
46
|
-
|
47
|
-
[mypy-click_plugins.*]
|
48
|
-
ignore_missing_imports = True
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# See https://pre-commit.com for more information
|
2
|
-
# See https://pre-commit.com/hooks.html for more hooks
|
3
|
-
# using a non-local repo creates a venv for the pre-commit
|
4
|
-
repos:
|
5
|
-
- repo: https://github.com/pre-commit/pre-commit-hooks
|
6
|
-
rev: v3.2.0
|
7
|
-
hooks:
|
8
|
-
- id: trailing-whitespace
|
9
|
-
- id: end-of-file-fixer
|
10
|
-
- id: check-yaml
|
11
|
-
exclude: mkdocs.yml
|
12
|
-
- id: check-added-large-files
|
13
|
-
exclude: assets
|
14
|
-
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
15
|
-
# Ruff version.
|
16
|
-
rev: "v0.8.3"
|
17
|
-
hooks:
|
18
|
-
- id: ruff
|
19
|
-
args: [--fix, --exit-non-zero-on-fix]
|
20
|
-
exclude: ^tests
|
21
|
-
- id: ruff-format
|
22
|
-
exclude: ^tests
|
23
|
-
- repo: https://github.com/jorisroovers/gitlint
|
24
|
-
rev: v0.19.1
|
25
|
-
hooks:
|
26
|
-
- id: gitlint
|
27
|
-
args:
|
28
|
-
[
|
29
|
-
--contrib=CT1,
|
30
|
-
--ignore=title-trailing-punctuation,
|
31
|
-
--ignore=T3,
|
32
|
-
--ignore=B6,
|
33
|
-
--msg-filename,
|
34
|
-
]
|
runnable-0.17.0/.python-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.10
|