vaibify 0.0.0__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 (207) hide show
  1. vaibify-0.0.0/.github/workflows/docs.yml +44 -0
  2. vaibify-0.0.0/.github/workflows/pip-install.yml +78 -0
  3. vaibify-0.0.0/.github/workflows/tests-linux.yml +61 -0
  4. vaibify-0.0.0/.github/workflows/tests-macos.yml +38 -0
  5. vaibify-0.0.0/.gitignore +22 -0
  6. vaibify-0.0.0/PKG-INFO +171 -0
  7. vaibify-0.0.0/README.md +118 -0
  8. vaibify-0.0.0/bin/connect_vc +51 -0
  9. vaibify-0.0.0/bin/vcTransferCommon.sh +73 -0
  10. vaibify-0.0.0/bin/vc_pull +109 -0
  11. vaibify-0.0.0/bin/vc_push +107 -0
  12. vaibify-0.0.0/completions/vaibify.bash +131 -0
  13. vaibify-0.0.0/completions/vaibify.zsh +130 -0
  14. vaibify-0.0.0/container.conf.template +12 -0
  15. vaibify-0.0.0/docker/Dockerfile +159 -0
  16. vaibify-0.0.0/docker/Dockerfile.claude +13 -0
  17. vaibify-0.0.0/docker/Dockerfile.julia +24 -0
  18. vaibify-0.0.0/docker/Dockerfile.jupyter +14 -0
  19. vaibify-0.0.0/docker/Dockerfile.rlang +24 -0
  20. vaibify-0.0.0/docker/checkIsolation.sh +160 -0
  21. vaibify-0.0.0/docker/container.conf +27 -0
  22. vaibify-0.0.0/docker/entrypoint.sh +752 -0
  23. vaibify-0.0.0/docker/overlays/database.dockerfile +17 -0
  24. vaibify-0.0.0/docker/overlays/dvc.dockerfile +10 -0
  25. vaibify-0.0.0/docker/overlays/gpu.dockerfile +14 -0
  26. vaibify-0.0.0/docs/_static/.gitkeep +0 -0
  27. vaibify-0.0.0/docs/cli.md +203 -0
  28. vaibify-0.0.0/docs/conduct.rst +79 -0
  29. vaibify-0.0.0/docs/conf.py +54 -0
  30. vaibify-0.0.0/docs/configuration.md +141 -0
  31. vaibify-0.0.0/docs/developers.md +84 -0
  32. vaibify-0.0.0/docs/gui.md +115 -0
  33. vaibify-0.0.0/docs/index.rst +32 -0
  34. vaibify-0.0.0/docs/install.md +128 -0
  35. vaibify-0.0.0/docs/pipelines.md +126 -0
  36. vaibify-0.0.0/docs/quickStart.md +103 -0
  37. vaibify-0.0.0/docs/reproducibility.md +97 -0
  38. vaibify-0.0.0/docs/security.md +74 -0
  39. vaibify-0.0.0/docs/setupWizard.md +111 -0
  40. vaibify-0.0.0/docs/templates.md +66 -0
  41. vaibify-0.0.0/docs/testFormats.md +141 -0
  42. vaibify-0.0.0/docs/vaibify_logo.png +0 -0
  43. vaibify-0.0.0/pyproject.toml +110 -0
  44. vaibify-0.0.0/pytest.ini +5 -0
  45. vaibify-0.0.0/setup.cfg +4 -0
  46. vaibify-0.0.0/templates/sandbox/container.conf +3 -0
  47. vaibify-0.0.0/templates/sandbox/workflow.json +6 -0
  48. vaibify-0.0.0/templates/workflow/container.conf +11 -0
  49. vaibify-0.0.0/templates/workflow/workflow.json +21 -0
  50. vaibify-0.0.0/templates/workflow.yml.j2 +44 -0
  51. vaibify-0.0.0/tests/__init__.py +0 -0
  52. vaibify-0.0.0/tests/testArchiveFeatures.py +185 -0
  53. vaibify-0.0.0/tests/testCliApiCommands.py +289 -0
  54. vaibify-0.0.0/tests/testCliCommands.py +229 -0
  55. vaibify-0.0.0/tests/testCliMain.py +377 -0
  56. vaibify-0.0.0/tests/testCliStatusDestroy.py +303 -0
  57. vaibify-0.0.0/tests/testCliSubcommands.py +326 -0
  58. vaibify-0.0.0/tests/testCommandBuild.py +79 -0
  59. vaibify-0.0.0/tests/testCommandUtilities.py +45 -0
  60. vaibify-0.0.0/tests/testCommandUtilsDocker.py +90 -0
  61. vaibify-0.0.0/tests/testConfigLoader.py +128 -0
  62. vaibify-0.0.0/tests/testContainerConfig.py +128 -0
  63. vaibify-0.0.0/tests/testContainerManager.py +101 -0
  64. vaibify-0.0.0/tests/testContainerManagerFull.py +318 -0
  65. vaibify-0.0.0/tests/testCoverageBoost.py +1271 -0
  66. vaibify-0.0.0/tests/testCoverageBroadGaps.py +1489 -0
  67. vaibify-0.0.0/tests/testCoverageGaps.py +1597 -0
  68. vaibify-0.0.0/tests/testCoverageTargeted.py +719 -0
  69. vaibify-0.0.0/tests/testCreationWizardRoutes.py +177 -0
  70. vaibify-0.0.0/tests/testDataArchiverExtended.py +87 -0
  71. vaibify-0.0.0/tests/testDependencyScanRoutes.py +221 -0
  72. vaibify-0.0.0/tests/testDependencyScanner.py +890 -0
  73. vaibify-0.0.0/tests/testDeterministicTestGenerator.py +2448 -0
  74. vaibify-0.0.0/tests/testDirector.py +88 -0
  75. vaibify-0.0.0/tests/testDirectorExtended.py +590 -0
  76. vaibify-0.0.0/tests/testDirectorFull.py +334 -0
  77. vaibify-0.0.0/tests/testDirectorSync.py +58 -0
  78. vaibify-0.0.0/tests/testDockerBuild.py +115 -0
  79. vaibify-0.0.0/tests/testDockerConnection.py +174 -0
  80. vaibify-0.0.0/tests/testFigureServer.py +47 -0
  81. vaibify-0.0.0/tests/testFileEndpointsAndMiddleware.py +947 -0
  82. vaibify-0.0.0/tests/testFileTransfer.py +23 -0
  83. vaibify-0.0.0/tests/testFinalCoverageGaps.py +256 -0
  84. vaibify-0.0.0/tests/testGJ1132Build.py +330 -0
  85. vaibify-0.0.0/tests/testGithubWorkflow.py +122 -0
  86. vaibify-0.0.0/tests/testImageBuilder.py +167 -0
  87. vaibify-0.0.0/tests/testImageBuilderExtended.py +101 -0
  88. vaibify-0.0.0/tests/testLatexAnnotation.py +228 -0
  89. vaibify-0.0.0/tests/testLatexConnectorExtended.py +130 -0
  90. vaibify-0.0.0/tests/testOverleafSync.py +124 -0
  91. vaibify-0.0.0/tests/testOverleafSyncExtended.py +293 -0
  92. vaibify-0.0.0/tests/testPathTraversal.py +60 -0
  93. vaibify-0.0.0/tests/testPipelineRunnerErrors.py +67 -0
  94. vaibify-0.0.0/tests/testPipelineRunnerExtended.py +342 -0
  95. vaibify-0.0.0/tests/testPipelineRunnerFull.py +692 -0
  96. vaibify-0.0.0/tests/testPipelineRunnerPure.py +54 -0
  97. vaibify-0.0.0/tests/testPipelineServerFull.py +461 -0
  98. vaibify-0.0.0/tests/testPipelineServerPure.py +205 -0
  99. vaibify-0.0.0/tests/testPipelineServerRoutes.py +752 -0
  100. vaibify-0.0.0/tests/testPipelineState.py +92 -0
  101. vaibify-0.0.0/tests/testPipelineStateMock.py +88 -0
  102. vaibify-0.0.0/tests/testPreflightValidation.py +266 -0
  103. vaibify-0.0.0/tests/testProjectConfigExtended.py +92 -0
  104. vaibify-0.0.0/tests/testProvenanceTracker.py +190 -0
  105. vaibify-0.0.0/tests/testRegistryManager.py +307 -0
  106. vaibify-0.0.0/tests/testRegistryRoutes.py +552 -0
  107. vaibify-0.0.0/tests/testRemainingGaps.py +98 -0
  108. vaibify-0.0.0/tests/testResourceMonitor.py +86 -0
  109. vaibify-0.0.0/tests/testSecretManager.py +122 -0
  110. vaibify-0.0.0/tests/testSetupServerExtended.py +197 -0
  111. vaibify-0.0.0/tests/testSetupWizard.py +166 -0
  112. vaibify-0.0.0/tests/testSyncDispatcherExtended.py +306 -0
  113. vaibify-0.0.0/tests/testSyncDispatcherPure.py +63 -0
  114. vaibify-0.0.0/tests/testSyncErrors.py +142 -0
  115. vaibify-0.0.0/tests/testSyncTestGenFull.py +642 -0
  116. vaibify-0.0.0/tests/testTemplateManager.py +132 -0
  117. vaibify-0.0.0/tests/testTerminalSession.py +15 -0
  118. vaibify-0.0.0/tests/testTerminalSessionExtended.py +219 -0
  119. vaibify-0.0.0/tests/testTestGeneratorExtended.py +252 -0
  120. vaibify-0.0.0/tests/testTestGeneratorPure.py +340 -0
  121. vaibify-0.0.0/tests/testVolumeManager.py +20 -0
  122. vaibify-0.0.0/tests/testWorkflowManager.py +440 -0
  123. vaibify-0.0.0/tests/testWorkflowManagerExtended.py +615 -0
  124. vaibify-0.0.0/tests/testX11Forwarding.py +50 -0
  125. vaibify-0.0.0/tests/testZenodoClient.py +132 -0
  126. vaibify-0.0.0/tests/testZenodoClientExtended.py +252 -0
  127. vaibify-0.0.0/vaibify/__init__.py +4 -0
  128. vaibify-0.0.0/vaibify/__main__.py +5 -0
  129. vaibify-0.0.0/vaibify/_version.py +24 -0
  130. vaibify-0.0.0/vaibify/cli/__init__.py +1 -0
  131. vaibify-0.0.0/vaibify/cli/commandBuild.py +133 -0
  132. vaibify-0.0.0/vaibify/cli/commandCat.py +39 -0
  133. vaibify-0.0.0/vaibify/cli/commandConfig.py +82 -0
  134. vaibify-0.0.0/vaibify/cli/commandDestroy.py +72 -0
  135. vaibify-0.0.0/vaibify/cli/commandInit.py +117 -0
  136. vaibify-0.0.0/vaibify/cli/commandLs.py +59 -0
  137. vaibify-0.0.0/vaibify/cli/commandPublish.py +21 -0
  138. vaibify-0.0.0/vaibify/cli/commandRun.py +130 -0
  139. vaibify-0.0.0/vaibify/cli/commandStart.py +69 -0
  140. vaibify-0.0.0/vaibify/cli/commandStatus.py +79 -0
  141. vaibify-0.0.0/vaibify/cli/commandTest.py +148 -0
  142. vaibify-0.0.0/vaibify/cli/commandUtilsDocker.py +65 -0
  143. vaibify-0.0.0/vaibify/cli/commandVerifyStep.py +90 -0
  144. vaibify-0.0.0/vaibify/cli/commandWorkflow.py +122 -0
  145. vaibify-0.0.0/vaibify/cli/configLoader.py +167 -0
  146. vaibify-0.0.0/vaibify/cli/main.py +239 -0
  147. vaibify-0.0.0/vaibify/config/__init__.py +51 -0
  148. vaibify-0.0.0/vaibify/config/containerConfig.py +171 -0
  149. vaibify-0.0.0/vaibify/config/projectConfig.py +400 -0
  150. vaibify-0.0.0/vaibify/config/registryManager.py +288 -0
  151. vaibify-0.0.0/vaibify/config/secretManager.py +174 -0
  152. vaibify-0.0.0/vaibify/config/templateManager.py +105 -0
  153. vaibify-0.0.0/vaibify/docker/__init__.py +20 -0
  154. vaibify-0.0.0/vaibify/docker/containerManager.py +228 -0
  155. vaibify-0.0.0/vaibify/docker/dockerConnection.py +170 -0
  156. vaibify-0.0.0/vaibify/docker/fileTransfer.py +70 -0
  157. vaibify-0.0.0/vaibify/docker/imageBuilder.py +232 -0
  158. vaibify-0.0.0/vaibify/docker/volumeManager.py +70 -0
  159. vaibify-0.0.0/vaibify/docker/x11Forwarding.py +98 -0
  160. vaibify-0.0.0/vaibify/gui/__init__.py +0 -0
  161. vaibify-0.0.0/vaibify/gui/commandUtilities.py +98 -0
  162. vaibify-0.0.0/vaibify/gui/dependencyScanner.py +471 -0
  163. vaibify-0.0.0/vaibify/gui/director.py +549 -0
  164. vaibify-0.0.0/vaibify/gui/figureServer.py +23 -0
  165. vaibify-0.0.0/vaibify/gui/pipelineRunner.py +1053 -0
  166. vaibify-0.0.0/vaibify/gui/pipelineServer.py +2947 -0
  167. vaibify-0.0.0/vaibify/gui/pipelineState.py +118 -0
  168. vaibify-0.0.0/vaibify/gui/registryRoutes.py +468 -0
  169. vaibify-0.0.0/vaibify/gui/resourceMonitor.py +88 -0
  170. vaibify-0.0.0/vaibify/gui/setupServer.py +143 -0
  171. vaibify-0.0.0/vaibify/gui/static/favicon.png +0 -0
  172. vaibify-0.0.0/vaibify/gui/static/favicon.svg +4 -0
  173. vaibify-0.0.0/vaibify/gui/static/index.html +544 -0
  174. vaibify-0.0.0/vaibify/gui/static/scriptApplication.js +7219 -0
  175. vaibify-0.0.0/vaibify/gui/static/scriptFigureViewer.js +994 -0
  176. vaibify-0.0.0/vaibify/gui/static/scriptResourceMonitor.js +257 -0
  177. vaibify-0.0.0/vaibify/gui/static/scriptSetupWizard.js +372 -0
  178. vaibify-0.0.0/vaibify/gui/static/scriptStepEditor.js +286 -0
  179. vaibify-0.0.0/vaibify/gui/static/scriptTerminal.js +570 -0
  180. vaibify-0.0.0/vaibify/gui/static/scriptUtilities.js +45 -0
  181. vaibify-0.0.0/vaibify/gui/static/setupWizard.html +206 -0
  182. vaibify-0.0.0/vaibify/gui/static/styleMain.css +3031 -0
  183. vaibify-0.0.0/vaibify/gui/static/styleSetupWizard.css +410 -0
  184. vaibify-0.0.0/vaibify/gui/static/vaibify_logo_paleblue.png +0 -0
  185. vaibify-0.0.0/vaibify/gui/static/vaibify_logo_paleblue_dark.png +0 -0
  186. vaibify-0.0.0/vaibify/gui/syncDispatcher.py +693 -0
  187. vaibify-0.0.0/vaibify/gui/terminalSession.py +85 -0
  188. vaibify-0.0.0/vaibify/gui/testGenerator.py +3407 -0
  189. vaibify-0.0.0/vaibify/gui/workflowManager.py +699 -0
  190. vaibify-0.0.0/vaibify/install/__init__.py +0 -0
  191. vaibify-0.0.0/vaibify/install/installVaibify.sh +371 -0
  192. vaibify-0.0.0/vaibify/install/setupServer.py +300 -0
  193. vaibify-0.0.0/vaibify/install/shellSetup.py +185 -0
  194. vaibify-0.0.0/vaibify/install/uninstallVaibify.sh +209 -0
  195. vaibify-0.0.0/vaibify/reproducibility/__init__.py +1 -0
  196. vaibify-0.0.0/vaibify/reproducibility/dataArchiver.py +248 -0
  197. vaibify-0.0.0/vaibify/reproducibility/githubWorkflow.py +155 -0
  198. vaibify-0.0.0/vaibify/reproducibility/latexConnector.py +272 -0
  199. vaibify-0.0.0/vaibify/reproducibility/overleafSync.py +307 -0
  200. vaibify-0.0.0/vaibify/reproducibility/provenanceTracker.py +252 -0
  201. vaibify-0.0.0/vaibify/reproducibility/zenodoClient.py +256 -0
  202. vaibify-0.0.0/vaibify.egg-info/PKG-INFO +171 -0
  203. vaibify-0.0.0/vaibify.egg-info/SOURCES.txt +205 -0
  204. vaibify-0.0.0/vaibify.egg-info/dependency_links.txt +1 -0
  205. vaibify-0.0.0/vaibify.egg-info/entry_points.txt +3 -0
  206. vaibify-0.0.0/vaibify.egg-info/requires.txt +33 -0
  207. vaibify-0.0.0/vaibify.egg-info/top_level.txt +1 -0
@@ -0,0 +1,44 @@
1
+ name: docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+
7
+ permissions:
8
+ contents: write
9
+
10
+ jobs:
11
+ docs:
12
+ name: "Build and deploy docs"
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v5
16
+ with:
17
+ fetch-depth: 0
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: '3.12'
23
+ cache: 'pip'
24
+ cache-dependency-path: pyproject.toml
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ python -m pip install -e .
30
+ python -m pip install sphinx sphinx-rtd-theme myst-parser
31
+
32
+ - name: Build
33
+ id: build
34
+ run: |
35
+ cd docs
36
+ sphinx-build -b html . _build/html
37
+ touch _build/html/.nojekyll
38
+
39
+ - name: Publish
40
+ uses: JamesIves/github-pages-deploy-action@v4
41
+ if: steps.build.outcome == 'success' && github.event_name == 'push'
42
+ with:
43
+ branch: gh-pages
44
+ folder: docs/_build/html
@@ -0,0 +1,78 @@
1
+ name: pip-install
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - published
7
+
8
+ jobs:
9
+
10
+ build:
11
+ name: Build distribution
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v5
15
+ with:
16
+ fetch-depth: 0
17
+
18
+ - uses: actions/setup-python@v5
19
+ name: Install Python
20
+ with:
21
+ python-version: '3.11'
22
+
23
+ - name: Build
24
+ run: |
25
+ python -m pip install -U pip build twine setuptools setuptools_scm wheel
26
+ python -m build
27
+
28
+ - uses: actions/upload-artifact@v4
29
+ with:
30
+ name: dist
31
+ path: dist/*
32
+
33
+ test:
34
+ name: 'Test py${{ matrix.python }} on ${{ matrix.os }}'
35
+ needs: [build]
36
+ runs-on: ${{ matrix.os }}
37
+ strategy:
38
+ fail-fast: false
39
+ matrix:
40
+ os: [macos-15, macos-26, ubuntu-22.04, ubuntu-24.04]
41
+ python: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
42
+ steps:
43
+ - uses: actions/download-artifact@v4
44
+ with:
45
+ name: dist
46
+ path: dist
47
+
48
+ - uses: actions/setup-python@v5
49
+ name: Install Python
50
+ with:
51
+ python-version: ${{ matrix.python }}
52
+ allow-prereleases: true
53
+
54
+ - name: Test the sdist
55
+ run: |
56
+ python -m venv venv-sdist
57
+ venv-sdist/bin/python -m pip install dist/vaibify*.tar.gz
58
+ venv-sdist/bin/python -c "import vaibify; print(vaibify.__version__)"
59
+
60
+ - name: Test the wheel
61
+ run: |
62
+ python -m venv venv-wheel
63
+ venv-wheel/bin/python -m pip install dist/vaibify*.whl
64
+ venv-wheel/bin/python -c "import vaibify; print(vaibify.__version__)"
65
+
66
+ upload_pypi:
67
+ needs: [build, test]
68
+ runs-on: ubuntu-latest
69
+ if: github.event_name == 'release' && github.event.action == 'published'
70
+ permissions:
71
+ id-token: write
72
+ steps:
73
+ - uses: actions/download-artifact@v4
74
+ with:
75
+ name: dist
76
+ path: dist
77
+
78
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,61 @@
1
+ name: tests-linux
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ checks: write
12
+ pull-requests: write
13
+
14
+ jobs:
15
+ tests:
16
+ name: '${{ matrix.os }}:python-${{ matrix.python-version }}'
17
+ runs-on: ${{ matrix.os }}
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ os: [ubuntu-22.04, ubuntu-24.04]
22
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
23
+
24
+ steps:
25
+ - uses: actions/checkout@v5
26
+ with:
27
+ fetch-depth: 0
28
+
29
+ - name: Set up Python ${{ matrix.python-version }}
30
+ uses: actions/setup-python@v5
31
+ with:
32
+ python-version: ${{ matrix.python-version }}
33
+ cache: 'pip'
34
+ cache-dependency-path: pyproject.toml
35
+
36
+ - name: Install dependencies
37
+ run: |
38
+ python -m pip install --upgrade pip
39
+ python -m pip install -e ".[dev]"
40
+
41
+ - name: Run tests
42
+ timeout-minutes: 15
43
+ run: |
44
+ python -m pytest tests/ -m "not docker" --tb=short -v --junitxml=junit/test-results.xml --cov --cov-report=xml --cov-report=term
45
+
46
+ - name: Upload coverage to Codecov
47
+ if: matrix.os == 'ubuntu-22.04' && matrix.python-version == '3.9'
48
+ uses: codecov/codecov-action@v4
49
+ with:
50
+ token: ${{ secrets.CODECOV_TOKEN }}
51
+ files: ./coverage.xml
52
+ flags: ${{ matrix.os }}-py${{ matrix.python-version }}
53
+ name: ${{ matrix.os }}-py${{ matrix.python-version }}
54
+ fail_ci_if_error: false
55
+
56
+ - name: Publish test results
57
+ uses: EnricoMi/publish-unit-test-result-action@v2
58
+ if: always()
59
+ with:
60
+ files: junit/test-*.xml
61
+ check_name: Test Results (${{ matrix.os }} py${{ matrix.python-version }})
@@ -0,0 +1,38 @@
1
+ name: tests-macos
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ tests:
10
+ name: '${{ matrix.os }}:python-${{ matrix.python-version }}'
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ os: [macos-15, macos-26]
16
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v5
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+ cache: 'pip'
28
+ cache-dependency-path: pyproject.toml
29
+
30
+ - name: Install dependencies
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ python -m pip install -e ".[dev]"
34
+
35
+ - name: Run tests
36
+ timeout-minutes: 15
37
+ run: |
38
+ python -m pytest tests/ -m "not docker" --tb=short -v --junitxml=junit/test-results.xml --cov --cov-report=xml --cov-report=term
@@ -0,0 +1,22 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ *.egg
7
+ .pytest_cache/
8
+ .eggs/
9
+ .coverage
10
+
11
+ # Sphinx build output
12
+ docs/_build/
13
+
14
+ # Project-specific config (generated per-project, not part of the package)
15
+ vaibify.yml
16
+
17
+ # Build context files generated by 'vaibify build'
18
+ docker/binaries.env
19
+ docker/director.py
20
+ docker/pip-flags.txt
21
+ docker/requirements.txt
22
+ docker/system-packages.txt
vaibify-0.0.0/PKG-INFO ADDED
@@ -0,0 +1,171 @@
1
+ Metadata-Version: 2.4
2
+ Name: vaibify
3
+ Version: 0.0.0
4
+ Summary: Vibe boldly. Verify everything.
5
+ Author-email: Rory Barnes <rory@astro.washington.edu>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/RoryBarnes/Vaibify
8
+ Project-URL: Documentation, https://vaibify.readthedocs.io
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Scientific/Engineering
20
+ Requires-Python: >=3.9
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: click>=8.0
23
+ Requires-Dist: pyyaml>=6.0
24
+ Requires-Dist: fastapi>=0.115.0
25
+ Requires-Dist: starlette>=0.49.1
26
+ Requires-Dist: uvicorn>=0.20
27
+ Requires-Dist: websockets>=11.0
28
+ Requires-Dist: aiofiles>=23.0
29
+ Requires-Dist: jinja2>=3.1.6
30
+ Requires-Dist: tqdm>=4.60
31
+ Requires-Dist: requests>=2.28
32
+ Requires-Dist: h5py>=3.0
33
+ Requires-Dist: openpyxl>=3.0
34
+ Requires-Dist: Pillow>=9.0
35
+ Requires-Dist: pyarrow>=10.0
36
+ Requires-Dist: astropy>=5.0
37
+ Requires-Dist: scipy>=1.9
38
+ Requires-Dist: docker>=6.0
39
+ Requires-Dist: keyring>=23.0
40
+ Requires-Dist: pytest>=7.0
41
+ Requires-Dist: pytest-cov
42
+ Provides-Extra: formats
43
+ Requires-Dist: pyvista>=0.38; extra == "formats"
44
+ Requires-Dist: pysam>=0.20; extra == "formats"
45
+ Requires-Dist: pyreadstat>=1.2; extra == "formats"
46
+ Requires-Dist: pyreadr>=0.5; extra == "formats"
47
+ Requires-Dist: safetensors>=0.3; extra == "formats"
48
+ Requires-Dist: tfrecord>=1.14; extra == "formats"
49
+ Requires-Dist: scapy>=2.5; extra == "formats"
50
+ Provides-Extra: dev
51
+ Requires-Dist: pytest-asyncio; extra == "dev"
52
+ Requires-Dist: httpx; extra == "dev"
53
+
54
+ <p align="center">
55
+ <img width = "350" src="docs/vaibify_logo.png?raw=true"/>
56
+ </p>
57
+
58
+ <h1 align="center">Vibe Boldly. Verify Everything.</h1>
59
+
60
+ <p align="center">
61
+ <a href="https://RoryBarnes.github.io/vaibify">
62
+ <img src="https://img.shields.io/badge/Read-the_docs-blue.svg?style=flat">
63
+ </a>
64
+ <a href="https://RoryBarnes.github.io/vaibify/conduct.html">
65
+ <img src="https://img.shields.io/badge/Code%20of-Conduct-black.svg">
66
+ </a>
67
+ <a href="https://github.com/RoryBarnes/vaibify/issues">
68
+ <img src="https://img.shields.io/badge/Issues-orange.svg">
69
+ </a>
70
+ <a href="https://github.com/RoryBarnes/vaibify/discussions">
71
+ <img src="https://img.shields.io/badge/Discussions-orange.svg">
72
+ </a>
73
+ <br>
74
+ <img src="https://github.com/RoryBarnes/vaibify/actions/workflows/tests-linux.yml/badge.svg">
75
+ <img src="https://img.shields.io/badge/Ubuntu%2022--24-Python%203.9--3.14-7d93c7.svg">
76
+ <br>
77
+ <img src="https://github.com/RoryBarnes/vaibify/actions/workflows/tests-macos.yml/badge.svg">
78
+ <img src="https://img.shields.io/badge/macOS%2015--26-Python%203.9--3.14-7d93c7.svg">
79
+ <br>
80
+ <img src="https://github.com/RoryBarnes/vaibify/actions/workflows/docs.yml/badge.svg">
81
+ </p>
82
+
83
+ ### Overview
84
+
85
+ `vaibify` is based on the premise that AI-assisted research projects must be decomposable, verifiable, and containable.
86
+
87
+ `vaibify` creates secure, containerized environments for AI-assisted data science that can be accessed through a GUI and is fully scriptable. While it fully embraces agentic AI code development, `vaibify` also recognizes that *a human must verify all results*. `vaibify` solves these challanges by configuring Docker containers that prevent AI agents from harming your sensitive data, povides a GUI that supports terminal window(s) for running agents like Claude Code, and includes "viewing windows" that allow users to inspect resutls (data files, figures, animations). "Workflow" mode decomposes projects into automatic vs. interactive steps, and verifies the output via unit tests, dependency checks, and user validation. `vaibify` also seamlessly integrates with external resources like GitHub, Overleaf, and Zenodo so you can easily write reports, manage your work with version control, and archive your data. `vaibify` allows you to vibe code with confidence: your host machine stays safe while the agents develop code and build your analysis pipeline — all with minimal IDE interaction — enabling you to focus on vetting the results via visual inspection.
88
+
89
+ To get started, follow the [Installation Guide](https://RoryBarnes.github.io/vaibify/install.html) and then the [Quick Start](https://RoryBarnes.github.io/vaibify/quickStart.html).
90
+
91
+ ### Why Vaibify?
92
+
93
+ Data scientists increasingly rely on AI coding agents to build and iterate on analysis pipelines. But running AI-generated code raises real concerns:
94
+
95
+ - **Safety** — AI agents need broad permissions to be effective, but broad permissions on your host are dangerous. Vaibify runs everything inside an isolated Docker container with no access to your host filesystem, network, or credentials beyond what you explicitly grant.
96
+ - **Reproducibility** — Vaibify tracks provenance (SHA-256 hashes of every input and output), archives results to Zenodo with a DOI, syncs figures to Overleaf, and generates GitHub Actions workflows so anyone can reproduce your pipeline.
97
+ - **Iteration** — Decompose your project into steps, run them in parallel, inspect the outputs in the workflow viewer GUI, and re-run individual steps until you're satisfied.
98
+ - **Generality** — Vaibify is not tied to any specific domain. Configure your repositories, packages, languages (Python, R, Julia), and secrets in a single YAML file. Templates get you started fast.
99
+
100
+ ### Features
101
+
102
+ `Vaibify` provides a complete workflow for containerized scientific computing:
103
+
104
+ **Container Management** — Build, start, stop, and connect to Docker environments defined by a single `vaibify.yml` configuration file. Multiple projects can run simultaneously, each with its own container, image, and workspace volume. Target any project from any directory with `--project/-p`. Clone and install repositories, system packages, and Python/R/Julia dependencies automatically.
105
+
106
+ **Pipeline Execution** — Define multi-step workflows in `workflow.json` with data commands, plot commands, and test commands. Run individual steps or the full pipeline with one click in the browser-based GUI.
107
+
108
+ **Workflow Viewer** — A browser-based GUI for managing pipelines, viewing figures, monitoring resources, and running terminal sessions inside the container.
109
+
110
+ **Security** — No Docker socket inside the container, unprivileged user with `gosu`, ephemeral secrets mounted as mode-600 temp files, optional network isolation, and a built-in security audit (`vaibify verify`).
111
+
112
+ **Reproducibility** — Provenance tracking, Zenodo archival with DOI assignment, Overleaf figure sync, LaTeX annotation generation, and GitHub Actions workflow generation.
113
+
114
+ **Templates** — Two project templates ship with Vaibify: `sandbox` (no workflow, for exploration) and `workflow` (pipeline steps for reproducible analysis).
115
+
116
+ ### Quick Start
117
+
118
+ ```bash
119
+ pip install vaibify
120
+ vaibify init --template workflow
121
+ vaibify build
122
+ vaibify start --gui
123
+ ```
124
+
125
+ ### CLI Commands
126
+
127
+ ```
128
+ vaibify init [--template NAME] Create a project from a template
129
+ vaibify setup Launch the setup wizard GUI
130
+ vaibify build [-p NAME] [--no-cache] Build the Docker image
131
+ vaibify start [-p NAME] [--gui] Start the container
132
+ vaibify stop [-p NAME] Stop the container
133
+ vaibify status [-p NAME] Show environment status
134
+ vaibify connect [-p NAME] Shell into the container
135
+ vaibify verify [-p NAME] Run the isolation security audit
136
+ vaibify gui [-p NAME] Launch the workflow viewer
137
+ vaibify push [-p NAME] <src> <dest> Copy files into the container
138
+ vaibify pull [-p NAME] <src> <dest> Copy files out of the container
139
+ vaibify config [edit|export|import]
140
+ vaibify publish [archive|workflow]
141
+ ```
142
+
143
+ The shorthand `vaib` is also available.
144
+
145
+ ### Resources
146
+
147
+ The [docs/](docs/) directory contains the full Sphinx documentation, also available [online](https://RoryBarnes.github.io/vaibify). The [templates/](templates/) directory contains the project templates. The [tests/](tests/) directory contains the pytest test suite.
148
+
149
+ ### Code Integrity
150
+
151
+ The `Vaibify` team maintains code integrity through automatic checks at every pull request. Unit tests run across all permutations of Ubuntu 22.04/24.04, macOS 15/26, and Python 3.9 through 3.14. Tests that require a running Docker daemon are excluded from CI and run locally. Documentation is rebuilt and deployed automatically on every merge to main.
152
+
153
+ ### Community
154
+
155
+ `Vaibify` is a community project. We welcome pull requests — please issue them to the `main` branch. See the [Contributor's Guide](https://RoryBarnes.github.io/vaibify/developers.html) for style conventions and testing instructions.
156
+
157
+ If you have questions or are running into issues, post to a [Discussion](https://github.com/RoryBarnes/vaibify/discussions).
158
+
159
+ If you believe you have encountered a bug, please raise an issue using the [Issues](https://github.com/RoryBarnes/vaibify/issues) tab.
160
+
161
+ ### Requirements
162
+
163
+ - Python 3.9+
164
+ - Docker (or Colima on macOS)
165
+ - macOS or Linux
166
+
167
+ ### License
168
+
169
+ MIT
170
+
171
+ © 2025 Rory Barnes.
@@ -0,0 +1,118 @@
1
+ <p align="center">
2
+ <img width = "350" src="docs/vaibify_logo.png?raw=true"/>
3
+ </p>
4
+
5
+ <h1 align="center">Vibe Boldly. Verify Everything.</h1>
6
+
7
+ <p align="center">
8
+ <a href="https://RoryBarnes.github.io/vaibify">
9
+ <img src="https://img.shields.io/badge/Read-the_docs-blue.svg?style=flat">
10
+ </a>
11
+ <a href="https://RoryBarnes.github.io/vaibify/conduct.html">
12
+ <img src="https://img.shields.io/badge/Code%20of-Conduct-black.svg">
13
+ </a>
14
+ <a href="https://github.com/RoryBarnes/vaibify/issues">
15
+ <img src="https://img.shields.io/badge/Issues-orange.svg">
16
+ </a>
17
+ <a href="https://github.com/RoryBarnes/vaibify/discussions">
18
+ <img src="https://img.shields.io/badge/Discussions-orange.svg">
19
+ </a>
20
+ <br>
21
+ <img src="https://github.com/RoryBarnes/vaibify/actions/workflows/tests-linux.yml/badge.svg">
22
+ <img src="https://img.shields.io/badge/Ubuntu%2022--24-Python%203.9--3.14-7d93c7.svg">
23
+ <br>
24
+ <img src="https://github.com/RoryBarnes/vaibify/actions/workflows/tests-macos.yml/badge.svg">
25
+ <img src="https://img.shields.io/badge/macOS%2015--26-Python%203.9--3.14-7d93c7.svg">
26
+ <br>
27
+ <img src="https://github.com/RoryBarnes/vaibify/actions/workflows/docs.yml/badge.svg">
28
+ </p>
29
+
30
+ ### Overview
31
+
32
+ `vaibify` is based on the premise that AI-assisted research projects must be decomposable, verifiable, and containable.
33
+
34
+ `vaibify` creates secure, containerized environments for AI-assisted data science that can be accessed through a GUI and is fully scriptable. While it fully embraces agentic AI code development, `vaibify` also recognizes that *a human must verify all results*. `vaibify` solves these challanges by configuring Docker containers that prevent AI agents from harming your sensitive data, povides a GUI that supports terminal window(s) for running agents like Claude Code, and includes "viewing windows" that allow users to inspect resutls (data files, figures, animations). "Workflow" mode decomposes projects into automatic vs. interactive steps, and verifies the output via unit tests, dependency checks, and user validation. `vaibify` also seamlessly integrates with external resources like GitHub, Overleaf, and Zenodo so you can easily write reports, manage your work with version control, and archive your data. `vaibify` allows you to vibe code with confidence: your host machine stays safe while the agents develop code and build your analysis pipeline — all with minimal IDE interaction — enabling you to focus on vetting the results via visual inspection.
35
+
36
+ To get started, follow the [Installation Guide](https://RoryBarnes.github.io/vaibify/install.html) and then the [Quick Start](https://RoryBarnes.github.io/vaibify/quickStart.html).
37
+
38
+ ### Why Vaibify?
39
+
40
+ Data scientists increasingly rely on AI coding agents to build and iterate on analysis pipelines. But running AI-generated code raises real concerns:
41
+
42
+ - **Safety** — AI agents need broad permissions to be effective, but broad permissions on your host are dangerous. Vaibify runs everything inside an isolated Docker container with no access to your host filesystem, network, or credentials beyond what you explicitly grant.
43
+ - **Reproducibility** — Vaibify tracks provenance (SHA-256 hashes of every input and output), archives results to Zenodo with a DOI, syncs figures to Overleaf, and generates GitHub Actions workflows so anyone can reproduce your pipeline.
44
+ - **Iteration** — Decompose your project into steps, run them in parallel, inspect the outputs in the workflow viewer GUI, and re-run individual steps until you're satisfied.
45
+ - **Generality** — Vaibify is not tied to any specific domain. Configure your repositories, packages, languages (Python, R, Julia), and secrets in a single YAML file. Templates get you started fast.
46
+
47
+ ### Features
48
+
49
+ `Vaibify` provides a complete workflow for containerized scientific computing:
50
+
51
+ **Container Management** — Build, start, stop, and connect to Docker environments defined by a single `vaibify.yml` configuration file. Multiple projects can run simultaneously, each with its own container, image, and workspace volume. Target any project from any directory with `--project/-p`. Clone and install repositories, system packages, and Python/R/Julia dependencies automatically.
52
+
53
+ **Pipeline Execution** — Define multi-step workflows in `workflow.json` with data commands, plot commands, and test commands. Run individual steps or the full pipeline with one click in the browser-based GUI.
54
+
55
+ **Workflow Viewer** — A browser-based GUI for managing pipelines, viewing figures, monitoring resources, and running terminal sessions inside the container.
56
+
57
+ **Security** — No Docker socket inside the container, unprivileged user with `gosu`, ephemeral secrets mounted as mode-600 temp files, optional network isolation, and a built-in security audit (`vaibify verify`).
58
+
59
+ **Reproducibility** — Provenance tracking, Zenodo archival with DOI assignment, Overleaf figure sync, LaTeX annotation generation, and GitHub Actions workflow generation.
60
+
61
+ **Templates** — Two project templates ship with Vaibify: `sandbox` (no workflow, for exploration) and `workflow` (pipeline steps for reproducible analysis).
62
+
63
+ ### Quick Start
64
+
65
+ ```bash
66
+ pip install vaibify
67
+ vaibify init --template workflow
68
+ vaibify build
69
+ vaibify start --gui
70
+ ```
71
+
72
+ ### CLI Commands
73
+
74
+ ```
75
+ vaibify init [--template NAME] Create a project from a template
76
+ vaibify setup Launch the setup wizard GUI
77
+ vaibify build [-p NAME] [--no-cache] Build the Docker image
78
+ vaibify start [-p NAME] [--gui] Start the container
79
+ vaibify stop [-p NAME] Stop the container
80
+ vaibify status [-p NAME] Show environment status
81
+ vaibify connect [-p NAME] Shell into the container
82
+ vaibify verify [-p NAME] Run the isolation security audit
83
+ vaibify gui [-p NAME] Launch the workflow viewer
84
+ vaibify push [-p NAME] <src> <dest> Copy files into the container
85
+ vaibify pull [-p NAME] <src> <dest> Copy files out of the container
86
+ vaibify config [edit|export|import]
87
+ vaibify publish [archive|workflow]
88
+ ```
89
+
90
+ The shorthand `vaib` is also available.
91
+
92
+ ### Resources
93
+
94
+ The [docs/](docs/) directory contains the full Sphinx documentation, also available [online](https://RoryBarnes.github.io/vaibify). The [templates/](templates/) directory contains the project templates. The [tests/](tests/) directory contains the pytest test suite.
95
+
96
+ ### Code Integrity
97
+
98
+ The `Vaibify` team maintains code integrity through automatic checks at every pull request. Unit tests run across all permutations of Ubuntu 22.04/24.04, macOS 15/26, and Python 3.9 through 3.14. Tests that require a running Docker daemon are excluded from CI and run locally. Documentation is rebuilt and deployed automatically on every merge to main.
99
+
100
+ ### Community
101
+
102
+ `Vaibify` is a community project. We welcome pull requests — please issue them to the `main` branch. See the [Contributor's Guide](https://RoryBarnes.github.io/vaibify/developers.html) for style conventions and testing instructions.
103
+
104
+ If you have questions or are running into issues, post to a [Discussion](https://github.com/RoryBarnes/vaibify/discussions).
105
+
106
+ If you believe you have encountered a bug, please raise an issue using the [Issues](https://github.com/RoryBarnes/vaibify/issues) tab.
107
+
108
+ ### Requirements
109
+
110
+ - Python 3.9+
111
+ - Docker (or Colima on macOS)
112
+ - macOS or Linux
113
+
114
+ ### License
115
+
116
+ MIT
117
+
118
+ © 2025 Rory Barnes.
@@ -0,0 +1,51 @@
1
+ #!/bin/sh
2
+ # connect_dc - Open a new shell session in the running DataContainer.
3
+ #
4
+ # Reads the project name and container user from datacontainer.yml in the
5
+ # current directory, then opens an interactive bash session inside the
6
+ # corresponding Docker container.
7
+ #
8
+ # Usage:
9
+ # connect_dc
10
+
11
+ set -e
12
+
13
+ # ---------------------------------------------------------------------------
14
+ fnPrintError() { echo "Error: $1" >&2; }
15
+
16
+ # ---------------------------------------------------------------------------
17
+ # fsReadYamlField: Extract a single field from datacontainer.yml via Python
18
+ # Arguments: sFieldExpression - Python expression to evaluate
19
+ # Prints: the field value, or empty string on failure
20
+ # ---------------------------------------------------------------------------
21
+ fsReadYamlField() {
22
+ python3 -c "import yaml; print($1)" 2>/dev/null || true
23
+ }
24
+
25
+ # ===========================================================================
26
+ # Main
27
+ # ===========================================================================
28
+
29
+ sVcProject=$(fsReadYamlField "yaml.safe_load(open('datacontainer.yml'))['projectName']")
30
+ sVcUser=$(fsReadYamlField "yaml.safe_load(open('datacontainer.yml')).get('containerUser','researcher')")
31
+
32
+ if [ -z "${sVcProject}" ]; then
33
+ fnPrintError "No datacontainer.yml found in current directory."
34
+ exit 1
35
+ fi
36
+
37
+ if [ -z "${sVcUser}" ]; then
38
+ sVcUser="researcher"
39
+ fi
40
+
41
+ if ! command -v docker > /dev/null 2>&1; then
42
+ fnPrintError "docker not found on PATH."
43
+ exit 1
44
+ fi
45
+
46
+ if ! docker container inspect "${sVcProject}" > /dev/null 2>&1; then
47
+ fnPrintError "Container '${sVcProject}' is not running. Start it with: datacontainer start"
48
+ exit 1
49
+ fi
50
+
51
+ docker exec -it -u "${sVcUser}" "${sVcProject}" bash
@@ -0,0 +1,73 @@
1
+ #!/bin/sh
2
+ # vcTransferCommon.sh - Shared functions for vc_push and vc_pull.
3
+ #
4
+ # Sourced by vc_push and vc_pull to avoid duplicating container
5
+ # verification, path resolution, and user confirmation logic.
6
+ # Reads VC_CONTAINER and VC_WORKSPACE from vaibify.yml in the
7
+ # current directory.
8
+
9
+ # ---------------------------------------------------------------------------
10
+ # fnReadContainerConfig: Populate VC_CONTAINER and VC_WORKSPACE from YAML
11
+ # ---------------------------------------------------------------------------
12
+ fnReadContainerConfig() {
13
+ VC_CONTAINER=$(python3 -c \
14
+ "import yaml; print(yaml.safe_load(open('vaibify.yml'))['projectName'])" \
15
+ 2>/dev/null || true)
16
+ VC_WORKSPACE=$(python3 -c \
17
+ "import yaml; print(yaml.safe_load(open('vaibify.yml')).get('workspaceRoot','/workspace'))" \
18
+ 2>/dev/null || true)
19
+
20
+ if [ -z "${VC_CONTAINER}" ]; then
21
+ fnPrintError "No vaibify.yml found in current directory."
22
+ exit 1
23
+ fi
24
+ if [ -z "${VC_WORKSPACE}" ]; then
25
+ VC_WORKSPACE="/workspace"
26
+ fi
27
+ }
28
+
29
+ # ---------------------------------------------------------------------------
30
+ fnPrintError() { echo "Error: $1" >&2; }
31
+
32
+ # ---------------------------------------------------------------------------
33
+ # fnCheckContainer: Verify the Vaibify is running
34
+ # ---------------------------------------------------------------------------
35
+ fnCheckContainer() {
36
+ if ! command -v docker > /dev/null 2>&1; then
37
+ fnPrintError "docker not found on PATH."
38
+ exit 1
39
+ fi
40
+ fnReadContainerConfig
41
+ if ! docker container inspect "${VC_CONTAINER}" > /dev/null 2>&1; then
42
+ fnPrintError "Vaibify '${VC_CONTAINER}' is not running. Start it with: vaibify start"
43
+ exit 1
44
+ fi
45
+ }
46
+
47
+ # ---------------------------------------------------------------------------
48
+ # fsResolveContainerPath: Map a user-facing path to a workspace-absolute path
49
+ # Arguments: sRelativePath
50
+ # Prints: the resolved absolute path inside the container
51
+ # ---------------------------------------------------------------------------
52
+ fsResolveContainerPath() {
53
+ case "$1" in
54
+ /*) echo "$1" ;;
55
+ .) echo "${VC_WORKSPACE}" ;;
56
+ *) echo "${VC_WORKSPACE}/$1" ;;
57
+ esac
58
+ }
59
+
60
+ # ---------------------------------------------------------------------------
61
+ # fbConfirmRecursive: Prompt the user before copying a directory
62
+ # Arguments: sDisplayPath
63
+ # Returns: 0 if confirmed, 1 otherwise
64
+ # ---------------------------------------------------------------------------
65
+ fbConfirmRecursive() {
66
+ printf "'%s' is a directory. Copy recursively? [y/N] " "$1"
67
+ local sAnswer
68
+ read -r sAnswer
69
+ case "${sAnswer}" in
70
+ [Yy]) return 0 ;;
71
+ *) return 1 ;;
72
+ esac
73
+ }