calkit-python 0.28.3__tar.gz → 0.28.4__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.
Files changed (180) hide show
  1. {calkit_python-0.28.3 → calkit_python-0.28.4}/PKG-INFO +1 -1
  2. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/__init__.py +1 -1
  3. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/new.py +31 -3
  4. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/notebooks.md +1 -1
  5. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/quickstart.md +1 -1
  6. calkit_python-0.28.4/docs/tutorials/github-actions.md +83 -0
  7. calkit_python-0.28.4/docs/tutorials/img/actions-repo-secrets.png +0 -0
  8. calkit_python-0.28.4/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  9. calkit_python-0.28.4/docs/tutorials/img/quick-actions.png +0 -0
  10. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/index.md +1 -0
  11. {calkit_python-0.28.3 → calkit_python-0.28.4}/mkdocs.yml +1 -0
  12. calkit_python-0.28.3/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  13. {calkit_python-0.28.3 → calkit_python-0.28.4}/.github/FUNDING.yml +0 -0
  14. {calkit_python-0.28.3 → calkit_python-0.28.4}/.github/workflows/docs.yml +0 -0
  15. {calkit_python-0.28.3 → calkit_python-0.28.4}/.github/workflows/format.yml +0 -0
  16. {calkit_python-0.28.3 → calkit_python-0.28.4}/.github/workflows/publish-test.yml +0 -0
  17. {calkit_python-0.28.3 → calkit_python-0.28.4}/.github/workflows/publish.yml +0 -0
  18. {calkit_python-0.28.3 → calkit_python-0.28.4}/.github/workflows/test.yml +0 -0
  19. {calkit_python-0.28.3 → calkit_python-0.28.4}/.gitignore +0 -0
  20. {calkit_python-0.28.3 → calkit_python-0.28.4}/.pre-commit-config.yaml +0 -0
  21. {calkit_python-0.28.3 → calkit_python-0.28.4}/.python-version +0 -0
  22. {calkit_python-0.28.3 → calkit_python-0.28.4}/CITATION.cff +0 -0
  23. {calkit_python-0.28.3 → calkit_python-0.28.4}/CONTRIBUTING.md +0 -0
  24. {calkit_python-0.28.3 → calkit_python-0.28.4}/LICENSE +0 -0
  25. {calkit_python-0.28.3 → calkit_python-0.28.4}/Makefile +0 -0
  26. {calkit_python-0.28.3 → calkit_python-0.28.4}/README.md +0 -0
  27. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/__main__.py +0 -0
  28. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/calc.py +0 -0
  29. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/check.py +0 -0
  30. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/__init__.py +0 -0
  31. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/check.py +0 -0
  32. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/cloud.py +0 -0
  33. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/config.py +0 -0
  34. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/core.py +0 -0
  35. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/describe.py +0 -0
  36. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/import_.py +0 -0
  37. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/list.py +0 -0
  38. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/main.py +0 -0
  39. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/notebooks.py +0 -0
  40. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/office.py +0 -0
  41. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/overleaf.py +0 -0
  42. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cli/update.py +0 -0
  43. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/cloud.py +0 -0
  44. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/conda.py +0 -0
  45. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/config.py +0 -0
  46. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/core.py +0 -0
  47. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/datasets.py +0 -0
  48. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/docker.py +0 -0
  49. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/dvc.py +0 -0
  50. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/environments.py +0 -0
  51. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/git.py +0 -0
  52. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/github.py +0 -0
  53. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/gui.py +0 -0
  54. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/jupyter.py +0 -0
  55. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/magics.py +0 -0
  56. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/matlab.py +0 -0
  57. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/models/__init__.py +0 -0
  58. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/models/core.py +0 -0
  59. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/models/io.py +0 -0
  60. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/models/iteration.py +0 -0
  61. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/models/pipeline.py +0 -0
  62. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/notebooks.py +0 -0
  63. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/office.py +0 -0
  64. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/ops.py +0 -0
  65. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/pipeline.py +0 -0
  66. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/releases.py +0 -0
  67. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/server.py +0 -0
  68. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/__init__.py +0 -0
  69. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/core.py +0 -0
  70. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/__init__.py +0 -0
  71. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/article/paper.tex +0 -0
  72. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/core.py +0 -0
  73. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/jfm/jfm.bst +0 -0
  74. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/jfm/jfm.cls +0 -0
  75. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  76. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/jfm/paper.tex +0 -0
  77. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/templates/latex/jfm/upmath.sty +0 -0
  78. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/__init__.py +0 -0
  79. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/cli/__init__.py +0 -0
  80. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/cli/test_check.py +0 -0
  81. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/cli/test_config.py +0 -0
  82. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/cli/test_list.py +0 -0
  83. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/cli/test_main.py +0 -0
  84. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/cli/test_new.py +0 -0
  85. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/cli/test_notebooks.py +0 -0
  86. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/models/__init__.py +0 -0
  87. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/models/test_iteration.py +0 -0
  88. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/models/test_pipeline.py +0 -0
  89. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_calc.py +0 -0
  90. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_check.py +0 -0
  91. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_conda.py +0 -0
  92. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_core.py +0 -0
  93. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_dvc.py +0 -0
  94. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_jupyter.py +0 -0
  95. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_magics.py +0 -0
  96. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_notebooks.py +0 -0
  97. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_pipeline.py +0 -0
  98. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/tests/test_templates.py +0 -0
  99. {calkit_python-0.28.3 → calkit_python-0.28.4}/calkit/zenodo.py +0 -0
  100. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/CNAME +0 -0
  101. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/apps.md +0 -0
  102. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/calculations.md +0 -0
  103. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/calkit-yaml.md +0 -0
  104. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/cli-reference.md +0 -0
  105. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/cloud-integration.md +0 -0
  106. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/datasets.md +0 -0
  107. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/dependencies.md +0 -0
  108. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/environments.md +0 -0
  109. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/examples.md +0 -0
  110. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/help.md +0 -0
  111. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/img/c-to-the-k-white.svg +0 -0
  112. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/img/calkit-no-bg.png +0 -0
  113. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/img/connect-zenodo.png +0 -0
  114. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/img/jupyterlab-params.png +0 -0
  115. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/img/vscode-nb-params.png +0 -0
  116. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/index.md +0 -0
  117. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/installation.md +0 -0
  118. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/local-server.md +0 -0
  119. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/overleaf.md +0 -0
  120. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/pipeline/index.md +0 -0
  121. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/pipeline/manual-steps.md +0 -0
  122. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/pipeline/running-and-logging.md +0 -0
  123. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/references.md +0 -0
  124. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/releases.md +0 -0
  125. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  126. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/conda-envs.md +0 -0
  127. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/existing-project.md +0 -0
  128. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/first-project.md +0 -0
  129. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  130. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  131. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  132. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  133. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  134. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  135. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  136. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  137. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  138. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  139. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  140. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  141. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  142. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/create-project.png +0 -0
  143. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  144. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/excel-chart.png +0 -0
  145. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/excel-data.png +0 -0
  146. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  147. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/needs-clone.png +0 -0
  148. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/new-stage.png +0 -0
  149. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  150. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  151. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/status-more-rows.png +0 -0
  152. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  153. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/untracked-data.png +0 -0
  154. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/updated-publication.png +0 -0
  155. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  156. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/office/workflow-page.png +0 -0
  157. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/clone.png +0 -0
  158. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/create-project.png +0 -0
  159. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  160. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  161. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  162. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/new-token.png +0 -0
  163. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/reclone.png +0 -0
  164. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  165. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/img/run-proc.png +0 -0
  166. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/latex-codespaces.md +0 -0
  167. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/matlab.md +0 -0
  168. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/notebook-pipeline.md +0 -0
  169. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/office.md +0 -0
  170. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/openfoam.md +0 -0
  171. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/tutorials/procedures.md +0 -0
  172. {calkit_python-0.28.3 → calkit_python-0.28.4}/docs/version-control.md +0 -0
  173. {calkit_python-0.28.3 → calkit_python-0.28.4}/pyproject.toml +0 -0
  174. {calkit_python-0.28.3 → calkit_python-0.28.4}/scripts/install.ps1 +0 -0
  175. {calkit_python-0.28.3 → calkit_python-0.28.4}/scripts/install.sh +0 -0
  176. {calkit_python-0.28.3 → calkit_python-0.28.4}/test/nb-params.ipynb +0 -0
  177. {calkit_python-0.28.3 → calkit_python-0.28.4}/test/nb-subdir.ipynb +0 -0
  178. {calkit_python-0.28.3 → calkit_python-0.28.4}/test/pipeline.ipynb +0 -0
  179. {calkit_python-0.28.3 → calkit_python-0.28.4}/test/test-log.log +0 -0
  180. {calkit_python-0.28.3 → calkit_python-0.28.4}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.28.3
3
+ Version: 0.28.4
4
4
  Summary: Reproducibility simplified.
5
5
  Project-URL: Homepage, https://calkit.org
6
6
  Project-URL: Issues, https://github.com/calkit/calkit/issues
@@ -1,4 +1,4 @@
1
- __version__ = "0.28.3"
1
+ __version__ = "0.28.4"
2
2
 
3
3
  from .core import * # noqa: F403, I001
4
4
  from . import git # noqa: F401
@@ -157,10 +157,16 @@ def new_project(
157
157
  repo.git.commit(["-m", "Initialize DVC"])
158
158
  ck_info_fpath = os.path.join(abs_path, "calkit.yaml")
159
159
  if os.path.isfile(ck_info_fpath) and not overwrite:
160
- raise_error(
160
+ ck_info = calkit.load_calkit_info(wdir=abs_path)
161
+ name = ck_info.get("name", name)
162
+ title = ck_info.get("title", title)
163
+ description = ck_info.get("description", description)
164
+ typer.echo(
161
165
  "Destination is already a Calkit project; "
162
- "use --overwrite to continue"
166
+ "will use existing project info where possible"
163
167
  )
168
+ else:
169
+ ck_info = {}
164
170
  if os.path.isdir(abs_path) and os.listdir(abs_path) and repo is None:
165
171
  warn(f"{abs_path} is not empty")
166
172
  if name is None:
@@ -224,7 +230,29 @@ def new_project(
224
230
  )
225
231
  repo.git.add("calkit.yaml")
226
232
  if not no_commit:
227
- repo.git.commit(["-m", "Create calkit.yaml"])
233
+ repo.git.commit(
234
+ ["calkit.yaml", "-m", "Create calkit.yaml"]
235
+ )
236
+ else:
237
+ # Merge with existing project info in calkit.yaml
238
+ typer.echo("Updating existing calkit.yaml file")
239
+ ck_info = (
240
+ dict(
241
+ owner=resp["owner_account_name"],
242
+ name=resp["name"],
243
+ title=resp["title"],
244
+ description=resp["description"],
245
+ git_repo_url=resp["git_repo_url"],
246
+ )
247
+ | ck_info
248
+ )
249
+ with open(calkit_fpath, "w") as f:
250
+ ryaml.dump(ck_info, f)
251
+ repo.git.add("calkit.yaml")
252
+ if not no_commit and repo.git.diff("--staged"):
253
+ repo.git.commit(
254
+ ["calkit.yaml", "-m", "Update calkit.yaml"]
255
+ )
228
256
  try:
229
257
  calkit.dvc.configure_remote(wdir=abs_path)
230
258
  except Exception:
@@ -322,4 +322,4 @@ pipeline:
322
322
  - results/param1={param1}/param2={param2}/results.csv
323
323
  ```
324
324
 
325
- For more information, see [pipeline iteration](/pipeline#iteration).
325
+ For more information, see [pipeline iteration](pipeline/index.md#iteration).
@@ -25,7 +25,7 @@ If you're using Conda for environment management,
25
25
  e.g., with an `environment.yml` file,
26
26
  you can use the `calkit new conda-env` command.
27
27
 
28
- Next, we can start building our [pipeline](pipeline.md).
28
+ Next, we can start building our [pipeline](pipeline/index.md).
29
29
  Let's say we have a Jupyter notebook called `collect-data.ipynb`
30
30
  that produces raw data at `data/raw.h5`.
31
31
  We can add a pipeline stage to run this notebook in the `main` environment
@@ -0,0 +1,83 @@
1
+ # Running Calkit in GitHub Actions
2
+
3
+ A project can be set up to automatically run the pipeline every time a
4
+ change is pushed, either to the main branch or on a pull request,
5
+ using GitHub Actions.
6
+ The latter allows for inspection of outputs before merging into main.
7
+
8
+ To get started, generate a DVC token and set it in your GitHub Actions
9
+ secrets as `CALKIT_DVC_TOKEN`,
10
+ either at your account or project level.
11
+ On calkit.io, there are shortcuts on the project page for managing both
12
+ Calkit tokens and GitHub Actions secrets:
13
+
14
+ ![Project quick actions links](img/quick-actions.png)
15
+
16
+ ![DVC token](img/latex-codespaces/new-token.png)
17
+
18
+ ![Actions repo secrets](img/actions-repo-secrets.png)
19
+
20
+ Next, add a workflow to the project in the `.github/workflows` folder.
21
+ For example, we can put the content below into `.github/workflows/run.yml`:
22
+
23
+ ```yaml
24
+ name: Run pipeline
25
+
26
+ on:
27
+ push:
28
+ branches:
29
+ - main
30
+ pull_request:
31
+
32
+ permissions:
33
+ contents: write
34
+
35
+ # Make sure we only ever run one per branch so we don't have issues pushing
36
+ # after running the pipeline
37
+ concurrency:
38
+ group: calkit-run-${{ github.ref }}
39
+ cancel-in-progress: false
40
+
41
+ jobs:
42
+ main:
43
+ name: Run
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ with:
48
+ # For PRs, checkout the head ref to avoid detached HEAD
49
+ ref: ${{ github.head_ref || github.ref_name }}
50
+ token: ${{ secrets.GITHUB_TOKEN }}
51
+ - name: Configure Git credentials
52
+ run: |
53
+ git config user.name github-actions[bot]
54
+ git config user.email 41898282+github-actions[bot]@users.noreply.github.com
55
+ - name: Setup uv
56
+ uses: astral-sh/setup-uv@v5
57
+ - name: Install Calkit
58
+ run: uv tool install calkit-python
59
+ - name: Run Calkit
60
+ uses: calkit/run-action@v1
61
+ with:
62
+ dvc_token: ${{ secrets.CALKIT_DVC_TOKEN }}
63
+ ```
64
+
65
+ This particular example installs Calkit with uv,
66
+ meaning `uv` and `uv-venv` environment types will work without any additional
67
+ configuration.
68
+ Docker is also installed by default on the `ubuntu-latest` machine.
69
+ If other environment types are used in the project,
70
+ setup steps may be necessary for those, e.g.,
71
+ [`setup-miniconda`](https://github.com/marketplace/actions/setup-miniconda)
72
+ or [`install-juliaup`](https://github.com/marketplace/actions/install-juliaup).
73
+
74
+ By default, the Calkit GitHub Action will run the pipeline and save results.
75
+ This is why the workflow needs write permissions and configures Git
76
+ credentials to act as the GitHub Actions bot.
77
+ The workflow also limits concurrency so multiple jobs don't attempt to push
78
+ to the same branch at the same time.
79
+
80
+ It's possible to configure the action to not save results, e.g., if you
81
+ just want to check that the pipeline can run without errors.
82
+ See the [documentation](https://github.com/marketplace/actions/run-calkit)
83
+ for all available options.
@@ -10,3 +10,4 @@
10
10
  - [Adding a new LaTeX-based publication with its own Docker build environment](adding-latex-pub-docker.md)
11
11
  - [A reproducible workflow using Microsoft Office (Word and Excel)](office.md)
12
12
  - [Using Calkit with MATLAB](matlab.md)
13
+ - [Automation with GitHub Actions](github-actions.md)
@@ -67,6 +67,7 @@ nav:
67
67
  - tutorials/conda-envs.md
68
68
  - tutorials/office.md
69
69
  - tutorials/matlab.md
70
+ - tutorials/github-actions.md
70
71
  - CLI reference: cli-reference.md
71
72
  - Help and support: help.md
72
73
  markdown_extensions:
File without changes
File without changes
File without changes
File without changes