Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
ecac728
CU-869c8r073: Remove uploaded text model
mart-r Feb 24, 2026
96f6b2d
CU-869c8r073: Remove demo parts from views
mart-r Feb 24, 2026
4f01650
CU-869c8r073: Cleanup imports
mart-r Feb 24, 2026
d87f9db
CU-869c8r073: Remove medcat requirement
mart-r Feb 24, 2026
38d3f84
CU-869c8r073: Remove installation of local medcat
mart-r Feb 24, 2026
0e7da75
CU-869c8r073: Update base template for non-demo header
mart-r Feb 24, 2026
ad754fc
CU-869c8r073: Remove unnecessary URL
mart-r Feb 24, 2026
f391b47
CU-869c8r073: Add requests to requirements
mart-r Feb 24, 2026
efe077f
CU-869c8r073: Add migration to delete unnecessary model
mart-r Feb 24, 2026
63a27dd
CU-869c8r073: Remove installation of spacy model (unneeded)
mart-r Feb 24, 2026
8d7b380
CU-869c8r073: Remove CPU-only torch options (unnecessary)
mart-r Feb 24, 2026
0881493
CU-869c8r073: Remove tests for demo
mart-r Feb 24, 2026
9639c99
CU-869c8r073: Some whitespace improvements
mart-r Feb 24, 2026
00e4bef
CU-869c8r073: Improve compose files (remove version)
mart-r Feb 24, 2026
118a52b
CU-869c8r073: Add health endpoint
mart-r Feb 24, 2026
23a0d6b
CU-869c8r073: Add some simple(ish) integration tests
mart-r Feb 24, 2026
c7e22c9
CU-869c8r073: Fix permission issue
mart-r Feb 24, 2026
e8443b2
CU-869c8r073: Fix workflow file missing input for tests
mart-r Feb 24, 2026
eabaa82
CU-869c8r073: Hide test time fake API key to keep the automated check…
mart-r Feb 24, 2026
1049cfc
CU-869c8r073: Hide test time fake API key to keep the automated check…
mart-r Feb 24, 2026
333952e
CU-869c8r073: Hide test time fake API key to keep the automated check…
mart-r Feb 25, 2026
0c126c8
CU-869c8r073: Rename demo app to model distributor
mart-r Feb 25, 2026
e9af974
CU-869c8r073: Rename demo app workflow
mart-r Feb 25, 2026
9d6eb3f
CU-869c8r073: Use renamed paths in model distributor workflow
mart-r Feb 25, 2026
13f7f06
CU-869c8r073: Hide test time fake API key to keep the automated check…
mart-r Feb 25, 2026
ca30a6a
CU-869c8r073: Hide test time fake API key to keep the automated check…
mart-r Feb 25, 2026
95e5bb6
CU-869c8r073: Remove unnecessary medcat core lib copy step
mart-r Feb 25, 2026
2a6c318
CU-869c8r073: Remove env var in workflow
mart-r Feb 25, 2026
b7d7c6b
CU-869c8r073: Add workflow job to build and push image to docker hub
mart-r Feb 25, 2026
a1ffe74
CU-869c8r073: Make compose file use image rather than build form source
mart-r Feb 25, 2026
3c65cb2
CU-869c8r073: Potential fix for code scanning alert no. 176: Workflow…
mart-r Feb 25, 2026
e6b75d5
CU-869c8r073: Minor worklfow wording fix
mart-r Feb 25, 2026
9b45103
CU-869c8r073: Try another file during tests
mart-r Feb 25, 2026
3627985
CU-869c8r073: Update test script
mart-r Feb 25, 2026
2221ce8
CU-869c8r073: Try and fix the test file / path
mart-r Feb 25, 2026
e12a380
Merge branch 'main' into cleanup/medcat-demo/CU-869c8r073-remove-demo…
mart-r Feb 27, 2026
81e43cf
CU-869c8r073: Separate container init script
mart-r Feb 27, 2026
7b148ef
CU-869c8r073: Separate verification logic during tests
mart-r Feb 27, 2026
3ad09ff
CU-869c8r073: Remove unused and unnecessary test script
mart-r Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 0 additions & 56 deletions .github/workflows/medcat-demo-app_build.yml

This file was deleted.

107 changes: 107 additions & 0 deletions .github/workflows/medcat-model-distributor_build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: medcat-model-distributor - Test

permissions:
contents: read

on:
push:
branches: [ main ]
tags:
- 'medcat-model-distributor/v*.*.*'
pull_request:
paths:
- 'medcat-model-distributor/**'
- 'medcat-v2/**'
- '.github/workflows/medcat-model-distributor**'
defaults:
run:
working-directory: ./medcat-model-distributor

jobs:
integration-test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6

- name: 🧹 Free up disk space
run: |
df -h # Optional: Check space before build
# Remove large, unnecessary packages/tools
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /usr/share/swift
sudo rm -rf /usr/share/rust
sudo rm -rf /usr/share/powershell
# Remove cached tools and files
sudo apt-get clean
df -h # Optional: Check space before build

- name: Set up Docker Compose
run: sudo apt-get update && sudo apt-get install -y docker-compose

- name: Build and start containers
run: docker-compose -f docker-compose-test.yml up -d --build

- name: Run integration test
run: ./tests/test_integration.sh --model-file webapp/manage.py

- name: Check container logs for errors
run: |
docker-compose logs medcatweb
# NOTE: ignore line "Applying auth.0007_alter_validators_add_error_messages" - not an error
docker-compose logs medcatweb | grep -v "Applying auth.0007_alter_validators_add_error_messages" | grep -i 'error' && exit 1 || true

- name: Tear down
run: docker-compose -f docker-compose-test.yml down

publish-to-docker-hub:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
needs: integration-test
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Extract metadata (tags, labels) for Docker medcat-model-distributor
id: meta
uses: docker/metadata-action@v5
with:
images: cogstacksystems/medcat-model-distributor
tags: |
# Include all default tags
type=schedule
type=ref,event=branch
type=ref,event=tag
type=ref,event=pr
type=sha
# Create version tag based on tag prefix
type=match,pattern=medcat-model-distributor/v(\d+\.\d+\.\d+),group=1
flavor: latest=false

- name: Build and push Docker medcat-model-distributor image
id: docker_build
uses: docker/build-push-action@v6
with:
context: ./medcat-model-distributor/webapp
push: true
allow: network.host
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=registry,ref=cogstacksystems/medcat-model-distributor:buildcache
cache-to: type=registry,ref=cogstacksystems/medcat-model-distributor:buildcache,mode=max
build-args: |
REINSTALL_CORE_FROM_LOCAL=true

- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
working-directory: "./"
33 changes: 0 additions & 33 deletions medcat-demo-app/tests/test_integration.py

This file was deleted.

20 changes: 0 additions & 20 deletions medcat-demo-app/tests/test_integration.sh

This file was deleted.

File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
version: '3.4'

services:
medcatweb:
build:
context: ./webapp
args:
REINSTALL_CORE_FROM_LOCAL: "true"
command: >
bash -c "
python manage.py migrate --noinput &&
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
version: '3.4'

services:
medcatweb:
build:
network: host
context: ./webapp
image: cogstacksystems/medcat-model-distributor
command: >
bash -c "
python manage.py migrate --noinput &&
Expand Down
53 changes: 53 additions & 0 deletions medcat-model-distributor/tests/setup/setup_in_container.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import sys, os, secrets
import django
from django.core.files import File
from django.utils import timezone
from datetime import timedelta

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webapp.settings")
django.setup()

# ── Import models ─────────────────────────────────────────────────────────────
try:
from demo.models import MedcatModel, APIKey
except ImportError as e:
print(f"[SEED] ImportError: {e}", file=sys.stderr)
sys.exit(1)

def main(model_path: str, model_name: str, model_display_name: str,
model_description: str, api_key_identifier: str):
# ── MedcatModel ───────────────────────────────────────────────────────────────
if not os.path.exists(model_path):
print(f"[SEED] ERROR: model file not found in container: {model_path}", file=sys.stderr)
sys.exit(1)

obj, created = MedcatModel.objects.get_or_create(
model_name=model_name,
defaults={
"model_display_name": model_display_name,
"model_description": model_description,
},
)
if created or not obj.model_file:
with open(model_path, "rb") as f:
obj.model_file.save(os.path.basename(model_path), File(f), save=True)
print(f"[SEED] MedcatModel created: {obj.model_name}", file=sys.stderr)
else:
print(f"[SEED] MedcatModel already exists: {obj.model_name}", file=sys.stderr)

# ── APIKey ────────────────────────────────────────────────────────────────────
key_value = secrets.token_hex(32) # 64-char hex, fits max_length=64
APIKey.objects.create(
key=key_value,
identifier=api_key_identifier,
expires_at=timezone.now() + timedelta(hours=1),
is_active=True,
)
print(f"[SEED] APIKey created for identifier: {api_key_identifier}", file=sys.stderr)

# Print ONLY the key to stdout so the shell can capture it cleanly
print(key_value)


if __name__ == "__main__":
main(*sys.argv[1:])
Loading