This is an automated email from the ASF dual-hosted git repository.

yasith pushed a commit to branch feat/sdk-facade-migration
in repository https://gitbox.apache.org/repos/asf/airavata-portals.git

commit 7d0765e86934f7855401a30361f3d49a40e34068
Author: yasithdev <[email protected]>
AuthorDate: Wed Apr 8 00:15:12 2026 -0500

    build: add Tiltfile for portal development
    
    Adds Tilt-based dev orchestration (MariaDB via compose, Django dev
    server on :8000, frontend watch/HMR on :9000) and a /health/ endpoint
    for readiness probes.
---
 airavata-django-portal/Tiltfile                 | 86 +++++++++++++++++++++++++
 airavata-django-portal/django_airavata/urls.py  |  1 +
 airavata-django-portal/django_airavata/views.py |  5 ++
 3 files changed, 92 insertions(+)

diff --git a/airavata-django-portal/Tiltfile b/airavata-django-portal/Tiltfile
new file mode 100644
index 000000000..1d91ee6b5
--- /dev/null
+++ b/airavata-django-portal/Tiltfile
@@ -0,0 +1,86 @@
+# Tiltfile for Airavata Django Portal
+
+# --- Infrastructure (MariaDB + Adminer from docker-compose) ---
+docker_compose('./compose/docker-compose.yaml')
+
+# --- Django backend dev server ---
+local_resource(
+    'django-server',
+    serve_cmd=' && '.join([
+        'pip install -e ".[mysql]" -q',
+        'pip install -r requirements.txt -r requirements-mysql.txt -q',
+        'python manage.py migrate --run-syncdb',
+        'python manage.py runserver 0.0.0.0:8000',
+    ]),
+    deps=['django_airavata/'],
+    ignore=[
+        '**/node_modules',
+        '**/static/django_airavata_*/*.js',
+        '**/static/django_airavata_*/*.css',
+        '**/static/common/dist',
+    ],
+    resource_deps=['db'],
+    readiness_probe=probe(
+        http_get=http_get_action(port=8000, path='/health/'),
+        initial_delay_secs=10,
+        period_secs=5,
+    ),
+    links=[
+        link('http://localhost:8000', 'Portal'),
+        link('http://localhost:18888', 'Adminer'),
+    ],
+)
+
+# --- Frontend dev servers ---
+# Build order: api (webpack) -> common -> plugin-api -> apps
+# api and common are libraries; they use `watch` mode instead of `serve`.
+
+local_resource(
+    'frontend-api',
+    serve_cmd='yarn && yarn run watch',
+    serve_dir='django_airavata/apps/api',
+    deps=['django_airavata/apps/api/static'],
+    resource_deps=['django-server'],
+    labels=['frontend'],
+)
+
+local_resource(
+    'frontend-common',
+    serve_cmd='yarn && yarn run watch',
+    serve_dir='django_airavata/static/common',
+    deps=['django_airavata/static/common/js'],
+    resource_deps=['frontend-api'],
+    labels=['frontend'],
+)
+
+local_resource(
+    'frontend-workspace-plugin-api',
+    serve_cmd='yarn && yarn run watch',
+    
serve_dir='django_airavata/apps/workspace/django-airavata-workspace-plugin-api',
+    
deps=['django_airavata/apps/workspace/django-airavata-workspace-plugin-api/js'],
+    resource_deps=['frontend-common'],
+    labels=['frontend'],
+)
+
+# Vue apps with HMR (vue-cli-service serve on port 9000)
+# Only one can run at a time since they all bind port 9000.
+# By default we start 'admin'. Toggle others in the Tilt UI.
+
+FRONTEND_APPS = {
+    'admin':       'django_airavata/apps/admin',
+    'auth':        'django_airavata/apps/auth',
+    'dataparsers': 'django_airavata/apps/dataparsers',
+    'groups':      'django_airavata/apps/groups',
+    'workspace':   'django_airavata/apps/workspace',
+}
+
+for name, path_prefix in FRONTEND_APPS.items():
+    local_resource(
+        'frontend-' + name,
+        serve_cmd='yarn && yarn run serve',
+        serve_dir=path_prefix,
+        resource_deps=['frontend-common', 'frontend-workspace-plugin-api'],
+        labels=['frontend-apps'],
+        auto_init=(name == 'admin'),
+        links=[link('http://localhost:9000', name + ' (HMR)')],
+    )
diff --git a/airavata-django-portal/django_airavata/urls.py 
b/airavata-django-portal/django_airavata/urls.py
index 552fc7342..9989e3b33 100644
--- a/airavata-django-portal/django_airavata/urls.py
+++ b/airavata-django-portal/django_airavata/urls.py
@@ -25,6 +25,7 @@ from wagtail.documents import urls as wagtaildocs_urls
 from . import views
 
 urlpatterns = [
+    path('health/', views.health, name='health'),
     re_path(r'^djadmin/', admin.site.urls),
     re_path(r'^admin/', include('django_airavata.apps.admin.urls')),
     re_path(r'^auth/', include('django_airavata.apps.auth.urls')),
diff --git a/airavata-django-portal/django_airavata/views.py 
b/airavata-django-portal/django_airavata/views.py
index e984c1092..cbeeaf99d 100644
--- a/airavata-django-portal/django_airavata/views.py
+++ b/airavata-django-portal/django_airavata/views.py
@@ -1,6 +1,11 @@
+from django.http import JsonResponse
 from django.shortcuts import render
 
 
+def health(request):
+    return JsonResponse({'status': 'ok'})
+
+
 def home(request):
     return render(request, 'django_airavata/home.html', {})
 

Reply via email to