beakerhub 0.0.1__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.
- beakerhub-0.0.1/.dockerignore +16 -0
- beakerhub-0.0.1/.github/workflows/test-integration.yml +138 -0
- beakerhub-0.0.1/.github/workflows/test-unit.yml +63 -0
- beakerhub-0.0.1/.gitignore +114 -0
- beakerhub-0.0.1/CONTRIBUTING.md +436 -0
- beakerhub-0.0.1/LICENSE.txt +9 -0
- beakerhub-0.0.1/Makefile +238 -0
- beakerhub-0.0.1/PKG-INFO +230 -0
- beakerhub-0.0.1/README.md +198 -0
- beakerhub-0.0.1/docs/DEVELOPMENT.md +391 -0
- beakerhub-0.0.1/docs/QUICKSTART.md +240 -0
- beakerhub-0.0.1/docs/README.md +47 -0
- beakerhub-0.0.1/docs/local-tls.md +142 -0
- beakerhub-0.0.1/docs/vue-jupyterhub-integration.md +149 -0
- beakerhub-0.0.1/helm/Makefile +334 -0
- beakerhub-0.0.1/helm/README.md +239 -0
- beakerhub-0.0.1/helm/beakerhub/.helmignore +23 -0
- beakerhub-0.0.1/helm/beakerhub/Chart.yaml +15 -0
- beakerhub-0.0.1/helm/beakerhub/README.md +320 -0
- beakerhub-0.0.1/helm/beakerhub/templates/NOTES.txt +63 -0
- beakerhub-0.0.1/helm/beakerhub/templates/_helpers.tpl +60 -0
- beakerhub-0.0.1/helm/beakerhub/templates/beakerhub-config.yaml +216 -0
- beakerhub-0.0.1/helm/beakerhub/templates/configmap.yaml +53 -0
- beakerhub-0.0.1/helm/beakerhub/templates/dev-vite-server.yaml +129 -0
- beakerhub-0.0.1/helm/beakerhub/templates/hub-deployment.yaml +156 -0
- beakerhub-0.0.1/helm/beakerhub/templates/hub-service.yaml +27 -0
- beakerhub-0.0.1/helm/beakerhub/templates/ingress.yaml +79 -0
- beakerhub-0.0.1/helm/beakerhub/templates/notebook-serviceAccount.yaml +12 -0
- beakerhub-0.0.1/helm/beakerhub/templates/proxy-deployment.yaml +90 -0
- beakerhub-0.0.1/helm/beakerhub/templates/proxy-service.yaml +60 -0
- beakerhub-0.0.1/helm/beakerhub/templates/pvc.yaml +63 -0
- beakerhub-0.0.1/helm/beakerhub/templates/rbac.yaml +110 -0
- beakerhub-0.0.1/helm/beakerhub/templates/secret.yaml +60 -0
- beakerhub-0.0.1/helm/beakerhub/templates/serviceaccount.yaml +20 -0
- beakerhub-0.0.1/helm/beakerhub/templates/target-group-binding.yaml +27 -0
- beakerhub-0.0.1/helm/beakerhub/values.yaml +414 -0
- beakerhub-0.0.1/helm/kind/certs.d/registry.beakerhub.internal/hosts.toml +5 -0
- beakerhub-0.0.1/helm/kind/dev-setup.py +333 -0
- beakerhub-0.0.1/helm/kind/install-ingress-kind.sh +32 -0
- beakerhub-0.0.1/helm/kind/install-metallb-kind.sh +74 -0
- beakerhub-0.0.1/helm/kind/requirements.txt +2 -0
- beakerhub-0.0.1/helm/kind/update-hosts.sh +226 -0
- beakerhub-0.0.1/helm/values-local.yaml +96 -0
- beakerhub-0.0.1/images/Makefile +47 -0
- beakerhub-0.0.1/images/base.Dockerfile +50 -0
- beakerhub-0.0.1/images/beakerhub-ui-build.Dockerfile +17 -0
- beakerhub-0.0.1/images/config_files/bin/entry-point.sh +4 -0
- beakerhub-0.0.1/images/config_files/bin/task-reporter.py +116 -0
- beakerhub-0.0.1/images/default-node.Dockerfile +32 -0
- beakerhub-0.0.1/images/docker-bake.hcl +168 -0
- beakerhub-0.0.1/images/proxy.Dockerfile +12 -0
- beakerhub-0.0.1/images/server.Dockerfile +45 -0
- beakerhub-0.0.1/images/task-reporter.Dockerfile +6 -0
- beakerhub-0.0.1/package-lock.json +11515 -0
- beakerhub-0.0.1/package.json +21 -0
- beakerhub-0.0.1/pyproject.toml +157 -0
- beakerhub-0.0.1/src/beakerhub/__about__.py +4 -0
- beakerhub-0.0.1/src/beakerhub/__init__.py +2 -0
- beakerhub-0.0.1/src/beakerhub/admin_handlers.py +1020 -0
- beakerhub-0.0.1/src/beakerhub/api_handlers.py +641 -0
- beakerhub-0.0.1/src/beakerhub/app.py +222 -0
- beakerhub-0.0.1/src/beakerhub/auth/__init__.py +0 -0
- beakerhub-0.0.1/src/beakerhub/auth/base.py +23 -0
- beakerhub-0.0.1/src/beakerhub/auth/cognito.py +386 -0
- beakerhub-0.0.1/src/beakerhub/auth/dummy.py +67 -0
- beakerhub-0.0.1/src/beakerhub/auth/handlers.py +162 -0
- beakerhub-0.0.1/src/beakerhub/auth/node.py +42 -0
- beakerhub-0.0.1/src/beakerhub/auth/user.py +352 -0
- beakerhub-0.0.1/src/beakerhub/cli/__init__.py +0 -0
- beakerhub-0.0.1/src/beakerhub/cli/main.py +95 -0
- beakerhub-0.0.1/src/beakerhub/dashboard_handlers.py +604 -0
- beakerhub-0.0.1/src/beakerhub/handlers.py +128 -0
- beakerhub-0.0.1/src/beakerhub/nodes/__init__.py +0 -0
- beakerhub-0.0.1/src/beakerhub/nodes/import_handlers.py +271 -0
- beakerhub-0.0.1/src/beakerhub/nodes/tasks.py +250 -0
- beakerhub-0.0.1/src/beakerhub/orm.py +508 -0
- beakerhub-0.0.1/src/beakerhub/scripts/__init__.py +1 -0
- beakerhub-0.0.1/src/beakerhub/scripts/seed_contexts.py +179 -0
- beakerhub-0.0.1/src/beakerhub/services/__init__.py +137 -0
- beakerhub-0.0.1/src/beakerhub/services/idle_culler/__init__.py +22 -0
- beakerhub-0.0.1/src/beakerhub/services/idle_culler/idle_culler_service.py +178 -0
- beakerhub-0.0.1/src/beakerhub/services/secrets/__init__.py +21 -0
- beakerhub-0.0.1/src/beakerhub/services/secrets/beakerhub.py +139 -0
- beakerhub-0.0.1/src/beakerhub/spawner/__init__.py +0 -0
- beakerhub-0.0.1/src/beakerhub/spawner/base.py +39 -0
- beakerhub-0.0.1/src/beakerhub/spawner/kubernetes.py +207 -0
- beakerhub-0.0.1/src/beakerhub/spawner/provisioner.py +13 -0
- beakerhub-0.0.1/src/beakerhub/types.py +19 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminContextPanelHost-bexDkjBH.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminContextPanelHost-hnlSd1mE.js +124 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminContexts-CZq-LQdI.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminContexts-CiXz2557.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminDashboard-BwN4UuTj.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminDashboard-Y3yZLRp_.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminImages-DkO7guje.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminImages-WRFU-WNE.js +3 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminLayout-BpYUocq4.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminLayout-Dy4U-BEy.js +281 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminSessions-By18EyHo.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminSessions-CLVBIn-h.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminUsers-B65SBeyd.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminUsers-De0KtWuY.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminVault-CASrj1dY.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/AdminVault-DeIQGhnd.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/CustomDomainIcon.vue_vue_type_script_setup_true_lang-yc3agaj8.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Dashboard-BwG_Jtja.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Dashboard-PEomJHlV.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/EmailValidation-DTCdNm7u.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/EmailValidation-DuaeJwIA.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Home-DPljENVr.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/InviteSignup-D1IN1Qg3.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/InviteSignup-D47yy49P.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Launch-BYnWRiQ1.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Launch-C0CKO2S1.js +119 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Login-BMk_F4xb.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Login-Dz1l_6Tb.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Logout-Bs0qQQSD.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Logout-CGwRbyCg.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/NotFound-B2ZhUUje.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/NotFound-wgHBhNMg.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/PodLogViewer-FqhTOobf.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/PodLogViewer-cvtOsMYJ.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/ResetPassword-B6JW4R0V.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/ResetPassword-Bc8SJsJ-.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/SecretVaultEditor-Cgfl39jA.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/SecretVaultEditor-DVRgGMtO.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Session-DU0KeeD3.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Session-DjSpqDjk.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/SignUp-6_zLHf0V.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/SignUp-Bzy76BQQ.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Spinner-C5mn2bTE.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/Spinner-CnArUz7C.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/SplashPage-DNoN3V81.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/SplashPage-xj9m0mQ6.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/admin-D2Ttk0X1.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/context-DN7RtYKM.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-BSH8ioJS.js +101 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-BVsMB5V3.js +32 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-C-Yil3BG.js +142 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-CpEKboE9.js +14 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-CqnU8nj0.js +74 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-D--jZKOO.js +54 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-D4e7bUyq.js +360 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-D8-2Qwzt.js +82 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-D9QS9-Ff.js +115 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-DCf9fUJs.js +79 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-DEq4k__p.js +2 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-DFS_24Z7.js +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-DYdv4CUP.js +84 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-IyueznQ9.js +20483 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-KaB1vpZp.js +107 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-OWvAlgmT.css +1 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-TEITaxes.js +2 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-XSus88vE.js +1104 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/index-lgf3PSiQ.js +316 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/primeicons-C6QP2o4f.woff2 +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/primeicons-DMOk5skT.eot +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/primeicons-Dr5RGzOO.svg +345 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/primeicons-MpK4pl85.ttf +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/beakerhub/static/primeicons-WjwUDZjB.woff +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/favicon.ico +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/beaker-agent-notebook.jpg +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/beaker-biomedical-thumb.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/beaker-datascience-thumb.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/beaker-export-own.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/beaker-hub-logo.svg +5 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/beaker-weather-thumb.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/biomedical-icon.svg +48 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/biomedical-integrations.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/custom-domain-icon.svg +11 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/customize-agent.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/data-science-icon.svg +44 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/geospatial-icon.svg +27 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/retrieval-training.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/weather-icon.svg +15 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/wildfire-icon.svg +23 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/workflow-steps.png +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/images/your-cells.jpg +0 -0
- beakerhub-0.0.1/src/beakerhub/ui/index.html +14 -0
- beakerhub-0.0.1/src/beakerhub/ui/routes.json +69 -0
- beakerhub-0.0.1/src/beakerhub/ui/videos/beaker_demo.mp4 +0 -0
- beakerhub-0.0.1/src/beakerhub/utils.py +892 -0
- beakerhub-0.0.1/tests/__init__.py +3 -0
- beakerhub-0.0.1/tests/integration/__init__.py +3 -0
- beakerhub-0.0.1/tests/integration/conftest.py +216 -0
- beakerhub-0.0.1/tests/integration/test_api.py +158 -0
- beakerhub-0.0.1/tests/integration/test_spawner.py +245 -0
- beakerhub-0.0.1/tests/unit/__init__.py +3 -0
- beakerhub-0.0.1/tests/unit/auth/__init__.py +3 -0
- beakerhub-0.0.1/tests/unit/auth/test_cognito.py +505 -0
- beakerhub-0.0.1/tests/unit/auth/test_dummy.py +50 -0
- beakerhub-0.0.1/tests/unit/auth/test_handlers.py +490 -0
- beakerhub-0.0.1/tests/unit/auth/test_user.py +189 -0
- beakerhub-0.0.1/tests/unit/conftest.py +134 -0
- beakerhub-0.0.1/tests/unit/services/__init__.py +3 -0
- beakerhub-0.0.1/tests/unit/services/test_secrets.py +320 -0
- beakerhub-0.0.1/tests/unit/spawner/__init__.py +3 -0
- beakerhub-0.0.1/tests/unit/spawner/test_base.py +109 -0
- beakerhub-0.0.1/tests/unit/spawner/test_kubernetes.py +478 -0
- beakerhub-0.0.1/tests/unit/test_admin_handlers.py +170 -0
- beakerhub-0.0.1/tests/unit/test_api_handlers.py +333 -0
- beakerhub-0.0.1/tests/unit/test_handlers.py +30 -0
- beakerhub-0.0.1/tests/unit/test_orm.py +253 -0
- beakerhub-0.0.1/tests/unit/test_utils.py +177 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Integration Tests Workflow
|
|
2
|
+
#
|
|
3
|
+
# This workflow runs integration tests against a BeakerHub instance
|
|
4
|
+
# deployed in a kind (Kubernetes in Docker) cluster.
|
|
5
|
+
#
|
|
6
|
+
# TO ENABLE: Uncomment the 'push' trigger below.
|
|
7
|
+
# Note: Integration tests are resource-intensive and typically run
|
|
8
|
+
# on merge to main or on a schedule, not on every PR.
|
|
9
|
+
|
|
10
|
+
name: Integration Tests
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
# Uncomment to enable on push to main:
|
|
14
|
+
# push:
|
|
15
|
+
# branches: [main]
|
|
16
|
+
|
|
17
|
+
# Uncomment to run on a schedule (e.g., nightly):
|
|
18
|
+
# schedule:
|
|
19
|
+
# - cron: '0 2 * * *' # 2 AM UTC daily
|
|
20
|
+
|
|
21
|
+
# Manual trigger for testing the workflow
|
|
22
|
+
workflow_dispatch:
|
|
23
|
+
|
|
24
|
+
env:
|
|
25
|
+
CLUSTER_NAME: beakerhub-test
|
|
26
|
+
REGISTRY_NAME: beaker-local-registry
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
integration-tests:
|
|
30
|
+
name: Integration Tests
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
timeout-minutes: 45
|
|
33
|
+
|
|
34
|
+
steps:
|
|
35
|
+
- name: Checkout code
|
|
36
|
+
uses: actions/checkout@v4
|
|
37
|
+
|
|
38
|
+
- name: Set up Python
|
|
39
|
+
uses: actions/setup-python@v5
|
|
40
|
+
with:
|
|
41
|
+
python-version: '3.11'
|
|
42
|
+
cache: 'pip'
|
|
43
|
+
|
|
44
|
+
- name: Install Python dependencies
|
|
45
|
+
run: |
|
|
46
|
+
pip install pytest requests
|
|
47
|
+
|
|
48
|
+
- name: Set up Docker Buildx
|
|
49
|
+
uses: docker/setup-buildx-action@v3
|
|
50
|
+
|
|
51
|
+
- name: Create local registry
|
|
52
|
+
run: |
|
|
53
|
+
docker run -d \
|
|
54
|
+
-p 5000:5000 \
|
|
55
|
+
--name ${{ env.REGISTRY_NAME }} \
|
|
56
|
+
--restart=always \
|
|
57
|
+
registry:2
|
|
58
|
+
|
|
59
|
+
- name: Install kind
|
|
60
|
+
run: |
|
|
61
|
+
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
|
|
62
|
+
chmod +x ./kind
|
|
63
|
+
sudo mv ./kind /usr/local/bin/kind
|
|
64
|
+
|
|
65
|
+
- name: Install kubectl
|
|
66
|
+
run: |
|
|
67
|
+
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
|
68
|
+
chmod +x kubectl
|
|
69
|
+
sudo mv kubectl /usr/local/bin/kubectl
|
|
70
|
+
|
|
71
|
+
- name: Install Helm
|
|
72
|
+
run: |
|
|
73
|
+
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
|
74
|
+
|
|
75
|
+
- name: Create kind cluster
|
|
76
|
+
run: |
|
|
77
|
+
cat <<EOF | kind create cluster --name ${{ env.CLUSTER_NAME }} --config=-
|
|
78
|
+
kind: Cluster
|
|
79
|
+
apiVersion: kind.x-k8s.io/v1alpha4
|
|
80
|
+
containerdConfigPatches:
|
|
81
|
+
- |-
|
|
82
|
+
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
|
|
83
|
+
endpoint = ["http://${{ env.REGISTRY_NAME }}:5000"]
|
|
84
|
+
EOF
|
|
85
|
+
|
|
86
|
+
- name: Connect registry to kind network
|
|
87
|
+
run: |
|
|
88
|
+
docker network connect kind ${{ env.REGISTRY_NAME }} || true
|
|
89
|
+
|
|
90
|
+
- name: Build and push images to local registry
|
|
91
|
+
run: |
|
|
92
|
+
cd images
|
|
93
|
+
make dev
|
|
94
|
+
env:
|
|
95
|
+
REGISTRY: localhost:5000
|
|
96
|
+
|
|
97
|
+
- name: Deploy BeakerHub via Helm
|
|
98
|
+
run: |
|
|
99
|
+
helm upgrade --install beakerhub-test \
|
|
100
|
+
kubernetes/helm-charts/beakerhub \
|
|
101
|
+
-n beakerhub \
|
|
102
|
+
--create-namespace \
|
|
103
|
+
-f kubernetes/values-local.yaml \
|
|
104
|
+
--wait \
|
|
105
|
+
--timeout 10m
|
|
106
|
+
|
|
107
|
+
- name: Wait for deployment
|
|
108
|
+
run: |
|
|
109
|
+
kubectl wait --for=condition=available deployment/hub -n beakerhub --timeout=300s
|
|
110
|
+
kubectl wait --for=condition=available deployment/proxy -n beakerhub --timeout=300s
|
|
111
|
+
|
|
112
|
+
- name: Run integration tests
|
|
113
|
+
run: |
|
|
114
|
+
# Start port-forward in background
|
|
115
|
+
kubectl port-forward -n beakerhub svc/proxy-public 8888:80 &
|
|
116
|
+
sleep 5
|
|
117
|
+
|
|
118
|
+
# Run tests
|
|
119
|
+
python -m pytest tests/integration -v --tb=short
|
|
120
|
+
env:
|
|
121
|
+
KEEP_TEST_CLUSTER: "1"
|
|
122
|
+
|
|
123
|
+
- name: Collect logs on failure
|
|
124
|
+
if: failure()
|
|
125
|
+
run: |
|
|
126
|
+
echo "=== Hub Logs ==="
|
|
127
|
+
kubectl logs -n beakerhub deployment/hub --tail=100 || true
|
|
128
|
+
echo "=== Proxy Logs ==="
|
|
129
|
+
kubectl logs -n beakerhub deployment/proxy --tail=100 || true
|
|
130
|
+
echo "=== Pod Status ==="
|
|
131
|
+
kubectl get pods -n beakerhub -o wide || true
|
|
132
|
+
echo "=== Events ==="
|
|
133
|
+
kubectl get events -n beakerhub --sort-by='.lastTimestamp' | tail -50 || true
|
|
134
|
+
|
|
135
|
+
- name: Delete kind cluster
|
|
136
|
+
if: always()
|
|
137
|
+
run: |
|
|
138
|
+
kind delete cluster --name ${{ env.CLUSTER_NAME }} || true
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Unit Tests Workflow
|
|
2
|
+
#
|
|
3
|
+
# This workflow runs Python and Vue unit tests on PRs and pushes to main.
|
|
4
|
+
#
|
|
5
|
+
# TO ENABLE: Uncomment the 'push' and 'pull_request' triggers below.
|
|
6
|
+
|
|
7
|
+
name: Unit Tests
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
push:
|
|
11
|
+
branches: [ main ]
|
|
12
|
+
pull_request:
|
|
13
|
+
branches: [ dev, main ]
|
|
14
|
+
# Allow this workflow to be invoked by other workflows (e.g. the release
|
|
15
|
+
# flow calls it as an inline fallback when a commit has not yet been tested).
|
|
16
|
+
workflow_call:
|
|
17
|
+
# Manual trigger for testing the workflow
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
python-unit-tests:
|
|
22
|
+
name: Python Unit Tests
|
|
23
|
+
timeout-minutes: 30
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
strategy:
|
|
26
|
+
fail-fast: false
|
|
27
|
+
matrix:
|
|
28
|
+
python-version: ['3.11', '3.12', '3.13']
|
|
29
|
+
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v5
|
|
32
|
+
- name: python-setup
|
|
33
|
+
uses: actions/setup-python@v6
|
|
34
|
+
with:
|
|
35
|
+
python-version: ${{ matrix.python-version }}
|
|
36
|
+
- name: install-dependencies
|
|
37
|
+
run: |
|
|
38
|
+
python -m pip install --upgrade pip
|
|
39
|
+
pip install hatch uv
|
|
40
|
+
# One interpreter per job, so run the default hatch env's test script.
|
|
41
|
+
- name: Run unit tests
|
|
42
|
+
run: hatch run test:unit
|
|
43
|
+
|
|
44
|
+
vue-tests:
|
|
45
|
+
timeout-minutes: 30
|
|
46
|
+
name: Vue Unit Tests
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
|
|
49
|
+
defaults:
|
|
50
|
+
run:
|
|
51
|
+
working-directory: ui
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- name: Checkout code
|
|
55
|
+
uses: actions/checkout@v5
|
|
56
|
+
- name: Set up Node.js
|
|
57
|
+
uses: actions/setup-node@v5
|
|
58
|
+
with:
|
|
59
|
+
node-version: lts/*
|
|
60
|
+
- name: Install dependencies
|
|
61
|
+
run: npm i
|
|
62
|
+
- name: Run unit tests
|
|
63
|
+
run: npm run test:unit -- --run
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
**/__pycache__/**
|
|
3
|
+
*.pyc
|
|
4
|
+
.ipynb_checkpoints
|
|
5
|
+
/*.ipynb
|
|
6
|
+
**/.cache
|
|
7
|
+
**/.ipython
|
|
8
|
+
**/.notebooks/
|
|
9
|
+
|
|
10
|
+
# Secret bearing files
|
|
11
|
+
beakerhub_cookie_secret
|
|
12
|
+
beakerhub_vault_secret
|
|
13
|
+
beakerhub.sqlite
|
|
14
|
+
|
|
15
|
+
# Local Development artifacts
|
|
16
|
+
**/dev-config.yaml
|
|
17
|
+
**/dev-config.mk
|
|
18
|
+
**/dev-helm-values.yaml
|
|
19
|
+
**/kind-config.yaml
|
|
20
|
+
**/values-secret.yaml
|
|
21
|
+
|
|
22
|
+
# UI build artifacts
|
|
23
|
+
src/beakerhub/ui/
|
|
24
|
+
|
|
25
|
+
# Jupyterhub config files
|
|
26
|
+
jupyterhub*
|
|
27
|
+
|
|
28
|
+
# Gradle
|
|
29
|
+
.gradle/
|
|
30
|
+
build/
|
|
31
|
+
|
|
32
|
+
# Eclipse
|
|
33
|
+
.project
|
|
34
|
+
.classpath
|
|
35
|
+
.settings/
|
|
36
|
+
bin/
|
|
37
|
+
|
|
38
|
+
# IntelliJ
|
|
39
|
+
.idea/*
|
|
40
|
+
*.ipr
|
|
41
|
+
*.iml
|
|
42
|
+
*.iws
|
|
43
|
+
|
|
44
|
+
# NetBeans
|
|
45
|
+
nb-configuration.xml
|
|
46
|
+
|
|
47
|
+
# Visual Studio Code
|
|
48
|
+
.vscode/*
|
|
49
|
+
.factorypath
|
|
50
|
+
|
|
51
|
+
# Nova
|
|
52
|
+
.nova/*
|
|
53
|
+
|
|
54
|
+
# OSX
|
|
55
|
+
.DS_Store
|
|
56
|
+
|
|
57
|
+
# Vim
|
|
58
|
+
*.swp
|
|
59
|
+
*.swo
|
|
60
|
+
|
|
61
|
+
# patch
|
|
62
|
+
*.orig
|
|
63
|
+
*.rej
|
|
64
|
+
|
|
65
|
+
# Local environment
|
|
66
|
+
.env
|
|
67
|
+
|
|
68
|
+
# Yarn
|
|
69
|
+
**/.yarn/*
|
|
70
|
+
**/!.yarn/patches
|
|
71
|
+
**/!.yarn/plugins
|
|
72
|
+
**/!.yarn/releases
|
|
73
|
+
**/!.yarn/sdks
|
|
74
|
+
**/!.yarn/versions
|
|
75
|
+
**/.pnp.*
|
|
76
|
+
|
|
77
|
+
# NPM
|
|
78
|
+
node_modules
|
|
79
|
+
dist
|
|
80
|
+
build
|
|
81
|
+
|
|
82
|
+
# MISC
|
|
83
|
+
create.sql
|
|
84
|
+
.eslintcache
|
|
85
|
+
**/.venv/
|
|
86
|
+
.openai.toml
|
|
87
|
+
shell.nix
|
|
88
|
+
**/.jekyll-cache
|
|
89
|
+
**/tmp
|
|
90
|
+
|
|
91
|
+
# Helm
|
|
92
|
+
kubernetes/packages
|
|
93
|
+
|
|
94
|
+
# Local dev TLS certs (generated by mkcert or `make openssl-certs`)
|
|
95
|
+
helm/kind/certs.d/tls.crt
|
|
96
|
+
helm/kind/certs.d/tls.key
|
|
97
|
+
helm/kind/certs.d/rootCA.pem
|
|
98
|
+
helm/kind/certs.d/rootCA-key.pem
|
|
99
|
+
helm/kind/certs.d/rootCA.srl
|
|
100
|
+
|
|
101
|
+
# Image builder
|
|
102
|
+
images/config_files/*_config.py
|
|
103
|
+
images/build-metadata.json
|
|
104
|
+
!images/config_files/bin
|
|
105
|
+
|
|
106
|
+
# Beaker
|
|
107
|
+
.beaker.conf
|
|
108
|
+
beaker_config.py
|
|
109
|
+
beaker_*_config.py
|
|
110
|
+
beaker_kernel/**/ui/*
|
|
111
|
+
|
|
112
|
+
# LLM
|
|
113
|
+
.claude/
|
|
114
|
+
.plans/
|