mirror of
https://github.com/tiennm99/DocsGPT.git
synced 2026-10-05 16:13:51 +00:00
The backend image builds the web UI with scripts/build_frontend.sh and serves it through docsgpt/ui.py, so the standalone Compose file drops the frontend container. UI and API share port 7091, published on 127.0.0.1 unless DOCSGPT_BIND says otherwise. POSTGRES_PASSWORD is configurable, and an optional https profile puts Caddy in front of a public domain. docker-image-verify.yml starts the standalone stack on the image it built and checks the API, the UI, /config.js and a client-side route on one port.
110 lines
4.1 KiB
YAML
110 lines
4.1 KiB
YAML
name: Verify the Docker image works offline
|
|
|
|
# Builds the backend image and runs its offline check with networking off, so
|
|
# a change that reintroduces a first-request download (a tokenizer, tiktoken's
|
|
# encoding, an embedding model) fails here instead of in an air-gapped install.
|
|
# Then starts the standalone Compose stack on the image and checks that the one
|
|
# published port serves both the API and the web UI.
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
paths:
|
|
- 'docsgpt/Dockerfile'
|
|
- '.dockerignore'
|
|
- 'application/**'
|
|
- 'docsgpt/requirements*.txt'
|
|
- 'docsgpt/scripts/prefetch_models.py'
|
|
- 'docsgpt/scripts/verify_offline.py'
|
|
- 'docsgpt/vectorstore/model_registry.py'
|
|
- 'docsgpt/parser/tokenization.py'
|
|
- 'docsgpt/vectorstore/embeddings_local.py'
|
|
- 'docsgpt/ui.py'
|
|
- 'frontend/**'
|
|
- 'scripts/build_frontend.sh'
|
|
- 'deployment/docker-compose-standalone.yaml'
|
|
- '.github/workflows/docker-image-verify.yml'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
verify:
|
|
strategy:
|
|
matrix:
|
|
# "" is the slim default; "-docling" bakes docling, its models and
|
|
# tesseract in, so the conversion check in verify_offline runs too.
|
|
variant: ["", "-docling"]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
|
|
|
|
- name: Build the image
|
|
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2
|
|
with:
|
|
file: ./docsgpt/Dockerfile
|
|
context: .
|
|
platforms: linux/amd64
|
|
load: true
|
|
# The name the standalone Compose file runs, under a tag no registry has.
|
|
tags: arc53/docsgpt:verify${{ matrix.variant }}
|
|
build-args: |
|
|
EXTRAS=${{ matrix.variant == '-docling' && 'docling' || '' }}
|
|
INSTALL_TESSERACT=${{ matrix.variant == '-docling' && 'true' || 'false' }}
|
|
cache-from: type=gha,scope=verify${{ matrix.variant }}
|
|
cache-to: type=gha,mode=max,scope=verify${{ matrix.variant }}
|
|
|
|
- name: Image size
|
|
env:
|
|
IMAGE: arc53/docsgpt:verify${{ matrix.variant }}
|
|
run: |
|
|
docker image inspect "$IMAGE" --format '{{.Size}}' | awk '{printf "uncompressed: %.2f GB\n", $1/1e9}'
|
|
docker history "$IMAGE" --format '{{.Size}}\t{{.CreatedBy}}' | head -20
|
|
|
|
- name: Offline verification (no network)
|
|
env:
|
|
IMAGE: arc53/docsgpt:verify${{ matrix.variant }}
|
|
run: |
|
|
docker run --rm --network none "$IMAGE" \
|
|
python -m docsgpt.scripts.verify_offline
|
|
|
|
- name: The standalone stack serves the API and the UI on one port
|
|
env:
|
|
DOCSGPT_IMAGE_TAG: verify
|
|
DOCSGPT_IMAGE_VARIANT: ${{ matrix.variant }}
|
|
run: |
|
|
set -euo pipefail
|
|
# --pull missing keeps the image built above; postgres and redis are pulled.
|
|
docker compose -f deployment/docker-compose-standalone.yaml up -d --pull missing backend
|
|
base=http://127.0.0.1:7091
|
|
for _ in $(seq 1 90); do
|
|
if curl -fsS "$base/api/health" >/dev/null 2>&1; then break; fi
|
|
sleep 2
|
|
done
|
|
curl -fsS "$base/api/health"
|
|
echo
|
|
curl -fsS "$base/" | grep -q 'src="/config.js"'
|
|
curl -fsS "$base/config.js" | grep -q 'window.__DOCSGPT_ENV__'
|
|
# A client-side route falls back to the UI's index.html.
|
|
curl -fsS "$base/settings" | grep -q 'src="/config.js"'
|
|
echo "API and UI served on $base"
|
|
|
|
- name: Stack logs
|
|
if: failure()
|
|
env:
|
|
DOCSGPT_IMAGE_TAG: verify
|
|
DOCSGPT_IMAGE_VARIANT: ${{ matrix.variant }}
|
|
run: docker compose -f deployment/docker-compose-standalone.yaml logs --no-color
|
|
|
|
- name: Stop the stack
|
|
if: always()
|
|
env:
|
|
DOCSGPT_IMAGE_TAG: verify
|
|
DOCSGPT_IMAGE_VARIANT: ${{ matrix.variant }}
|
|
run: docker compose -f deployment/docker-compose-standalone.yaml down -v
|