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.
- runnable-0.14.0/.dockerignore +8 -0
- runnable-0.14.0/.github/workflows/docs.yaml +18 -0
- runnable-0.14.0/.github/workflows/pr.yaml +53 -0
- runnable-0.14.0/.github/workflows/release.yaml +101 -0
- runnable-0.14.0/.gitignore +157 -0
- runnable-0.14.0/.mypy.ini +48 -0
- runnable-0.14.0/.pre-commit-config.yaml +34 -0
- runnable-0.14.0/.python-version +1 -0
- runnable-0.14.0/CHANGELOG.md +1897 -0
- {runnable-0.12.3 → runnable-0.14.0}/PKG-INFO +25 -31
- runnable-0.14.0/docs/assets/cropped.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-expose-parameters.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-kubeflow-exec.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-kubeflow-ui.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-nested.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-parallel-map.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-sequential-map.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-workflows-gant.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/argo-workflows-logs.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/mlflow.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/mlflow_example.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/mlflow_step.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/notebook_api_parameters.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/notebook_env_parameters.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/notebook_input_parameters.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/notebook_native_parameters.png +0 -0
- runnable-0.14.0/docs/assets/screenshots/simple_notebook.png +0 -0
- runnable-0.14.0/docs/assets/speed.png +0 -0
- runnable-0.14.0/docs/assets/sport.png +0 -0
- runnable-0.14.0/docs/assets/work_dark.png +0 -0
- runnable-0.14.0/docs/assets/work_light.png +0 -0
- runnable-0.14.0/docs/concepts/catalog.md +87 -0
- runnable-0.14.0/docs/concepts/index.md +55 -0
- runnable-0.14.0/docs/concepts/map.md +227 -0
- runnable-0.14.0/docs/concepts/nesting.md +1354 -0
- runnable-0.14.0/docs/concepts/parallel.md +134 -0
- runnable-0.14.0/docs/concepts/parameters.md +255 -0
- runnable-0.14.0/docs/concepts/pipeline.md +176 -0
- runnable-0.14.0/docs/concepts/run-log.md +144 -0
- runnable-0.14.0/docs/concepts/secrets.md +69 -0
- runnable-0.14.0/docs/concepts/task.md +146 -0
- runnable-0.14.0/docs/configurations/catalog.md +279 -0
- runnable-0.14.0/docs/configurations/executors/argo.md +1650 -0
- runnable-0.14.0/docs/configurations/executors/container-environments.md +71 -0
- runnable-0.14.0/docs/configurations/executors/local-container.md +352 -0
- runnable-0.14.0/docs/configurations/executors/local.md +17 -0
- runnable-0.14.0/docs/configurations/executors/mocked.md +1015 -0
- runnable-0.14.0/docs/configurations/overview.md +80 -0
- runnable-0.14.0/docs/configurations/run-log.md +427 -0
- runnable-0.14.0/docs/configurations/secrets.md +140 -0
- runnable-0.14.0/docs/css/extra.css +3 -0
- runnable-0.14.0/docs/index.md +190 -0
- runnable-0.14.0/docs/iterative.md +44 -0
- runnable-0.14.0/docs/reference.md +146 -0
- runnable-0.14.0/docs/usage.md +56 -0
- runnable-0.14.0/docs/why-runnable.md +104 -0
- runnable-0.14.0/examples/01-tasks/notebook.py +44 -0
- runnable-0.14.0/examples/01-tasks/notebook.yaml +31 -0
- runnable-0.14.0/examples/01-tasks/python_tasks.py +44 -0
- runnable-0.14.0/examples/01-tasks/python_tasks.yaml +23 -0
- runnable-0.14.0/examples/01-tasks/scripts.py +37 -0
- runnable-0.14.0/examples/01-tasks/scripts.yaml +20 -0
- runnable-0.14.0/examples/01-tasks/stub.py +42 -0
- runnable-0.14.0/examples/01-tasks/stub.yaml +29 -0
- runnable-0.14.0/examples/02-sequential/default_fail.py +36 -0
- runnable-0.14.0/examples/02-sequential/default_fail.yaml +23 -0
- runnable-0.14.0/examples/02-sequential/on_failure_fail.py +42 -0
- runnable-0.14.0/examples/02-sequential/on_failure_fail.yaml +34 -0
- runnable-0.14.0/examples/02-sequential/on_failure_succeed.py +42 -0
- runnable-0.14.0/examples/02-sequential/on_failure_succeed.yaml +34 -0
- runnable-0.14.0/examples/02-sequential/traversal.py +65 -0
- runnable-0.14.0/examples/02-sequential/traversal.yaml +46 -0
- runnable-0.14.0/examples/03-parameters/passing_parameters_notebook.py +59 -0
- runnable-0.14.0/examples/03-parameters/passing_parameters_notebook.yaml +38 -0
- runnable-0.14.0/examples/03-parameters/passing_parameters_python.py +55 -0
- runnable-0.14.0/examples/03-parameters/passing_parameters_python.yaml +38 -0
- runnable-0.14.0/examples/03-parameters/passing_parameters_shell.py +73 -0
- runnable-0.14.0/examples/03-parameters/passing_parameters_shell.yaml +51 -0
- runnable-0.14.0/examples/03-parameters/static_parameters_non_python.py +61 -0
- runnable-0.14.0/examples/03-parameters/static_parameters_non_python.yaml +46 -0
- runnable-0.14.0/examples/03-parameters/static_parameters_python.py +77 -0
- runnable-0.14.0/examples/03-parameters/static_parameters_python.yaml +33 -0
- runnable-0.14.0/examples/04-catalog/catalog.py +131 -0
- runnable-0.14.0/examples/04-catalog/catalog.yaml +115 -0
- runnable-0.14.0/examples/06-parallel/nesting.py +87 -0
- runnable-0.14.0/examples/06-parallel/nesting.yaml +50 -0
- runnable-0.14.0/examples/06-parallel/parallel.py +66 -0
- runnable-0.14.0/examples/06-parallel/parallel.yaml +45 -0
- runnable-0.14.0/examples/07-map/custom_reducer.py +129 -0
- runnable-0.14.0/examples/07-map/custom_reducer.yaml +73 -0
- runnable-0.14.0/examples/07-map/map.py +133 -0
- runnable-0.14.0/examples/07-map/map.yaml +74 -0
- runnable-0.14.0/examples/08-mocking/default.yaml +13 -0
- runnable-0.14.0/examples/08-mocking/patching.yaml +19 -0
- runnable-0.14.0/examples/09-retry/config.yaml +4 -0
- runnable-0.14.0/examples/09-retry/python_tasks.py +60 -0
- runnable-0.14.0/examples/09-retry/python_tasks.yaml +33 -0
- runnable-0.14.0/examples/Dockerfile.39 +31 -0
- runnable-0.14.0/examples/README.md +93 -0
- runnable-0.14.0/examples/common/functions.py +166 -0
- runnable-0.14.0/examples/common/initial_parameters.yaml +8 -0
- runnable-0.14.0/examples/common/process_chunk.ipynb +70 -0
- runnable-0.14.0/examples/common/read_files.ipynb +43 -0
- runnable-0.14.0/examples/common/read_parameters.ipynb +69 -0
- runnable-0.14.0/examples/common/simple_notebook.ipynb +46 -0
- runnable-0.14.0/examples/common/simple_notebook_mocked.ipynb +46 -0
- runnable-0.14.0/examples/common/write_parameters.ipynb +68 -0
- runnable-0.14.0/examples/comparisons/README.md +174 -0
- runnable-0.14.0/examples/comparisons/kedro/README.md +1 -0
- runnable-0.14.0/examples/comparisons/kfp/README.md +1 -0
- runnable-0.14.0/examples/comparisons/metaflow/main.py +135 -0
- runnable-0.14.0/examples/comparisons/metaflow/parameters.json +46 -0
- runnable-0.14.0/examples/comparisons/runnable/main.py +291 -0
- runnable-0.14.0/examples/comparisons/runnable/runnable_params.yaml +41 -0
- runnable-0.14.0/examples/comparisons/source.py +202 -0
- runnable-0.14.0/examples/configs/argo-config-full.yaml +50 -0
- runnable-0.14.0/examples/configs/argo-config.yaml +18 -0
- runnable-0.14.0/examples/configs/chunked-fs-run_log.yaml +2 -0
- runnable-0.14.0/examples/configs/default.yaml +11 -0
- runnable-0.14.0/examples/configs/dotenv.yaml +4 -0
- runnable-0.14.0/examples/configs/local-container.yaml +7 -0
- runnable-0.14.0/examples/configs/mocked-config-debug.yaml +12 -0
- runnable-0.14.0/examples/configs/mocked-config-simple.yaml +8 -0
- runnable-0.14.0/examples/configs/mocked-config-unittest.yaml +12 -0
- runnable-0.14.0/examples/configs/mocked-config.yaml +12 -0
- runnable-0.14.0/examples/configs/mocked_map_parameters.yaml +7 -0
- runnable-0.14.0/examples/configs/retry-config.yaml +10 -0
- runnable-0.14.0/examples/executors/argo-map-sequential.yaml +42 -0
- runnable-0.14.0/examples/executors/local-container-override.yaml +23 -0
- runnable-0.14.0/examples/executors/step_overrides_container.py +53 -0
- runnable-0.14.0/examples/executors/step_overrides_container.yaml +35 -0
- runnable-0.14.0/examples/generated-argo-pipeline.yaml +175 -0
- runnable-0.14.0/examples/iris_demo.py +102 -0
- runnable-0.14.0/examples/tutorials/mnist/baseline_comparison.py +312 -0
- runnable-0.14.0/examples/tutorials/mnist/hyper_parameter_tuning.py +206 -0
- runnable-0.14.0/examples/tutorials/mnist/modular_source.py +171 -0
- runnable-0.14.0/examples/tutorials/mnist/parameters.yaml +36 -0
- runnable-0.14.0/examples/tutorials/mnist/parameters_source.py +173 -0
- runnable-0.14.0/examples/tutorials/mnist/source.py +80 -0
- runnable-0.14.0/examples/tutorials/reddit_text_classification/parameters.yaml +9 -0
- runnable-0.14.0/examples/tutorials/reddit_text_classification/pipeline.py +60 -0
- runnable-0.14.0/examples/tutorials/reddit_text_classification/steps.py +131 -0
- runnable-0.12.3/runnable/extensions/catalog/file_system/implementation.py → runnable-0.14.0/extensions/catalog/file_system.py +31 -12
- runnable-0.14.0/extensions/catalog/pyproject.toml +7 -0
- {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/executor/__init__.py +77 -25
- runnable-0.12.3/runnable/extensions/executor/argo/implementation.py → runnable-0.14.0/extensions/executor/argo.py +210 -72
- {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/executor/k8s_job/integration_FF.py +2 -1
- runnable-0.12.3/runnable/extensions/executor/local/implementation.py → runnable-0.14.0/extensions/executor/local.py +17 -9
- runnable-0.12.3/runnable/extensions/executor/local_container/implementation.py → runnable-0.14.0/extensions/executor/local_container.py +43 -33
- runnable-0.12.3/runnable/extensions/executor/mocked/implementation.py → runnable-0.14.0/extensions/executor/mocked.py +17 -7
- runnable-0.14.0/extensions/executor/pyproject.toml +7 -0
- runnable-0.12.3/runnable/extensions/executor/retry/implementation.py → runnable-0.14.0/extensions/executor/retry.py +26 -10
- {runnable-0.12.3/runnable/extensions → runnable-0.14.0/extensions/nodes}/nodes.py +147 -48
- runnable-0.14.0/extensions/nodes/pyproject.toml +7 -0
- 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
- {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/run_log_store/db/implementation_FF.py +9 -3
- 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
- {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/run_log_store/generic_chunked.py +60 -20
- runnable-0.14.0/extensions/run_log_store/pyproject.toml +7 -0
- runnable-0.14.0/extensions/secrets/dotenv.py +62 -0
- runnable-0.14.0/extensions/secrets/pyproject.toml +7 -0
- runnable-0.14.0/mkdocs.yml +140 -0
- runnable-0.14.0/pyproject.toml +132 -0
- {runnable-0.12.3 → runnable-0.14.0}/runnable/__init__.py +0 -11
- {runnable-0.12.3 → runnable-0.14.0}/runnable/catalog.py +27 -5
- {runnable-0.12.3 → runnable-0.14.0}/runnable/cli.py +122 -26
- {runnable-0.12.3 → runnable-0.14.0}/runnable/datastore.py +71 -35
- {runnable-0.12.3 → runnable-0.14.0}/runnable/defaults.py +0 -1
- {runnable-0.12.3 → runnable-0.14.0}/runnable/entrypoints.py +107 -32
- {runnable-0.12.3 → runnable-0.14.0}/runnable/exceptions.py +6 -2
- {runnable-0.12.3 → runnable-0.14.0}/runnable/executor.py +28 -9
- {runnable-0.12.3 → runnable-0.14.0}/runnable/graph.py +37 -12
- {runnable-0.12.3 → runnable-0.14.0}/runnable/integration.py +7 -2
- {runnable-0.12.3 → runnable-0.14.0}/runnable/nodes.py +15 -17
- {runnable-0.12.3 → runnable-0.14.0}/runnable/parameters.py +27 -8
- {runnable-0.12.3 → runnable-0.14.0}/runnable/pickler.py +1 -1
- {runnable-0.12.3 → runnable-0.14.0}/runnable/sdk.py +101 -33
- {runnable-0.12.3 → runnable-0.14.0}/runnable/secrets.py +3 -1
- {runnable-0.12.3 → runnable-0.14.0}/runnable/tasks.py +246 -34
- {runnable-0.12.3 → runnable-0.14.0}/runnable/utils.py +41 -13
- runnable-0.14.0/tests/__init__.py +0 -0
- runnable-0.14.0/tests/conftest.py +11 -0
- runnable-0.14.0/tests/extensions/__init__.py +0 -0
- runnable-0.14.0/tests/extensions/catalog/test_catalog_extension.py +52 -0
- runnable-0.14.0/tests/extensions/catalog/test_file_system.py +312 -0
- runnable-0.14.0/tests/extensions/executor/test_argo_executor.py +138 -0
- runnable-0.14.0/tests/extensions/executor/test_generic_executor.py +603 -0
- runnable-0.14.0/tests/extensions/executor/test_local_container_integration.py +51 -0
- runnable-0.14.0/tests/extensions/executor/test_local_executor.py +14 -0
- runnable-0.14.0/tests/extensions/run_log_store/__init__.py +0 -0
- runnable-0.14.0/tests/extensions/run_log_store/test_file_system.py +155 -0
- runnable-0.14.0/tests/extensions/secrets/test_dotenv.py +17 -0
- runnable-0.14.0/tests/extensions/test_node_extensions.py +265 -0
- runnable-0.14.0/tests/runnable/test_catalog.py +61 -0
- runnable-0.14.0/tests/runnable/test_datastore.py +551 -0
- runnable-0.14.0/tests/runnable/test_executor.py +30 -0
- runnable-0.14.0/tests/runnable/test_graph.py +451 -0
- runnable-0.14.0/tests/runnable/test_integration.py +153 -0
- runnable-0.14.0/tests/runnable/test_nodes.py +426 -0
- runnable-0.14.0/tests/runnable/test_parmeters.py +131 -0
- runnable-0.14.0/tests/runnable/test_sdk.py +37 -0
- runnable-0.14.0/tests/runnable/test_secrets.py +33 -0
- runnable-0.14.0/tests/runnable/test_utils.py +454 -0
- runnable-0.14.0/tests/test_examples.py +176 -0
- runnable-0.14.0/tox.ini +19 -0
- runnable-0.14.0/uv.lock +2526 -0
- runnable-0.12.3/pyproject.toml +0 -238
- runnable-0.12.3/runnable/extensions/catalog/__init__.py +0 -21
- runnable-0.12.3/runnable/extensions/catalog/k8s_pvc/implementation.py +0 -16
- runnable-0.12.3/runnable/extensions/catalog/k8s_pvc/integration.py +0 -59
- runnable-0.12.3/runnable/extensions/run_log_store/chunked_k8s_pvc/implementation.py +0 -21
- runnable-0.12.3/runnable/extensions/run_log_store/chunked_k8s_pvc/integration.py +0 -61
- runnable-0.12.3/runnable/extensions/run_log_store/k8s_pvc/implementation.py +0 -21
- runnable-0.12.3/runnable/extensions/run_log_store/k8s_pvc/integration.py +0 -56
- runnable-0.12.3/runnable/extensions/secrets/dotenv/implementation.py +0 -100
- /runnable-0.12.3/runnable/extensions/__init__.py → /runnable-0.14.0/CONTRIBUTING.md +0 -0
- {runnable-0.12.3 → runnable-0.14.0}/LICENSE +0 -0
- {runnable-0.12.3 → runnable-0.14.0}/README.md +0 -0
- /runnable-0.12.3/runnable/extensions/catalog/file_system/__init__.py → /runnable-0.14.0/docs/configurations/executors/retry.md +0 -0
- /runnable-0.12.3/runnable/extensions/catalog/k8s_pvc/__init__.py → /runnable-0.14.0/docs/tutorial/dynamic-looping.md +0 -0
- /runnable-0.12.3/runnable/extensions/executor/argo/__init__.py → /runnable-0.14.0/docs/tutorial/modular-dags.md +0 -0
- /runnable-0.12.3/runnable/extensions/executor/k8s_job/__init__.py → /runnable-0.14.0/docs/tutorial/modular-notebooks.md +0 -0
- /runnable-0.12.3/runnable/extensions/executor/local/__init__.py → /runnable-0.14.0/docs/tutorial/overview.md +0 -0
- /runnable-0.12.3/runnable/extensions/executor/local_container/__init__.py → /runnable-0.14.0/docs/tutorial/script-based.md +0 -0
- /runnable-0.12.3/runnable/extensions/executor/mocked/__init__.py → /runnable-0.14.0/docs/tutorial/single-notebook.md +0 -0
- /runnable-0.12.3/runnable/extensions/executor/retry/__init__.py → /runnable-0.14.0/docs/tutorial/switching-configs.md +0 -0
- /runnable-0.12.3/runnable/extensions/run_log_store/__init__.py → /runnable-0.14.0/docs/tutorial/using-parallel.md +0 -0
- /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
- /runnable-0.12.3/runnable/extensions/run_log_store/chunked_k8s_pvc/__init__.py → /runnable-0.14.0/extensions/README.md +0 -0
- {runnable-0.12.3/runnable/extensions/run_log_store/file_system → runnable-0.14.0/extensions}/__init__.py +0 -0
- /runnable-0.12.3/runnable/extensions/executor/argo/specification.yaml → /runnable-0.14.0/extensions/executor/argo_specification.yaml +0 -0
- {runnable-0.12.3/runnable/extensions/run_log_store/k8s_pvc → runnable-0.14.0/extensions/executor/k8s_job}/__init__.py +0 -0
- {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/executor/k8s_job/implementation_FF.py +0 -0
- {runnable-0.12.3/runnable/extensions/secrets → runnable-0.14.0/extensions/run_log_store}/__init__.py +0 -0
- {runnable-0.12.3/runnable → runnable-0.14.0}/extensions/run_log_store/db/integration_FF.py +0 -0
- {runnable-0.12.3/runnable/extensions/secrets/dotenv → runnable-0.14.0/extensions/secrets}/__init__.py +0 -0
- {runnable-0.12.3 → runnable-0.14.0}/runnable/context.py +0 -0
- {runnable-0.12.3 → runnable-0.14.0}/runnable/names.py +0 -0
@@ -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
|