Confirm docs-only changes no longer trigger a production deploy

This commit is contained in:
2026-08-13 11:56:39 +07:00
parent a4819b8653
commit d5ea65cd6e
5 changed files with 32 additions and 8 deletions
+11
View File
@@ -3,6 +3,17 @@ name: Deploy to production
on: on:
push: push:
branches: [master] branches: [master]
paths:
# Everything the two Dockerfiles actually COPY into their images.
- apps/ai-service/**
- apps/web/**
- packages/**
- ingestion/data/verified/drug_entities.json
# docker-compose.prod.yml, docker-compose.observability.yml,
# Caddyfile, and the grafana/otel/prometheus/tempo configs it mounts.
- infra/docker/**
# Changes to the deploy logic itself should still be exercised.
- .github/workflows/deploy.yml
workflow_dispatch: workflow_dispatch:
jobs: jobs:
+14 -7
View File
@@ -23,17 +23,24 @@ jobs:
chmod 600 ~/.ssh/prod.pem chmod 600 ~/.ssh/prod.pem
ssh-keyscan -H "${{ secrets.EC2_HOST }}" >> ~/.ssh/known_hosts 2>/dev/null ssh-keyscan -H "${{ secrets.EC2_HOST }}" >> ~/.ssh/known_hosts 2>/dev/null
- name: Report production Qdrant version
run: |
ssh -i ~/.ssh/prod.pem "ubuntu@${{ secrets.EC2_HOST }}" '
sudo docker run --rm --network docker_default curlimages/curl -sf http://qdrant:6333/
'
- name: Snapshot Qdrant collections on production - name: Snapshot Qdrant collections on production
run: | run: |
ssh -i ~/.ssh/prod.pem "ubuntu@${{ secrets.EC2_HOST }}" ' ssh -i ~/.ssh/prod.pem "ubuntu@${{ secrets.EC2_HOST }}" '
set -e set -e
sudo docker run --rm --network docker_default curlimages/curl -sf -X POST http://qdrant:6333/collections/duocthu_v1/snapshots > /dev/null snap() {
sudo docker run --rm --network docker_default curlimages/curl -sf -X POST http://qdrant:6333/collections/duocthu_v1__manifest/snapshots > /dev/null collection="$1"; outfile="$2"
sleep 3 name=$(sudo docker run --rm --network docker_default curlimages/curl -sf -X POST "http://qdrant:6333/collections/${collection}/snapshots" | grep -oP "\"name\":\"\K[^\"]+")
SNAP=$(sudo docker exec docker-qdrant-1 ls -t /qdrant/storage/snapshots/duocthu_v1/ | head -1) test -n "$name"
SNAPM=$(sudo docker exec docker-qdrant-1 ls -t /qdrant/storage/snapshots/duocthu_v1__manifest/ | head -1) sudo docker run --rm --network docker_default curlimages/curl -sf "http://qdrant:6333/collections/${collection}/snapshots/${name}" > "$outfile"
sudo docker cp "docker-qdrant-1:/qdrant/storage/snapshots/duocthu_v1/${SNAP}" /tmp/duocthu_v1.snapshot }
sudo docker cp "docker-qdrant-1:/qdrant/storage/snapshots/duocthu_v1__manifest/${SNAPM}" /tmp/duocthu_v1__manifest.snapshot snap duocthu_v1 /tmp/duocthu_v1.snapshot
snap duocthu_v1__manifest /tmp/duocthu_v1__manifest.snapshot
sudo chown ubuntu:ubuntu /tmp/duocthu_v1.snapshot /tmp/duocthu_v1__manifest.snapshot sudo chown ubuntu:ubuntu /tmp/duocthu_v1.snapshot /tmp/duocthu_v1__manifest.snapshot
ls -la /tmp/*.snapshot ls -la /tmp/*.snapshot
' '
+1
View File
@@ -164,3 +164,4 @@ and `adr/0001``adr/0008` predate this set. They are kept for their reasoning
and their empirical measurements. Where they describe current behaviour, they and their empirical measurements. Where they describe current behaviour, they
have drifted in places — the drift is listed in have drifted in places — the drift is listed in
[26-known-limitations.md](26-known-limitations.md#documentationcode-discrepancies). [26-known-limitations.md](26-known-limitations.md#documentationcode-discrepancies).
@@ -12,6 +12,7 @@ data:
EMBEDDING_PROVIDER: {{ .Values.aiService.config.embeddingProvider | quote }} EMBEDDING_PROVIDER: {{ .Values.aiService.config.embeddingProvider | quote }}
ANSWER_PROVIDER: {{ .Values.aiService.config.answerProvider | quote }} ANSWER_PROVIDER: {{ .Values.aiService.config.answerProvider | quote }}
ANSWER_MODEL_ID: {{ .Values.aiService.config.answerModelId | quote }} ANSWER_MODEL_ID: {{ .Values.aiService.config.answerModelId | quote }}
ENTITIES_PATH: {{ .Values.aiService.config.entitiesPath | quote }}
METRICS_ENABLED: {{ .Values.aiService.config.metricsEnabled | quote }} METRICS_ENABLED: {{ .Values.aiService.config.metricsEnabled | quote }}
OTEL_ENABLED: {{ and .Values.observability.enabled .Values.aiService.config.otelEnabled | quote }} OTEL_ENABLED: {{ and .Values.observability.enabled .Values.aiService.config.otelEnabled | quote }}
OTEL_SERVICE_NAME: ai-service OTEL_SERVICE_NAME: ai-service
+5 -1
View File
@@ -33,6 +33,10 @@ aiService:
embeddingProvider: disabled embeddingProvider: disabled
answerProvider: disabled answerProvider: disabled
answerModelId: deepseek.v3.2 answerModelId: deepseek.v3.2
# The Dockerfile bakes the catalog file in at this path; config.py's own
# repo-relative default only resolves inside a full monorepo checkout,
# not this flattened image layout. Matches apps/ai-service/.env.example.
entitiesPath: ./ingestion_data/drug_entities.json
qdrantCollection: duocthu_v1 qdrantCollection: duocthu_v1
metricsEnabled: true metricsEnabled: true
otelEnabled: true otelEnabled: true
@@ -79,7 +83,7 @@ qdrant:
enabled: true enabled: true
# Set when using an external/managed Qdrant; empty uses the bundled Service. # Set when using an external/managed Qdrant; empty uses the bundled Service.
url: "" url: ""
image: qdrant/qdrant:v1.13.4 image: qdrant/qdrant:v1.19.0
storage: 10Gi storage: 10Gi
resources: resources:
requests: { cpu: 100m, memory: 256Mi } requests: { cpu: 100m, memory: 256Mi }