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.
- vaibify-0.0.0/.github/workflows/docs.yml +44 -0
- vaibify-0.0.0/.github/workflows/pip-install.yml +78 -0
- vaibify-0.0.0/.github/workflows/tests-linux.yml +61 -0
- vaibify-0.0.0/.github/workflows/tests-macos.yml +38 -0
- vaibify-0.0.0/.gitignore +22 -0
- vaibify-0.0.0/PKG-INFO +171 -0
- vaibify-0.0.0/README.md +118 -0
- vaibify-0.0.0/bin/connect_vc +51 -0
- vaibify-0.0.0/bin/vcTransferCommon.sh +73 -0
- vaibify-0.0.0/bin/vc_pull +109 -0
- vaibify-0.0.0/bin/vc_push +107 -0
- vaibify-0.0.0/completions/vaibify.bash +131 -0
- vaibify-0.0.0/completions/vaibify.zsh +130 -0
- vaibify-0.0.0/container.conf.template +12 -0
- vaibify-0.0.0/docker/Dockerfile +159 -0
- vaibify-0.0.0/docker/Dockerfile.claude +13 -0
- vaibify-0.0.0/docker/Dockerfile.julia +24 -0
- vaibify-0.0.0/docker/Dockerfile.jupyter +14 -0
- vaibify-0.0.0/docker/Dockerfile.rlang +24 -0
- vaibify-0.0.0/docker/checkIsolation.sh +160 -0
- vaibify-0.0.0/docker/container.conf +27 -0
- vaibify-0.0.0/docker/entrypoint.sh +752 -0
- vaibify-0.0.0/docker/overlays/database.dockerfile +17 -0
- vaibify-0.0.0/docker/overlays/dvc.dockerfile +10 -0
- vaibify-0.0.0/docker/overlays/gpu.dockerfile +14 -0
- vaibify-0.0.0/docs/_static/.gitkeep +0 -0
- vaibify-0.0.0/docs/cli.md +203 -0
- vaibify-0.0.0/docs/conduct.rst +79 -0
- vaibify-0.0.0/docs/conf.py +54 -0
- vaibify-0.0.0/docs/configuration.md +141 -0
- vaibify-0.0.0/docs/developers.md +84 -0
- vaibify-0.0.0/docs/gui.md +115 -0
- vaibify-0.0.0/docs/index.rst +32 -0
- vaibify-0.0.0/docs/install.md +128 -0
- vaibify-0.0.0/docs/pipelines.md +126 -0
- vaibify-0.0.0/docs/quickStart.md +103 -0
- vaibify-0.0.0/docs/reproducibility.md +97 -0
- vaibify-0.0.0/docs/security.md +74 -0
- vaibify-0.0.0/docs/setupWizard.md +111 -0
- vaibify-0.0.0/docs/templates.md +66 -0
- vaibify-0.0.0/docs/testFormats.md +141 -0
- vaibify-0.0.0/docs/vaibify_logo.png +0 -0
- vaibify-0.0.0/pyproject.toml +110 -0
- vaibify-0.0.0/pytest.ini +5 -0
- vaibify-0.0.0/setup.cfg +4 -0
- vaibify-0.0.0/templates/sandbox/container.conf +3 -0
- vaibify-0.0.0/templates/sandbox/workflow.json +6 -0
- vaibify-0.0.0/templates/workflow/container.conf +11 -0
- vaibify-0.0.0/templates/workflow/workflow.json +21 -0
- vaibify-0.0.0/templates/workflow.yml.j2 +44 -0
- vaibify-0.0.0/tests/__init__.py +0 -0
- vaibify-0.0.0/tests/testArchiveFeatures.py +185 -0
- vaibify-0.0.0/tests/testCliApiCommands.py +289 -0
- vaibify-0.0.0/tests/testCliCommands.py +229 -0
- vaibify-0.0.0/tests/testCliMain.py +377 -0
- vaibify-0.0.0/tests/testCliStatusDestroy.py +303 -0
- vaibify-0.0.0/tests/testCliSubcommands.py +326 -0
- vaibify-0.0.0/tests/testCommandBuild.py +79 -0
- vaibify-0.0.0/tests/testCommandUtilities.py +45 -0
- vaibify-0.0.0/tests/testCommandUtilsDocker.py +90 -0
- vaibify-0.0.0/tests/testConfigLoader.py +128 -0
- vaibify-0.0.0/tests/testContainerConfig.py +128 -0
- vaibify-0.0.0/tests/testContainerManager.py +101 -0
- vaibify-0.0.0/tests/testContainerManagerFull.py +318 -0
- vaibify-0.0.0/tests/testCoverageBoost.py +1271 -0
- vaibify-0.0.0/tests/testCoverageBroadGaps.py +1489 -0
- vaibify-0.0.0/tests/testCoverageGaps.py +1597 -0
- vaibify-0.0.0/tests/testCoverageTargeted.py +719 -0
- vaibify-0.0.0/tests/testCreationWizardRoutes.py +177 -0
- vaibify-0.0.0/tests/testDataArchiverExtended.py +87 -0
- vaibify-0.0.0/tests/testDependencyScanRoutes.py +221 -0
- vaibify-0.0.0/tests/testDependencyScanner.py +890 -0
- vaibify-0.0.0/tests/testDeterministicTestGenerator.py +2448 -0
- vaibify-0.0.0/tests/testDirector.py +88 -0
- vaibify-0.0.0/tests/testDirectorExtended.py +590 -0
- vaibify-0.0.0/tests/testDirectorFull.py +334 -0
- vaibify-0.0.0/tests/testDirectorSync.py +58 -0
- vaibify-0.0.0/tests/testDockerBuild.py +115 -0
- vaibify-0.0.0/tests/testDockerConnection.py +174 -0
- vaibify-0.0.0/tests/testFigureServer.py +47 -0
- vaibify-0.0.0/tests/testFileEndpointsAndMiddleware.py +947 -0
- vaibify-0.0.0/tests/testFileTransfer.py +23 -0
- vaibify-0.0.0/tests/testFinalCoverageGaps.py +256 -0
- vaibify-0.0.0/tests/testGJ1132Build.py +330 -0
- vaibify-0.0.0/tests/testGithubWorkflow.py +122 -0
- vaibify-0.0.0/tests/testImageBuilder.py +167 -0
- vaibify-0.0.0/tests/testImageBuilderExtended.py +101 -0
- vaibify-0.0.0/tests/testLatexAnnotation.py +228 -0
- vaibify-0.0.0/tests/testLatexConnectorExtended.py +130 -0
- vaibify-0.0.0/tests/testOverleafSync.py +124 -0
- vaibify-0.0.0/tests/testOverleafSyncExtended.py +293 -0
- vaibify-0.0.0/tests/testPathTraversal.py +60 -0
- vaibify-0.0.0/tests/testPipelineRunnerErrors.py +67 -0
- vaibify-0.0.0/tests/testPipelineRunnerExtended.py +342 -0
- vaibify-0.0.0/tests/testPipelineRunnerFull.py +692 -0
- vaibify-0.0.0/tests/testPipelineRunnerPure.py +54 -0
- vaibify-0.0.0/tests/testPipelineServerFull.py +461 -0
- vaibify-0.0.0/tests/testPipelineServerPure.py +205 -0
- vaibify-0.0.0/tests/testPipelineServerRoutes.py +752 -0
- vaibify-0.0.0/tests/testPipelineState.py +92 -0
- vaibify-0.0.0/tests/testPipelineStateMock.py +88 -0
- vaibify-0.0.0/tests/testPreflightValidation.py +266 -0
- vaibify-0.0.0/tests/testProjectConfigExtended.py +92 -0
- vaibify-0.0.0/tests/testProvenanceTracker.py +190 -0
- vaibify-0.0.0/tests/testRegistryManager.py +307 -0
- vaibify-0.0.0/tests/testRegistryRoutes.py +552 -0
- vaibify-0.0.0/tests/testRemainingGaps.py +98 -0
- vaibify-0.0.0/tests/testResourceMonitor.py +86 -0
- vaibify-0.0.0/tests/testSecretManager.py +122 -0
- vaibify-0.0.0/tests/testSetupServerExtended.py +197 -0
- vaibify-0.0.0/tests/testSetupWizard.py +166 -0
- vaibify-0.0.0/tests/testSyncDispatcherExtended.py +306 -0
- vaibify-0.0.0/tests/testSyncDispatcherPure.py +63 -0
- vaibify-0.0.0/tests/testSyncErrors.py +142 -0
- vaibify-0.0.0/tests/testSyncTestGenFull.py +642 -0
- vaibify-0.0.0/tests/testTemplateManager.py +132 -0
- vaibify-0.0.0/tests/testTerminalSession.py +15 -0
- vaibify-0.0.0/tests/testTerminalSessionExtended.py +219 -0
- vaibify-0.0.0/tests/testTestGeneratorExtended.py +252 -0
- vaibify-0.0.0/tests/testTestGeneratorPure.py +340 -0
- vaibify-0.0.0/tests/testVolumeManager.py +20 -0
- vaibify-0.0.0/tests/testWorkflowManager.py +440 -0
- vaibify-0.0.0/tests/testWorkflowManagerExtended.py +615 -0
- vaibify-0.0.0/tests/testX11Forwarding.py +50 -0
- vaibify-0.0.0/tests/testZenodoClient.py +132 -0
- vaibify-0.0.0/tests/testZenodoClientExtended.py +252 -0
- vaibify-0.0.0/vaibify/__init__.py +4 -0
- vaibify-0.0.0/vaibify/__main__.py +5 -0
- vaibify-0.0.0/vaibify/_version.py +24 -0
- vaibify-0.0.0/vaibify/cli/__init__.py +1 -0
- vaibify-0.0.0/vaibify/cli/commandBuild.py +133 -0
- vaibify-0.0.0/vaibify/cli/commandCat.py +39 -0
- vaibify-0.0.0/vaibify/cli/commandConfig.py +82 -0
- vaibify-0.0.0/vaibify/cli/commandDestroy.py +72 -0
- vaibify-0.0.0/vaibify/cli/commandInit.py +117 -0
- vaibify-0.0.0/vaibify/cli/commandLs.py +59 -0
- vaibify-0.0.0/vaibify/cli/commandPublish.py +21 -0
- vaibify-0.0.0/vaibify/cli/commandRun.py +130 -0
- vaibify-0.0.0/vaibify/cli/commandStart.py +69 -0
- vaibify-0.0.0/vaibify/cli/commandStatus.py +79 -0
- vaibify-0.0.0/vaibify/cli/commandTest.py +148 -0
- vaibify-0.0.0/vaibify/cli/commandUtilsDocker.py +65 -0
- vaibify-0.0.0/vaibify/cli/commandVerifyStep.py +90 -0
- vaibify-0.0.0/vaibify/cli/commandWorkflow.py +122 -0
- vaibify-0.0.0/vaibify/cli/configLoader.py +167 -0
- vaibify-0.0.0/vaibify/cli/main.py +239 -0
- vaibify-0.0.0/vaibify/config/__init__.py +51 -0
- vaibify-0.0.0/vaibify/config/containerConfig.py +171 -0
- vaibify-0.0.0/vaibify/config/projectConfig.py +400 -0
- vaibify-0.0.0/vaibify/config/registryManager.py +288 -0
- vaibify-0.0.0/vaibify/config/secretManager.py +174 -0
- vaibify-0.0.0/vaibify/config/templateManager.py +105 -0
- vaibify-0.0.0/vaibify/docker/__init__.py +20 -0
- vaibify-0.0.0/vaibify/docker/containerManager.py +228 -0
- vaibify-0.0.0/vaibify/docker/dockerConnection.py +170 -0
- vaibify-0.0.0/vaibify/docker/fileTransfer.py +70 -0
- vaibify-0.0.0/vaibify/docker/imageBuilder.py +232 -0
- vaibify-0.0.0/vaibify/docker/volumeManager.py +70 -0
- vaibify-0.0.0/vaibify/docker/x11Forwarding.py +98 -0
- vaibify-0.0.0/vaibify/gui/__init__.py +0 -0
- vaibify-0.0.0/vaibify/gui/commandUtilities.py +98 -0
- vaibify-0.0.0/vaibify/gui/dependencyScanner.py +471 -0
- vaibify-0.0.0/vaibify/gui/director.py +549 -0
- vaibify-0.0.0/vaibify/gui/figureServer.py +23 -0
- vaibify-0.0.0/vaibify/gui/pipelineRunner.py +1053 -0
- vaibify-0.0.0/vaibify/gui/pipelineServer.py +2947 -0
- vaibify-0.0.0/vaibify/gui/pipelineState.py +118 -0
- vaibify-0.0.0/vaibify/gui/registryRoutes.py +468 -0
- vaibify-0.0.0/vaibify/gui/resourceMonitor.py +88 -0
- vaibify-0.0.0/vaibify/gui/setupServer.py +143 -0
- vaibify-0.0.0/vaibify/gui/static/favicon.png +0 -0
- vaibify-0.0.0/vaibify/gui/static/favicon.svg +4 -0
- vaibify-0.0.0/vaibify/gui/static/index.html +544 -0
- vaibify-0.0.0/vaibify/gui/static/scriptApplication.js +7219 -0
- vaibify-0.0.0/vaibify/gui/static/scriptFigureViewer.js +994 -0
- vaibify-0.0.0/vaibify/gui/static/scriptResourceMonitor.js +257 -0
- vaibify-0.0.0/vaibify/gui/static/scriptSetupWizard.js +372 -0
- vaibify-0.0.0/vaibify/gui/static/scriptStepEditor.js +286 -0
- vaibify-0.0.0/vaibify/gui/static/scriptTerminal.js +570 -0
- vaibify-0.0.0/vaibify/gui/static/scriptUtilities.js +45 -0
- vaibify-0.0.0/vaibify/gui/static/setupWizard.html +206 -0
- vaibify-0.0.0/vaibify/gui/static/styleMain.css +3031 -0
- vaibify-0.0.0/vaibify/gui/static/styleSetupWizard.css +410 -0
- vaibify-0.0.0/vaibify/gui/static/vaibify_logo_paleblue.png +0 -0
- vaibify-0.0.0/vaibify/gui/static/vaibify_logo_paleblue_dark.png +0 -0
- vaibify-0.0.0/vaibify/gui/syncDispatcher.py +693 -0
- vaibify-0.0.0/vaibify/gui/terminalSession.py +85 -0
- vaibify-0.0.0/vaibify/gui/testGenerator.py +3407 -0
- vaibify-0.0.0/vaibify/gui/workflowManager.py +699 -0
- vaibify-0.0.0/vaibify/install/__init__.py +0 -0
- vaibify-0.0.0/vaibify/install/installVaibify.sh +371 -0
- vaibify-0.0.0/vaibify/install/setupServer.py +300 -0
- vaibify-0.0.0/vaibify/install/shellSetup.py +185 -0
- vaibify-0.0.0/vaibify/install/uninstallVaibify.sh +209 -0
- vaibify-0.0.0/vaibify/reproducibility/__init__.py +1 -0
- vaibify-0.0.0/vaibify/reproducibility/dataArchiver.py +248 -0
- vaibify-0.0.0/vaibify/reproducibility/githubWorkflow.py +155 -0
- vaibify-0.0.0/vaibify/reproducibility/latexConnector.py +272 -0
- vaibify-0.0.0/vaibify/reproducibility/overleafSync.py +307 -0
- vaibify-0.0.0/vaibify/reproducibility/provenanceTracker.py +252 -0
- vaibify-0.0.0/vaibify/reproducibility/zenodoClient.py +256 -0
- vaibify-0.0.0/vaibify.egg-info/PKG-INFO +171 -0
- vaibify-0.0.0/vaibify.egg-info/SOURCES.txt +205 -0
- vaibify-0.0.0/vaibify.egg-info/dependency_links.txt +1 -0
- vaibify-0.0.0/vaibify.egg-info/entry_points.txt +3 -0
- vaibify-0.0.0/vaibify.egg-info/requires.txt +33 -0
- 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
|
vaibify-0.0.0/.gitignore
ADDED
|
@@ -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.
|
vaibify-0.0.0/README.md
ADDED
|
@@ -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
|
+
}
|