Initial monorepo scaffold for Duoc Thu RAG medical chatbot

This commit is contained in:
2026-07-30 20:38:34 +07:00
commit 9bad1f61ea
91 changed files with 740 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
# ArgoCD (GitOps deployment)
Deployment uses the **team's existing ArgoCD instance** (not self-hosted by
this project) rather than a custom push-based CD pipeline. See
`docs/adr/0002-argocd-gitops.md` for the rationale.
## Flow
1. CI (`infra/ci/github-actions/*-ci.yml`) builds and pushes a container image
per app on merge to main, then bumps that app's image tag in
`infra/helm/medical-chatbot/values-<env>.yaml` (or a per-app values file)
and pushes that commit back to the repo. CI never runs `kubectl apply` or
`helm upgrade` directly.
2. ArgoCD (team-managed, pointed at this repo) watches `infra/argocd/applications/<env>/`
and `infra/helm/medical-chatbot/`, detects the values-file change, and
syncs the cluster to match — this is the actual deploy step, owned by
ArgoCD, not by our CI.
3. Promotion between environments (dev -> staging -> prod) is a Git operation
(merge/PR that changes the target values file or image tag for that env),
not a manual `kubectl`/`helm` command.
## Files
- `applications/dev/app.yaml`, `applications/staging/app.yaml`,
`applications/prod/app.yaml` — one ArgoCD `Application` CR per environment,
each pointing at this repo + the `infra/helm/medical-chatbot` chart with
that environment's values file.
## TODO once the team's ArgoCD instance details are known
- Fill in `spec.destination.server` (target cluster API server / context name)
in each `app.yaml` — currently a placeholder.
- Confirm which ArgoCD `project` (RBAC scoping) these Applications should
belong to, instead of the placeholder `default`.
- Confirm the repo URL placeholder in each `app.yaml` once the GitHub repo
exists (filled in as part of the initial scaffold commit/push).
+24
View File
@@ -0,0 +1,24 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: medical-chatbot-dev
namespace: argocd
spec:
project: default # TODO: confirm the team's ArgoCD project/RBAC scope for this app
source:
repoURL: https://github.com/BaoVu2k4/vsf-duocthu.git # TODO: confirm once repo is created
targetRevision: main
path: infra/helm/medical-chatbot
helm:
valueFiles:
- values.yaml
- values-dev.yaml
destination:
server: https://kubernetes.default.svc # TODO: point at the team's target cluster/context
namespace: medical-chatbot-dev
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
+19
View File
@@ -0,0 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: medical-chatbot-prod
namespace: argocd
spec:
project: default # TODO: confirm the team's ArgoCD project/RBAC scope for this app
source:
repoURL: https://github.com/BaoVu2k4/vsf-duocthu.git # TODO: confirm once repo is created
targetRevision: main
path: infra/helm/medical-chatbot
helm:
valueFiles:
- values.yaml
- values-prod.yaml
destination:
server: https://kubernetes.default.svc # TODO: point at the team's target cluster/context
namespace: medical-chatbot-prod
syncPolicy: {} # intentionally NOT automated — prod sync requires manual approval in the ArgoCD UI/CLI
@@ -0,0 +1,24 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: medical-chatbot-staging
namespace: argocd
spec:
project: default # TODO: confirm the team's ArgoCD project/RBAC scope for this app
source:
repoURL: https://github.com/BaoVu2k4/vsf-duocthu.git # TODO: confirm once repo is created
targetRevision: main
path: infra/helm/medical-chatbot
helm:
valueFiles:
- values.yaml
- values-staging.yaml
destination:
server: https://kubernetes.default.svc # TODO: point at the team's target cluster/context
namespace: medical-chatbot-staging
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true