calkit-python 0.26.5__tar.gz → 0.26.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {calkit_python-0.26.5 → calkit_python-0.26.6}/PKG-INFO +79 -9
- {calkit_python-0.26.5 → calkit_python-0.26.6}/README.md +78 -8
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/__init__.py +1 -1
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/new.py +54 -35
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/cli/test_new.py +31 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/help.md +2 -3
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/index.md +18 -16
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/installation.md +6 -0
- calkit_python-0.26.6/docs/quickstart.md +94 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/mkdocs.yml +2 -1
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.github/FUNDING.yml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.github/workflows/docs.yml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.github/workflows/format.yml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.github/workflows/publish-test.yml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.github/workflows/publish.yml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.github/workflows/test.yml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.gitignore +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.pre-commit-config.yaml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/.python-version +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/CONTRIBUTING.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/LICENSE +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/Makefile +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/__main__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/calc.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/check.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/__init__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/check.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/cloud.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/config.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/core.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/describe.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/import_.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/list.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/main.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/notebooks.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/office.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/overleaf.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cli/update.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/cloud.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/conda.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/config.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/core.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/datasets.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/docker.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/dvc.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/environments.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/git.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/github.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/gui.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/jupyter.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/magics.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/matlab.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/models/__init__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/models/core.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/models/io.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/models/iteration.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/models/pipeline.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/notebooks.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/office.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/ops.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/pipeline.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/releases.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/server.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/__init__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/core.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/__init__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/article/paper.tex +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/core.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/jfm/jfm.bst +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/jfm/jfm.cls +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/jfm/paper.tex +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/templates/latex/jfm/upmath.sty +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/__init__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/cli/__init__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/cli/test_check.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/cli/test_config.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/cli/test_list.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/cli/test_main.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/models/__init__.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/models/test_pipeline.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_calc.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_check.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_conda.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_core.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_dvc.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_jupyter.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_magics.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_notebooks.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_pipeline.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/tests/test_templates.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/calkit/zenodo.py +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/CNAME +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/apps.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/calculations.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/calkit-yaml.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/cli-reference.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/cloud-integration.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/datasets.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/dependencies.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/environments.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/examples.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/img/c-to-the-k-white.svg +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/img/calkit-no-bg.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/img/connect-zenodo.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/local-server.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/notebooks.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/overleaf.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/pipeline/index.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/pipeline/manual-steps.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/pipeline/running-and-logging.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/references.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/releases.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/adding-latex-pub-docker.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/conda-envs.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/existing-project.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/first-project.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/push.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/chart-more-rows.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/create-project.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/excel-chart.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/excel-data.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/needs-clone.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/new-stage.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/status-more-rows.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/untracked-data.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/updated-publication.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/office/workflow-page.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/clone.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/create-project.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/new-token.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/reclone.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/img/run-proc.png +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/index.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/latex-codespaces.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/matlab.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/notebook-pipeline.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/office.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/openfoam.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/tutorials/procedures.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/docs/version-control.md +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/pyproject.toml +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/test/pipeline.ipynb +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/test/test-log.log +0 -0
- {calkit_python-0.26.5 → calkit_python-0.26.6}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: calkit-python
|
|
3
|
-
Version: 0.26.
|
|
3
|
+
Version: 0.26.6
|
|
4
4
|
Summary: Reproducibility simplified.
|
|
5
5
|
Project-URL: Homepage, https://calkit.org
|
|
6
6
|
Project-URL: Issues, https://github.com/calkit/calkit/issues
|
|
@@ -55,21 +55,33 @@ Description-Content-Type: text/markdown
|
|
|
55
55
|
</a>
|
|
56
56
|
</p>
|
|
57
57
|
|
|
58
|
-
Calkit
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
Calkit makes it easy to create
|
|
59
|
+
["single button"](https://doi.org/10.1190/1.1822162)
|
|
60
|
+
reproducible research projects.
|
|
61
|
+
|
|
62
|
+
Instead of a loosely related collection of files
|
|
63
|
+
and manual instructions,
|
|
64
|
+
turn your project into a version-controlled,
|
|
65
|
+
self-contained "calculation kit,"
|
|
66
|
+
tying together all phases or stages of the project:
|
|
67
|
+
data collection, analysis, visualization, and writing,
|
|
68
|
+
each of which can make use of the latest and greatest computational
|
|
69
|
+
tools and languages.
|
|
70
|
+
In other words, you, your collaborators, and readers will be able to go
|
|
71
|
+
from raw data to research article with a single command,
|
|
72
|
+
improving efficiency via faster iteration cycle time,
|
|
73
|
+
reducing the likelihood of mistakes,
|
|
74
|
+
and allowing others to more effectively build upon your work.
|
|
63
75
|
|
|
64
76
|
Calkit makes this level of automation possible without extensive software
|
|
65
77
|
engineering expertise by providing a project framework and toolset that unifies
|
|
66
|
-
and simplifies the use of enabling technologies like Git,
|
|
78
|
+
and simplifies the use of powerful enabling technologies like Git,
|
|
67
79
|
DVC, Conda, Docker, and more,
|
|
68
80
|
while guiding users away from common reproducibility pitfalls.
|
|
69
81
|
|
|
70
82
|
## Features
|
|
71
83
|
|
|
72
|
-
- A declarative pipeline that
|
|
84
|
+
- A declarative pipeline that guides users to define an environment
|
|
73
85
|
for every stage, so long lists of instructions in a README and
|
|
74
86
|
"but it works on my machine" are things of the past.
|
|
75
87
|
- A CLI to run the project's pipeline to verify it's reproducible,
|
|
@@ -136,6 +148,64 @@ calkit config set token ${YOUR_TOKEN_HERE}
|
|
|
136
148
|
|
|
137
149
|
## Quickstart
|
|
138
150
|
|
|
151
|
+
### From an existing project
|
|
152
|
+
|
|
153
|
+
If you want to use Calkit with an existing project,
|
|
154
|
+
navigate into its working directory and run:
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
calkit new project --public --cloud .
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Note that the `--public` and `--cloud` options can be omitted,
|
|
161
|
+
but you'll need to configure your own DVC remote or use Git to store
|
|
162
|
+
pipeline outputs.
|
|
163
|
+
|
|
164
|
+
Next, create your [environment(s)](https://docs.calkit.org/environments).
|
|
165
|
+
In this example, imagine we have a `requirements.txt` file we want to use to
|
|
166
|
+
define a uv virtual environment, or venv:
|
|
167
|
+
|
|
168
|
+
```sh
|
|
169
|
+
calkit new uv-venv --name main --path requirements.txt --python 3.13
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
If you're using Conda for environment management,
|
|
173
|
+
e.g., with an `environment.yml` file,
|
|
174
|
+
you can use the `calkit new conda-env` command.
|
|
175
|
+
|
|
176
|
+
Next, we can start building our [pipeline](https://docs.calkit.org/pipeline).
|
|
177
|
+
Let's say we have a Jupyter notebook called `collect-data.ipynb`
|
|
178
|
+
that produces raw data at `data/raw.h5`.
|
|
179
|
+
We can add a pipeline stage to run this notebook in the `main` environment
|
|
180
|
+
we just created with:
|
|
181
|
+
|
|
182
|
+
```sh
|
|
183
|
+
calkit new jupyter-notebook-stage \
|
|
184
|
+
--name collect-data \
|
|
185
|
+
--environment main \
|
|
186
|
+
--notebook-path collect-data.ipynb \
|
|
187
|
+
--output data/raw.h5
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
We can then run the pipeline with:
|
|
191
|
+
|
|
192
|
+
```sh
|
|
193
|
+
calkit run
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
and save and back up our results with:
|
|
197
|
+
|
|
198
|
+
```sh
|
|
199
|
+
calkit save -am "Run pipeline"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
After that,
|
|
203
|
+
you can add more environments, pipeline stages,
|
|
204
|
+
[start a publication with LaTeX](https://docs.calkit.org/tutorials/adding-latex-pub-docker/),
|
|
205
|
+
or [link a publication with Overleaf](https://docs.calkit.org/overleaf/).
|
|
206
|
+
|
|
207
|
+
### Fresh from a Calkit project template
|
|
208
|
+
|
|
139
209
|
After installing Calkit and setting your token as described above, run:
|
|
140
210
|
|
|
141
211
|
```sh
|
|
@@ -157,7 +227,7 @@ cd calkit-project-1
|
|
|
157
227
|
calkit run
|
|
158
228
|
```
|
|
159
229
|
|
|
160
|
-
This will
|
|
230
|
+
This will run the project's pipeline.
|
|
161
231
|
Next, you can start adding stages to the pipeline,
|
|
162
232
|
modifying the Python environments and scripts,
|
|
163
233
|
and editing the paper.
|
|
@@ -17,21 +17,33 @@
|
|
|
17
17
|
</a>
|
|
18
18
|
</p>
|
|
19
19
|
|
|
20
|
-
Calkit
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
Calkit makes it easy to create
|
|
21
|
+
["single button"](https://doi.org/10.1190/1.1822162)
|
|
22
|
+
reproducible research projects.
|
|
23
|
+
|
|
24
|
+
Instead of a loosely related collection of files
|
|
25
|
+
and manual instructions,
|
|
26
|
+
turn your project into a version-controlled,
|
|
27
|
+
self-contained "calculation kit,"
|
|
28
|
+
tying together all phases or stages of the project:
|
|
29
|
+
data collection, analysis, visualization, and writing,
|
|
30
|
+
each of which can make use of the latest and greatest computational
|
|
31
|
+
tools and languages.
|
|
32
|
+
In other words, you, your collaborators, and readers will be able to go
|
|
33
|
+
from raw data to research article with a single command,
|
|
34
|
+
improving efficiency via faster iteration cycle time,
|
|
35
|
+
reducing the likelihood of mistakes,
|
|
36
|
+
and allowing others to more effectively build upon your work.
|
|
25
37
|
|
|
26
38
|
Calkit makes this level of automation possible without extensive software
|
|
27
39
|
engineering expertise by providing a project framework and toolset that unifies
|
|
28
|
-
and simplifies the use of enabling technologies like Git,
|
|
40
|
+
and simplifies the use of powerful enabling technologies like Git,
|
|
29
41
|
DVC, Conda, Docker, and more,
|
|
30
42
|
while guiding users away from common reproducibility pitfalls.
|
|
31
43
|
|
|
32
44
|
## Features
|
|
33
45
|
|
|
34
|
-
- A declarative pipeline that
|
|
46
|
+
- A declarative pipeline that guides users to define an environment
|
|
35
47
|
for every stage, so long lists of instructions in a README and
|
|
36
48
|
"but it works on my machine" are things of the past.
|
|
37
49
|
- A CLI to run the project's pipeline to verify it's reproducible,
|
|
@@ -98,6 +110,64 @@ calkit config set token ${YOUR_TOKEN_HERE}
|
|
|
98
110
|
|
|
99
111
|
## Quickstart
|
|
100
112
|
|
|
113
|
+
### From an existing project
|
|
114
|
+
|
|
115
|
+
If you want to use Calkit with an existing project,
|
|
116
|
+
navigate into its working directory and run:
|
|
117
|
+
|
|
118
|
+
```sh
|
|
119
|
+
calkit new project --public --cloud .
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Note that the `--public` and `--cloud` options can be omitted,
|
|
123
|
+
but you'll need to configure your own DVC remote or use Git to store
|
|
124
|
+
pipeline outputs.
|
|
125
|
+
|
|
126
|
+
Next, create your [environment(s)](https://docs.calkit.org/environments).
|
|
127
|
+
In this example, imagine we have a `requirements.txt` file we want to use to
|
|
128
|
+
define a uv virtual environment, or venv:
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
calkit new uv-venv --name main --path requirements.txt --python 3.13
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
If you're using Conda for environment management,
|
|
135
|
+
e.g., with an `environment.yml` file,
|
|
136
|
+
you can use the `calkit new conda-env` command.
|
|
137
|
+
|
|
138
|
+
Next, we can start building our [pipeline](https://docs.calkit.org/pipeline).
|
|
139
|
+
Let's say we have a Jupyter notebook called `collect-data.ipynb`
|
|
140
|
+
that produces raw data at `data/raw.h5`.
|
|
141
|
+
We can add a pipeline stage to run this notebook in the `main` environment
|
|
142
|
+
we just created with:
|
|
143
|
+
|
|
144
|
+
```sh
|
|
145
|
+
calkit new jupyter-notebook-stage \
|
|
146
|
+
--name collect-data \
|
|
147
|
+
--environment main \
|
|
148
|
+
--notebook-path collect-data.ipynb \
|
|
149
|
+
--output data/raw.h5
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
We can then run the pipeline with:
|
|
153
|
+
|
|
154
|
+
```sh
|
|
155
|
+
calkit run
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
and save and back up our results with:
|
|
159
|
+
|
|
160
|
+
```sh
|
|
161
|
+
calkit save -am "Run pipeline"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
After that,
|
|
165
|
+
you can add more environments, pipeline stages,
|
|
166
|
+
[start a publication with LaTeX](https://docs.calkit.org/tutorials/adding-latex-pub-docker/),
|
|
167
|
+
or [link a publication with Overleaf](https://docs.calkit.org/overleaf/).
|
|
168
|
+
|
|
169
|
+
### Fresh from a Calkit project template
|
|
170
|
+
|
|
101
171
|
After installing Calkit and setting your token as described above, run:
|
|
102
172
|
|
|
103
173
|
```sh
|
|
@@ -119,7 +189,7 @@ cd calkit-project-1
|
|
|
119
189
|
calkit run
|
|
120
190
|
```
|
|
121
191
|
|
|
122
|
-
This will
|
|
192
|
+
This will run the project's pipeline.
|
|
123
193
|
Next, you can start adding stages to the pipeline,
|
|
124
194
|
modifying the Python environments and scripts,
|
|
125
195
|
and editing the paper.
|
|
@@ -1079,15 +1079,15 @@ def new_publication(
|
|
|
1079
1079
|
|
|
1080
1080
|
@new_app.command("conda-env")
|
|
1081
1081
|
def new_conda_env(
|
|
1082
|
-
packages: Annotated[
|
|
1083
|
-
list[str],
|
|
1084
|
-
typer.Argument(help="Packages to include in the environment."),
|
|
1085
|
-
],
|
|
1086
1082
|
name: Annotated[
|
|
1087
1083
|
str, typer.Option("--name", "-n", help="Environment name.")
|
|
1088
1084
|
],
|
|
1085
|
+
packages: Annotated[
|
|
1086
|
+
list[str] | None,
|
|
1087
|
+
typer.Argument(help="Packages to include in the environment."),
|
|
1088
|
+
] = None,
|
|
1089
1089
|
conda_name: Annotated[
|
|
1090
|
-
str,
|
|
1090
|
+
str | None,
|
|
1091
1091
|
typer.Option(
|
|
1092
1092
|
"--conda-name",
|
|
1093
1093
|
help=(
|
|
@@ -1105,10 +1105,11 @@ def new_conda_env(
|
|
|
1105
1105
|
list[str], typer.Option("--pip", help="Packages to install with pip.")
|
|
1106
1106
|
] = [],
|
|
1107
1107
|
prefix: Annotated[
|
|
1108
|
-
str
|
|
1108
|
+
str | None,
|
|
1109
|
+
typer.Option("--prefix", help="Prefix for environment location."),
|
|
1109
1110
|
] = None,
|
|
1110
1111
|
description: Annotated[
|
|
1111
|
-
str, typer.Option("--description", help="Description.")
|
|
1112
|
+
str | None, typer.Option("--description", help="Description.")
|
|
1112
1113
|
] = None,
|
|
1113
1114
|
overwrite: Annotated[
|
|
1114
1115
|
bool,
|
|
@@ -1130,8 +1131,10 @@ def new_conda_env(
|
|
|
1130
1131
|
] = False,
|
|
1131
1132
|
):
|
|
1132
1133
|
"""Create a new Conda environment."""
|
|
1133
|
-
if os.path.isfile(path) and not overwrite:
|
|
1134
|
+
if packages is not None and os.path.isfile(path) and not overwrite:
|
|
1134
1135
|
raise_error("Output path already exists (use -f to overwrite)")
|
|
1136
|
+
elif packages is None and not os.path.isfile(path):
|
|
1137
|
+
raise_error("Packages must be provided if path doesn't exist")
|
|
1135
1138
|
repo = git.Repo()
|
|
1136
1139
|
# Add environment to Calkit info
|
|
1137
1140
|
ck_info = calkit.load_calkit_info()
|
|
@@ -1150,21 +1153,34 @@ def new_conda_env(
|
|
|
1150
1153
|
if project_name is None:
|
|
1151
1154
|
project_name = os.path.basename(os.getcwd())
|
|
1152
1155
|
conda_name = calkit.to_kebab_case(project_name) + "-" + name
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1156
|
+
if packages is not None:
|
|
1157
|
+
assert isinstance(packages, list)
|
|
1158
|
+
# Write environment to path
|
|
1159
|
+
_check_path_dir(path)
|
|
1160
|
+
conda_env = dict(
|
|
1161
|
+
name=conda_name, channels=["conda-forge"], dependencies=packages
|
|
1162
|
+
)
|
|
1163
|
+
if prefix is not None:
|
|
1164
|
+
from calkit.cli.main import ignore
|
|
1160
1165
|
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1166
|
+
conda_env["prefix"] = prefix
|
|
1167
|
+
ignore(prefix, no_commit=True)
|
|
1168
|
+
repo.git.add(".gitignore")
|
|
1169
|
+
if pip_packages:
|
|
1170
|
+
conda_env["dependencies"].append(dict(pip=pip_packages))
|
|
1171
|
+
with open(path, "w") as f:
|
|
1172
|
+
ryaml.dump(conda_env, f)
|
|
1173
|
+
elif packages is None and os.path.isfile(path):
|
|
1174
|
+
with open(path) as f:
|
|
1175
|
+
conda_env: dict = ryaml.load(f)
|
|
1176
|
+
# Remove prefix
|
|
1177
|
+
conda_env.pop("prefix", None)
|
|
1178
|
+
if prefix is not None:
|
|
1179
|
+
conda_env["prefix"] = prefix
|
|
1180
|
+
# Rename so we can track it more uniquely
|
|
1181
|
+
conda_env["name"] = conda_name
|
|
1182
|
+
with open(path, "w") as f:
|
|
1183
|
+
ryaml.dump(conda_env, f)
|
|
1168
1184
|
repo.git.add(path)
|
|
1169
1185
|
typer.echo("Adding environment to calkit.yaml")
|
|
1170
1186
|
env = dict(path=path, kind="conda")
|
|
@@ -1187,13 +1203,13 @@ def new_conda_env(
|
|
|
1187
1203
|
|
|
1188
1204
|
@new_app.command("uv-venv")
|
|
1189
1205
|
def new_uv_venv(
|
|
1190
|
-
packages: Annotated[
|
|
1191
|
-
list[str],
|
|
1192
|
-
typer.Argument(help="Packages to include in the environment."),
|
|
1193
|
-
],
|
|
1194
1206
|
name: Annotated[
|
|
1195
1207
|
str, typer.Option("--name", "-n", help="Environment name.")
|
|
1196
1208
|
],
|
|
1209
|
+
packages: Annotated[
|
|
1210
|
+
list[str] | None,
|
|
1211
|
+
typer.Argument(help="Packages to include in the environment."),
|
|
1212
|
+
] = None,
|
|
1197
1213
|
path: Annotated[
|
|
1198
1214
|
str, typer.Option("--path", help="Path for requirements file.")
|
|
1199
1215
|
] = "requirements.txt",
|
|
@@ -1201,10 +1217,10 @@ def new_uv_venv(
|
|
|
1201
1217
|
str, typer.Option("--prefix", help="Prefix for environment location.")
|
|
1202
1218
|
] = ".venv",
|
|
1203
1219
|
python_version: Annotated[
|
|
1204
|
-
str, typer.Option("--python", "-p", help="Python version.")
|
|
1205
|
-
] =
|
|
1220
|
+
str | None, typer.Option("--python", "-p", help="Python version.")
|
|
1221
|
+
] = "3.13",
|
|
1206
1222
|
description: Annotated[
|
|
1207
|
-
str, typer.Option("--description", help="Description.")
|
|
1223
|
+
str | None, typer.Option("--description", help="Description.")
|
|
1208
1224
|
] = None,
|
|
1209
1225
|
overwrite: Annotated[
|
|
1210
1226
|
bool,
|
|
@@ -1226,8 +1242,10 @@ def new_uv_venv(
|
|
|
1226
1242
|
] = False,
|
|
1227
1243
|
):
|
|
1228
1244
|
"""Create a new uv virtual environment."""
|
|
1229
|
-
if os.path.isfile(path) and not overwrite:
|
|
1245
|
+
if os.path.isfile(path) and packages and not overwrite:
|
|
1230
1246
|
raise_error("Output path already exists (use -f to overwrite)")
|
|
1247
|
+
elif packages is None and not os.path.isfile(path):
|
|
1248
|
+
raise_error("If path doesn't exist, packages must be specified")
|
|
1231
1249
|
repo = git.Repo()
|
|
1232
1250
|
# Add environment to Calkit info
|
|
1233
1251
|
ck_info = calkit.load_calkit_info()
|
|
@@ -1249,11 +1267,12 @@ def new_uv_venv(
|
|
|
1249
1267
|
f"Environment '{env_name}' already exists with "
|
|
1250
1268
|
f"prefix '{prefix}'"
|
|
1251
1269
|
)
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1270
|
+
if packages is not None:
|
|
1271
|
+
packages_txt = "\n".join(packages)
|
|
1272
|
+
# Write environment to path
|
|
1273
|
+
_check_path_dir(path)
|
|
1274
|
+
with open(path, "w") as f:
|
|
1275
|
+
f.write(packages_txt)
|
|
1257
1276
|
repo.git.add(path)
|
|
1258
1277
|
typer.echo("Adding environment to calkit.yaml")
|
|
1259
1278
|
env = dict(path=path, kind="uv-venv", prefix=prefix)
|
|
@@ -212,6 +212,37 @@ def test_new_uv_venv(tmp_dir):
|
|
|
212
212
|
assert env.kind == "uv-venv"
|
|
213
213
|
|
|
214
214
|
|
|
215
|
+
def test_new_conda_env(tmp_dir):
|
|
216
|
+
with open("environment.yml", "w") as f:
|
|
217
|
+
calkit.ryaml.dump(
|
|
218
|
+
{
|
|
219
|
+
"dependencies": ["python", "requests"],
|
|
220
|
+
"name": "whatever",
|
|
221
|
+
"channels": ["conda-forge"],
|
|
222
|
+
},
|
|
223
|
+
f,
|
|
224
|
+
)
|
|
225
|
+
subprocess.check_call(
|
|
226
|
+
["calkit", "new", "project", ".", "--name", "test", "--title", "Test"]
|
|
227
|
+
)
|
|
228
|
+
subprocess.check_call(
|
|
229
|
+
[
|
|
230
|
+
"calkit",
|
|
231
|
+
"new",
|
|
232
|
+
"conda-env",
|
|
233
|
+
"--path",
|
|
234
|
+
"environment.yml",
|
|
235
|
+
"--name",
|
|
236
|
+
"e1",
|
|
237
|
+
"--no-check",
|
|
238
|
+
]
|
|
239
|
+
)
|
|
240
|
+
with open("environment.yml") as f:
|
|
241
|
+
env = calkit.ryaml.load(f)
|
|
242
|
+
assert env["name"] == "test-e1"
|
|
243
|
+
assert env["dependencies"] == ["python", "requests"]
|
|
244
|
+
|
|
245
|
+
|
|
215
246
|
def test_new_project(tmp_dir):
|
|
216
247
|
subprocess.check_call(
|
|
217
248
|
["calkit", "new", "project", ".", "--title", "My new project"]
|
|
@@ -7,9 +7,8 @@ To get in touch with the community,
|
|
|
7
7
|
check out the
|
|
8
8
|
[discussion forum](https://github.com/orgs/calkit/discussions)
|
|
9
9
|
or the
|
|
10
|
-
[Discord server](https://discord.gg/
|
|
10
|
+
[Discord server](https://discord.gg/ryDkGarc).
|
|
11
11
|
|
|
12
12
|
If you want to get in touch directly,
|
|
13
13
|
feel free to
|
|
14
|
-
[send an email](mailto:help@calkit.io)
|
|
15
|
-
[schedule a video chat](https://calendar.app.google/fGDwYrqJm3diKegr8).
|
|
14
|
+
[send an email](mailto:help@calkit.io).
|
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
# Home
|
|
2
2
|
|
|
3
|
-
Calkit
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
Calkit makes it easy to create
|
|
4
|
+
["single button"](https://doi.org/10.1190/1.1822162)
|
|
5
|
+
reproducible research projects.
|
|
6
|
+
|
|
7
|
+
Instead of a loosely related collection of files
|
|
8
|
+
and manual instructions,
|
|
9
|
+
turn your project into a version-controlled,
|
|
10
|
+
self-contained "calculation kit,"
|
|
11
|
+
tying together all phases or stages of the project:
|
|
12
|
+
data collection, analysis, visualization, and writing,
|
|
13
|
+
each of which can make use of the latest and greatest computational
|
|
14
|
+
tools and languages.
|
|
15
|
+
In other words, you, your collaborators, and readers will be able to go
|
|
16
|
+
from raw data to research article with a single command,
|
|
17
|
+
improving efficiency via faster iteration cycle time,
|
|
18
|
+
reducing the likelihood of mistakes,
|
|
19
|
+
and allowing others to more effectively build upon your work.
|
|
8
20
|
|
|
9
21
|
Calkit makes this level of automation possible without extensive software
|
|
10
22
|
engineering expertise by providing a project framework and toolset that unifies
|
|
11
|
-
and simplifies the use of enabling technologies like Git,
|
|
23
|
+
and simplifies the use of powerful enabling technologies like Git,
|
|
12
24
|
DVC, Conda, Docker, and more,
|
|
13
25
|
while guiding users away from common reproducibility pitfalls.
|
|
14
26
|
|
|
15
|
-
When your project is reproducible,
|
|
16
|
-
you'll be able to iterate more quickly and more often,
|
|
17
|
-
easily onboard collaborators,
|
|
18
|
-
make fewer mistakes,
|
|
19
|
-
and feel confident sharing all of your project materials
|
|
20
|
-
with your research articles,
|
|
21
|
-
because you'll know the code will actually run!
|
|
22
|
-
This will allow others to reuse parts of your project in their own research,
|
|
23
|
-
accelerating the pace of discovery.
|
|
24
|
-
|
|
25
27
|
## Features
|
|
26
28
|
|
|
27
29
|
- A declarative pipeline that forces users to define an environment
|
|
@@ -19,6 +19,12 @@ Alternatively, but less ideally, you can install with your system Python:
|
|
|
19
19
|
pip install calkit-python
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
Next,
|
|
23
|
+
[connect to a Calkit Hub](cloud-integration.md)
|
|
24
|
+
for collaboration and backup.
|
|
25
|
+
|
|
26
|
+
## Calkit Assistant
|
|
27
|
+
|
|
22
28
|
For Windows users, the
|
|
23
29
|
[Calkit Assistant](https://github.com/calkit/calkit-assistant)
|
|
24
30
|
app is the easiest way to get everything set up and ready to work in
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Quickstart
|
|
2
|
+
|
|
3
|
+
## From an existing project
|
|
4
|
+
|
|
5
|
+
If you want to use Calkit with an existing project,
|
|
6
|
+
navigate into its working directory and run:
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
calkit new project --public --cloud .
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Note that the `--public` and `--cloud` options can be omitted,
|
|
13
|
+
but then you'll need to configure your own DVC remote or use Git to store
|
|
14
|
+
pipeline outputs.
|
|
15
|
+
|
|
16
|
+
Next, create your [environment(s)](environments.md).
|
|
17
|
+
In this example, imagine we have a `requirements.txt` file we want to use to
|
|
18
|
+
define a uv virtual environment, or venv:
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
calkit new uv-venv --name main --path requirements.txt --python 3.13
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
If you're using Conda for environment management,
|
|
25
|
+
e.g., with an `environment.yml` file,
|
|
26
|
+
you can use the `calkit new conda-env` command.
|
|
27
|
+
|
|
28
|
+
Next, we can start building our [pipeline](pipeline.md).
|
|
29
|
+
Let's say we have a Jupyter notebook called `collect-data.ipynb`
|
|
30
|
+
that produces raw data at `data/raw.h5`.
|
|
31
|
+
We can add a pipeline stage to run this notebook in the `main` environment
|
|
32
|
+
we just created with:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
calkit new jupyter-notebook-stage \
|
|
36
|
+
--name collect-data \
|
|
37
|
+
--environment main \
|
|
38
|
+
--notebook-path collect-data.ipynb \
|
|
39
|
+
--output data/raw.h5
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
We can then run the pipeline with:
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
calkit run
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
and save and back up our results with:
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
calkit save -am "Run pipeline"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
After that,
|
|
55
|
+
you can add more environments, pipeline stages,
|
|
56
|
+
[start a publication with LaTeX](tutorials/adding-latex-pub-docker.md),
|
|
57
|
+
or [link a publication with Overleaf](overleaf.md).
|
|
58
|
+
|
|
59
|
+
## Fresh from a Calkit project template
|
|
60
|
+
|
|
61
|
+
After installing Calkit and setting your token as described above, run:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
calkit new project calkit-project-1 \
|
|
65
|
+
--title "My first Calkit project" \
|
|
66
|
+
--template calkit/example-basic \
|
|
67
|
+
--cloud \
|
|
68
|
+
--public
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
This will create a new project from the
|
|
72
|
+
[`calkit/example-basic`](https://github.com/calkit/example-basic)
|
|
73
|
+
template,
|
|
74
|
+
creating it in the cloud and cloning to `calkit-project-1`.
|
|
75
|
+
You should now be able to run:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
cd calkit-project-1
|
|
79
|
+
calkit run
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
This will run the project's pipeline.
|
|
83
|
+
Next, you can start adding stages to the pipeline,
|
|
84
|
+
modifying the Python environments and scripts,
|
|
85
|
+
and editing the paper.
|
|
86
|
+
All will be kept in sync with the `calkit run` command.
|
|
87
|
+
|
|
88
|
+
To back up all of your work, execute:
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
calkit save -am "Run pipeline"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This will commit and push to both GitHub and the Calkit Cloud.
|
|
@@ -35,8 +35,8 @@ theme:
|
|
|
35
35
|
name: Switch to system preference
|
|
36
36
|
nav:
|
|
37
37
|
- Home: index.md
|
|
38
|
-
- Help and support: help.md
|
|
39
38
|
- Installation: installation.md
|
|
39
|
+
- Quickstart: quickstart.md
|
|
40
40
|
- Cloud integration: cloud-integration.md
|
|
41
41
|
- Version control: version-control.md
|
|
42
42
|
- The calkit.yaml file: calkit-yaml.md
|
|
@@ -68,6 +68,7 @@ nav:
|
|
|
68
68
|
- tutorials/office.md
|
|
69
69
|
- tutorials/matlab.md
|
|
70
70
|
- CLI reference: cli-reference.md
|
|
71
|
+
- Help and support: help.md
|
|
71
72
|
markdown_extensions:
|
|
72
73
|
- admonition
|
|
73
74
|
- attr_list
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|