runnable 0.12.3__tar.gz → 0.14.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (238) hide show
  1. runnable-0.14.0/.dockerignore +8 -0
  2. runnable-0.14.0/.github/workflows/docs.yaml +18 -0
  3. runnable-0.14.0/.github/workflows/pr.yaml +53 -0
  4. runnable-0.14.0/.github/workflows/release.yaml +101 -0
  5. runnable-0.14.0/.gitignore +157 -0
  6. runnable-0.14.0/.mypy.ini +48 -0
  7. runnable-0.14.0/.pre-commit-config.yaml +34 -0
  8. runnable-0.14.0/.python-version +1 -0
  9. runnable-0.14.0/CHANGELOG.md +1897 -0
  10. {runnable-0.12.3 → runnable-0.14.0}/PKG-INFO +25 -31
  11. runnable-0.14.0/docs/assets/cropped.png +0 -0
  12. runnable-0.14.0/docs/assets/screenshots/argo-expose-parameters.png +0 -0
  13. runnable-0.14.0/docs/assets/screenshots/argo-kubeflow-exec.png +0 -0
  14. runnable-0.14.0/docs/assets/screenshots/argo-kubeflow-ui.png +0 -0
  15. runnable-0.14.0/docs/assets/screenshots/argo-nested.png +0 -0
  16. runnable-0.14.0/docs/assets/screenshots/argo-parallel-map.png +0 -0
  17. runnable-0.14.0/docs/assets/screenshots/argo-sequential-map.png +0 -0
  18. runnable-0.14.0/docs/assets/screenshots/argo-workflows-gant.png +0 -0
  19. runnable-0.14.0/docs/assets/screenshots/argo-workflows-logs.png +0 -0
  20. runnable-0.14.0/docs/assets/screenshots/mlflow.png +0 -0
  21. runnable-0.14.0/docs/assets/screenshots/mlflow_example.png +0 -0
  22. runnable-0.14.0/docs/assets/screenshots/mlflow_step.png +0 -0
  23. runnable-0.14.0/docs/assets/screenshots/notebook_api_parameters.png +0 -0
  24. runnable-0.14.0/docs/assets/screenshots/notebook_env_parameters.png +0 -0
  25. runnable-0.14.0/docs/assets/screenshots/notebook_input_parameters.png +0 -0
  26. runnable-0.14.0/docs/assets/screenshots/notebook_native_parameters.png +0 -0
  27. runnable-0.14.0/docs/assets/screenshots/simple_notebook.png +0 -0
  28. runnable-0.14.0/docs/assets/speed.png +0 -0
  29. runnable-0.14.0/docs/assets/sport.png +0 -0
  30. runnable-0.14.0/docs/assets/work_dark.png +0 -0
  31. runnable-0.14.0/docs/assets/work_light.png +0 -0
  32. runnable-0.14.0/docs/concepts/catalog.md +87 -0
  33. runnable-0.14.0/docs/concepts/index.md +55 -0
  34. runnable-0.14.0/docs/concepts/map.md +227 -0
  35. runnable-0.14.0/docs/concepts/nesting.md +1354 -0
  36. runnable-0.14.0/docs/concepts/parallel.md +134 -0
  37. runnable-0.14.0/docs/concepts/parameters.md +255 -0
  38. runnable-0.14.0/docs/concepts/pipeline.md +176 -0
  39. runnable-0.14.0/docs/concepts/run-log.md +144 -0
  40. runnable-0.14.0/docs/concepts/secrets.md +69 -0
  41. runnable-0.14.0/docs/concepts/task.md +146 -0
  42. runnable-0.14.0/docs/configurations/catalog.md +279 -0
  43. runnable-0.14.0/docs/configurations/executors/argo.md +1650 -0
  44. runnable-0.14.0/docs/configurations/executors/container-environments.md +71 -0
  45. runnable-0.14.0/docs/configurations/executors/local-container.md +352 -0
  46. runnable-0.14.0/docs/configurations/executors/local.md +17 -0
  47. runnable-0.14.0/docs/configurations/executors/mocked.md +1015 -0
  48. runnable-0.14.0/docs/configurations/overview.md +80 -0
  49. runnable-0.14.0/docs/configurations/run-log.md +427 -0
  50. runnable-0.14.0/docs/configurations/secrets.md +140 -0
  51. runnable-0.14.0/docs/css/extra.css +3 -0
  52. runnable-0.14.0/docs/index.md +190 -0
  53. runnable-0.14.0/docs/iterative.md +44 -0
  54. runnable-0.14.0/docs/reference.md +146 -0
  55. runnable-0.14.0/docs/usage.md +56 -0
  56. runnable-0.14.0/docs/why-runnable.md +104 -0
  57. runnable-0.14.0/examples/01-tasks/notebook.py +44 -0
  58. runnable-0.14.0/examples/01-tasks/notebook.yaml +31 -0
  59. runnable-0.14.0/examples/01-tasks/python_tasks.py +44 -0
  60. runnable-0.14.0/examples/01-tasks/python_tasks.yaml +23 -0
  61. runnable-0.14.0/examples/01-tasks/scripts.py +37 -0
  62. runnable-0.14.0/examples/01-tasks/scripts.yaml +20 -0
  63. runnable-0.14.0/examples/01-tasks/stub.py +42 -0
  64. runnable-0.14.0/examples/01-tasks/stub.yaml +29 -0
  65. runnable-0.14.0/examples/02-sequential/default_fail.py +36 -0
  66. runnable-0.14.0/examples/02-sequential/default_fail.yaml +23 -0
  67. runnable-0.14.0/examples/02-sequential/on_failure_fail.py +42 -0
  68. runnable-0.14.0/examples/02-sequential/on_failure_fail.yaml +34 -0
  69. runnable-0.14.0/examples/02-sequential/on_failure_succeed.py +42 -0
  70. runnable-0.14.0/examples/02-sequential/on_failure_succeed.yaml +34 -0
  71. runnable-0.14.0/examples/02-sequential/traversal.py +65 -0
  72. runnable-0.14.0/examples/02-sequential/traversal.yaml +46 -0
  73. runnable-0.14.0/examples/03-parameters/passing_parameters_notebook.py +59 -0
  74. runnable-0.14.0/examples/03-parameters/passing_parameters_notebook.yaml +38 -0
  75. runnable-0.14.0/examples/03-parameters/passing_parameters_python.py +55 -0
  76. runnable-0.14.0/examples/03-parameters/passing_parameters_python.yaml +38 -0
  77. runnable-0.14.0/examples/03-parameters/passing_parameters_shell.py +73 -0
  78. runnable-0.14.0/examples/03-parameters/passing_parameters_shell.yaml +51 -0
  79. runnable-0.14.0/examples/03-parameters/static_parameters_non_python.py +61 -0
  80. runnable-0.14.0/examples/03-parameters/static_parameters_non_python.yaml +46 -0
  81. runnable-0.14.0/examples/03-parameters/static_parameters_python.py +77 -0
  82. runnable-0.14.0/examples/03-parameters/static_parameters_python.yaml +33 -0
  83. runnable-0.14.0/examples/04-catalog/catalog.py +131 -0
  84. runnable-0.14.0/examples/04-catalog/catalog.yaml +115 -0
  85. runnable-0.14.0/examples/06-parallel/nesting.py +87 -0
  86. runnable-0.14.0/examples/06-parallel/nesting.yaml +50 -0
  87. runnable-0.14.0/examples/06-parallel/parallel.py +66 -0
  88. runnable-0.14.0/examples/06-parallel/parallel.yaml +45 -0
  89. runnable-0.14.0/examples/07-map/custom_reducer.py +129 -0
  90. runnable-0.14.0/examples/07-map/custom_reducer.yaml +73 -0
  91. runnable-0.14.0/examples/07-map/map.py +133 -0
  92. runnable-0.14.0/examples/07-map/map.yaml +74 -0
  93. runnable-0.14.0/examples/08-mocking/default.yaml +13 -0
  94. runnable-0.14.0/examples/08-mocking/patching.yaml +19 -0
  95. runnable-0.14.0/examples/09-retry/config.yaml +4 -0
  96. runnable-0.14.0/examples/09-retry/python_tasks.py +60 -0
  97. runnable-0.14.0/examples/09-retry/python_tasks.yaml +33 -0
  98. runnable-0.14.0/examples/Dockerfile.39 +31 -0
  99. runnable-0.14.0/examples/README.md +93 -0
  100. runnable-0.14.0/examples/common/functions.py +166 -0
  101. runnable-0.14.0/examples/common/initial_parameters.yaml +8 -0
  102. runnable-0.14.0/examples/common/process_chunk.ipynb +70 -0
  103. runnable-0.14.0/examples/common/read_files.ipynb +43 -0
  104. runnable-0.14.0/examples/common/read_parameters.ipynb +69 -0
  105. runnable-0.14.0/examples/common/simple_notebook.ipynb +46 -0
  106. runnable-0.14.0/examples/common/simple_notebook_mocked.ipynb +46 -0
  107. runnable-0.14.0/examples/common/write_parameters.ipynb +68 -0
  108. runnable-0.14.0/examples/comparisons/README.md +174 -0
  109. runnable-0.14.0/examples/comparisons/kedro/README.md +1 -0
  110. runnable-0.14.0/examples/comparisons/kfp/README.md +1 -0
  111. runnable-0.14.0/examples/comparisons/metaflow/main.py +135 -0
  112. runnable-0.14.0/examples/comparisons/metaflow/parameters.json +46 -0
  113. runnable-0.14.0/examples/comparisons/runnable/main.py +291 -0
  114. runnable-0.14.0/examples/comparisons/runnable/runnable_params.yaml +41 -0
  115. runnable-0.14.0/examples/comparisons/source.py +202 -0
  116. runnable-0.14.0/examples/configs/argo-config-full.yaml +50 -0
  117. runnable-0.14.0/examples/configs/argo-config.yaml +18 -0
  118. runnable-0.14.0/examples/configs/chunked-fs-run_log.yaml +2 -0
  119. runnable-0.14.0/examples/configs/default.yaml +11 -0
  120. runnable-0.14.0/examples/configs/dotenv.yaml +4 -0
  121. runnable-0.14.0/examples/configs/local-container.yaml +7 -0
  122. runnable-0.14.0/examples/configs/mocked-config-debug.yaml +12 -0
  123. runnable-0.14.0/examples/configs/mocked-config-simple.yaml +8 -0
  124. runnable-0.14.0/examples/configs/mocked-config-unittest.yaml +12 -0
  125. runnable-0.14.0/examples/configs/mocked-config.yaml +12 -0
  126. runnable-0.14.0/examples/configs/mocked_map_parameters.yaml +7 -0
  127. runnable-0.14.0/examples/configs/retry-config.yaml +10 -0
  128. runnable-0.14.0/examples/executors/argo-map-sequential.yaml +42 -0
  129. runnable-0.14.0/examples/executors/local-container-override.yaml +23 -0
  130. runnable-0.14.0/examples/executors/step_overrides_container.py +53 -0
  131. runnable-0.14.0/examples/executors/step_overrides_container.yaml +35 -0
  132. runnable-0.14.0/examples/generated-argo-pipeline.yaml +175 -0
  133. runnable-0.14.0/examples/iris_demo.py +102 -0
  134. runnable-0.14.0/examples/tutorials/mnist/baseline_comparison.py +312 -0
  135. runnable-0.14.0/examples/tutorials/mnist/hyper_parameter_tuning.py +206 -0
  136. runnable-0.14.0/examples/tutorials/mnist/modular_source.py +171 -0
  137. runnable-0.14.0/examples/tutorials/mnist/parameters.yaml +36 -0
  138. runnable-0.14.0/examples/tutorials/mnist/parameters_source.py +173 -0
  139. runnable-0.14.0/examples/tutorials/mnist/source.py +80 -0
  140. runnable-0.14.0/examples/tutorials/reddit_text_classification/parameters.yaml +9 -0
  141. runnable-0.14.0/examples/tutorials/reddit_text_classification/pipeline.py +60 -0
  142. runnable-0.14.0/examples/tutorials/reddit_text_classification/steps.py +131 -0
  143. runnable-0.12.3/runnable/extensions/catalog/file_system/implementation.py → runnable-0.14.0/extensions/catalog/file_system.py +31 -12
  144. runnable-0.14.0/extensions/catalog/pyproject.toml +7 -0
  145. {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/executor/__init__.py +77 -25
  146. runnable-0.12.3/runnable/extensions/executor/argo/implementation.py → runnable-0.14.0/extensions/executor/argo.py +210 -72
  147. {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/executor/k8s_job/integration_FF.py +2 -1
  148. runnable-0.12.3/runnable/extensions/executor/local/implementation.py → runnable-0.14.0/extensions/executor/local.py +17 -9
  149. runnable-0.12.3/runnable/extensions/executor/local_container/implementation.py → runnable-0.14.0/extensions/executor/local_container.py +43 -33
  150. runnable-0.12.3/runnable/extensions/executor/mocked/implementation.py → runnable-0.14.0/extensions/executor/mocked.py +17 -7
  151. runnable-0.14.0/extensions/executor/pyproject.toml +7 -0
  152. runnable-0.12.3/runnable/extensions/executor/retry/implementation.py → runnable-0.14.0/extensions/executor/retry.py +26 -10
  153. {runnable-0.12.3/runnable/extensions → runnable-0.14.0/extensions/nodes}/nodes.py +147 -48
  154. runnable-0.14.0/extensions/nodes/pyproject.toml +7 -0
  155. runnable-0.12.3/runnable/extensions/run_log_store/chunked_file_system/implementation.py → runnable-0.14.0/extensions/run_log_store/chunked_fs.py +4 -2
  156. {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/run_log_store/db/implementation_FF.py +9 -3
  157. runnable-0.12.3/runnable/extensions/run_log_store/file_system/implementation.py → runnable-0.14.0/extensions/run_log_store/file_system.py +3 -1
  158. {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/run_log_store/generic_chunked.py +60 -20
  159. runnable-0.14.0/extensions/run_log_store/pyproject.toml +7 -0
  160. runnable-0.14.0/extensions/secrets/dotenv.py +62 -0
  161. runnable-0.14.0/extensions/secrets/pyproject.toml +7 -0
  162. runnable-0.14.0/mkdocs.yml +140 -0
  163. runnable-0.14.0/pyproject.toml +132 -0
  164. {runnable-0.12.3 → runnable-0.14.0}/runnable/__init__.py +0 -11
  165. {runnable-0.12.3 → runnable-0.14.0}/runnable/catalog.py +27 -5
  166. {runnable-0.12.3 → runnable-0.14.0}/runnable/cli.py +122 -26
  167. {runnable-0.12.3 → runnable-0.14.0}/runnable/datastore.py +71 -35
  168. {runnable-0.12.3 → runnable-0.14.0}/runnable/defaults.py +0 -1
  169. {runnable-0.12.3 → runnable-0.14.0}/runnable/entrypoints.py +107 -32
  170. {runnable-0.12.3 → runnable-0.14.0}/runnable/exceptions.py +6 -2
  171. {runnable-0.12.3 → runnable-0.14.0}/runnable/executor.py +28 -9
  172. {runnable-0.12.3 → runnable-0.14.0}/runnable/graph.py +37 -12
  173. {runnable-0.12.3 → runnable-0.14.0}/runnable/integration.py +7 -2
  174. {runnable-0.12.3 → runnable-0.14.0}/runnable/nodes.py +15 -17
  175. {runnable-0.12.3 → runnable-0.14.0}/runnable/parameters.py +27 -8
  176. {runnable-0.12.3 → runnable-0.14.0}/runnable/pickler.py +1 -1
  177. {runnable-0.12.3 → runnable-0.14.0}/runnable/sdk.py +101 -33
  178. {runnable-0.12.3 → runnable-0.14.0}/runnable/secrets.py +3 -1
  179. {runnable-0.12.3 → runnable-0.14.0}/runnable/tasks.py +246 -34
  180. {runnable-0.12.3 → runnable-0.14.0}/runnable/utils.py +41 -13
  181. runnable-0.14.0/tests/__init__.py +0 -0
  182. runnable-0.14.0/tests/conftest.py +11 -0
  183. runnable-0.14.0/tests/extensions/__init__.py +0 -0
  184. runnable-0.14.0/tests/extensions/catalog/test_catalog_extension.py +52 -0
  185. runnable-0.14.0/tests/extensions/catalog/test_file_system.py +312 -0
  186. runnable-0.14.0/tests/extensions/executor/test_argo_executor.py +138 -0
  187. runnable-0.14.0/tests/extensions/executor/test_generic_executor.py +603 -0
  188. runnable-0.14.0/tests/extensions/executor/test_local_container_integration.py +51 -0
  189. runnable-0.14.0/tests/extensions/executor/test_local_executor.py +14 -0
  190. runnable-0.14.0/tests/extensions/run_log_store/__init__.py +0 -0
  191. runnable-0.14.0/tests/extensions/run_log_store/test_file_system.py +155 -0
  192. runnable-0.14.0/tests/extensions/secrets/test_dotenv.py +17 -0
  193. runnable-0.14.0/tests/extensions/test_node_extensions.py +265 -0
  194. runnable-0.14.0/tests/runnable/test_catalog.py +61 -0
  195. runnable-0.14.0/tests/runnable/test_datastore.py +551 -0
  196. runnable-0.14.0/tests/runnable/test_executor.py +30 -0
  197. runnable-0.14.0/tests/runnable/test_graph.py +451 -0
  198. runnable-0.14.0/tests/runnable/test_integration.py +153 -0
  199. runnable-0.14.0/tests/runnable/test_nodes.py +426 -0
  200. runnable-0.14.0/tests/runnable/test_parmeters.py +131 -0
  201. runnable-0.14.0/tests/runnable/test_sdk.py +37 -0
  202. runnable-0.14.0/tests/runnable/test_secrets.py +33 -0
  203. runnable-0.14.0/tests/runnable/test_utils.py +454 -0
  204. runnable-0.14.0/tests/test_examples.py +176 -0
  205. runnable-0.14.0/tox.ini +19 -0
  206. runnable-0.14.0/uv.lock +2526 -0
  207. runnable-0.12.3/pyproject.toml +0 -238
  208. runnable-0.12.3/runnable/extensions/catalog/__init__.py +0 -21
  209. runnable-0.12.3/runnable/extensions/catalog/k8s_pvc/implementation.py +0 -16
  210. runnable-0.12.3/runnable/extensions/catalog/k8s_pvc/integration.py +0 -59
  211. runnable-0.12.3/runnable/extensions/run_log_store/chunked_k8s_pvc/implementation.py +0 -21
  212. runnable-0.12.3/runnable/extensions/run_log_store/chunked_k8s_pvc/integration.py +0 -61
  213. runnable-0.12.3/runnable/extensions/run_log_store/k8s_pvc/implementation.py +0 -21
  214. runnable-0.12.3/runnable/extensions/run_log_store/k8s_pvc/integration.py +0 -56
  215. runnable-0.12.3/runnable/extensions/secrets/dotenv/implementation.py +0 -100
  216. /runnable-0.12.3/runnable/extensions/__init__.py → /runnable-0.14.0/CONTRIBUTING.md +0 -0
  217. {runnable-0.12.3 → runnable-0.14.0}/LICENSE +0 -0
  218. {runnable-0.12.3 → runnable-0.14.0}/README.md +0 -0
  219. /runnable-0.12.3/runnable/extensions/catalog/file_system/__init__.py → /runnable-0.14.0/docs/configurations/executors/retry.md +0 -0
  220. /runnable-0.12.3/runnable/extensions/catalog/k8s_pvc/__init__.py → /runnable-0.14.0/docs/tutorial/dynamic-looping.md +0 -0
  221. /runnable-0.12.3/runnable/extensions/executor/argo/__init__.py → /runnable-0.14.0/docs/tutorial/modular-dags.md +0 -0
  222. /runnable-0.12.3/runnable/extensions/executor/k8s_job/__init__.py → /runnable-0.14.0/docs/tutorial/modular-notebooks.md +0 -0
  223. /runnable-0.12.3/runnable/extensions/executor/local/__init__.py → /runnable-0.14.0/docs/tutorial/overview.md +0 -0
  224. /runnable-0.12.3/runnable/extensions/executor/local_container/__init__.py → /runnable-0.14.0/docs/tutorial/script-based.md +0 -0
  225. /runnable-0.12.3/runnable/extensions/executor/mocked/__init__.py → /runnable-0.14.0/docs/tutorial/single-notebook.md +0 -0
  226. /runnable-0.12.3/runnable/extensions/executor/retry/__init__.py → /runnable-0.14.0/docs/tutorial/switching-configs.md +0 -0
  227. /runnable-0.12.3/runnable/extensions/run_log_store/__init__.py → /runnable-0.14.0/docs/tutorial/using-parallel.md +0 -0
  228. /runnable-0.12.3/runnable/extensions/run_log_store/chunked_file_system/__init__.py → /runnable-0.14.0/docs/tutorial/wrap-up.md +0 -0
  229. /runnable-0.12.3/runnable/extensions/run_log_store/chunked_k8s_pvc/__init__.py → /runnable-0.14.0/extensions/README.md +0 -0
  230. {runnable-0.12.3/runnable/extensions/run_log_store/file_system → runnable-0.14.0/extensions}/__init__.py +0 -0
  231. /runnable-0.12.3/runnable/extensions/executor/argo/specification.yaml → /runnable-0.14.0/extensions/executor/argo_specification.yaml +0 -0
  232. {runnable-0.12.3/runnable/extensions/run_log_store/k8s_pvc → runnable-0.14.0/extensions/executor/k8s_job}/__init__.py +0 -0
  233. {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/executor/k8s_job/implementation_FF.py +0 -0
  234. {runnable-0.12.3/runnable/extensions/secrets → runnable-0.14.0/extensions/run_log_store}/__init__.py +0 -0
  235. {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/run_log_store/db/integration_FF.py +0 -0
  236. {runnable-0.12.3/runnable/extensions/secrets/dotenv → runnable-0.14.0/extensions/secrets}/__init__.py +0 -0
  237. {runnable-0.12.3 → runnable-0.14.0}/runnable/context.py +0 -0
  238. {runnable-0.12.3 → runnable-0.14.0}/runnable/names.py +0 -0
@@ -0,0 +1,8 @@
1
+ docs/
2
+ .github/
3
+ .mypy_cache/
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .tox/
7
+ .scripts/
8
+ .tests/
@@ -0,0 +1,18 @@
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
@@ -0,0 +1,53 @@
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
@@ -0,0 +1,101 @@
1
+ on:
2
+ push:
3
+ paths-ignore:
4
+ - "docs/**"
5
+ - "**.md"
6
+ - "examples/**"
7
+ branches:
8
+ - "main"
9
+ - "release-fix*"
10
+
11
+
12
+ jobs:
13
+ PRCheck:
14
+ uses: "./.github/workflows/pr.yaml"
15
+
16
+ Release:
17
+ runs-on: ubuntu-latest
18
+ needs: PRCheck
19
+ steps:
20
+ - uses: actions/checkout@v3
21
+ with:
22
+ fetch-depth: 0
23
+ - name: Install uv
24
+ run: curl -LsSf https://astral.sh/uv/install.sh | sh
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
+ }
@@ -0,0 +1,157 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # examples run time
10
+ *_out*
11
+
12
+ # Distribution / packaging
13
+ .Python
14
+ build/
15
+ develop-eggs/
16
+ dist/
17
+ downloads/
18
+ eggs/
19
+ .eggs/
20
+ lib/
21
+ lib64/
22
+ parts/
23
+ sdist/
24
+ var/
25
+ wheels/
26
+ share/python-wheels/
27
+ *.egg-info/
28
+ .installed.cfg
29
+ *.egg
30
+ MANIFEST
31
+
32
+ # PyInstaller
33
+ # Usually these files are written by a python script from a template
34
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
35
+ *.manifest
36
+ *.spec
37
+
38
+ # Installer logs
39
+ pip-log.txt
40
+ pip-delete-this-directory.txt
41
+
42
+ # Unit test / coverage reports
43
+ htmlcov/
44
+ .tox/
45
+ .nox/
46
+ .coverage
47
+ .coverage.*
48
+ .cache
49
+ nosetests.xml
50
+ coverage.xml
51
+ *.cover
52
+ *.py,cover
53
+ .hypothesis/
54
+ .pytest_cache/
55
+ cover/
56
+
57
+ # Translations
58
+ *.mo
59
+ *.pot
60
+
61
+
62
+ # Sphinx documentation
63
+ docs/_build/
64
+
65
+ # PyBuilder
66
+ .pybuilder/
67
+ target/
68
+
69
+ # Jupyter Notebook
70
+ .ipynb_checkpoints
71
+
72
+ # IPython
73
+ profile_default/
74
+ ipython_config.py
75
+
76
+ # pyenv
77
+ # For a library or package, you might want to ignore these files since the code is
78
+ # intended to run in multiple environments; otherwise, check them in:
79
+ # .python-version
80
+
81
+ # pipenv
82
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
83
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
84
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
85
+ # install all needed dependencies.
86
+ #Pipfile.lock
87
+
88
+ # poetry
89
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
90
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
91
+ # commonly ignored for libraries.
92
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
93
+ #poetry.lock
94
+
95
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
96
+ __pypackages__/
97
+
98
+ # Celery stuff
99
+ celerybeat-schedule
100
+ celerybeat.pid
101
+
102
+ # SageMath parsed files
103
+ *.sage.py
104
+
105
+ # Environments
106
+ .env
107
+ .venv
108
+ env/
109
+ venv/
110
+ ENV/
111
+ env.bak/
112
+ venv.bak/
113
+
114
+ # Spyder project settings
115
+ .spyderproject
116
+ .spyproject
117
+
118
+ # Rope project settings
119
+ .ropeproject
120
+
121
+ # mkdocs documentation
122
+ /site
123
+
124
+ # mypy
125
+ .mypy_cache/
126
+ .dmypy.json
127
+ dmypy.json
128
+
129
+ # Pyre type checker
130
+ .pyre/
131
+
132
+ # pytype static type analyzer
133
+ .pytype/
134
+
135
+ # Cython debug symbols
136
+ cython_debug/
137
+
138
+ # PyCharm
139
+ # JetBrains specific template is maintainted in a separate JetBrains.gitignore that can
140
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
141
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
142
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
143
+ .idea/
144
+
145
+ # VSCode specific settings
146
+ .vscode
147
+
148
+
149
+ .run_log_store/
150
+
151
+ .catalog/
152
+
153
+ cov.xml
154
+
155
+ .DS_Store
156
+
157
+ data/
@@ -0,0 +1,48 @@
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
@@ -0,0 +1,34 @@
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
+ ]
@@ -0,0 +1 @@
1
+ 3.9