Skip to content

Honest OSINT + real CADD framework, pipeline, CI/CD, and interactive web app #413

Honest OSINT + real CADD framework, pipeline, CI/CD, and interactive web app

Honest OSINT + real CADD framework, pipeline, CI/CD, and interactive web app #413

Workflow file for this run

name: CI
on:
push:
branches: ["**"]
pull_request:
workflow_dispatch:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
build-test:
name: Build, type-check & test (Node)
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
- run: npm ci
- name: Build (tsc)
run: npm run build
- name: Type-check
run: npx tsc --noEmit
- name: Test
# --ci + --forceExit because the suite has a known teardown handle leak
# (a worker doesn't exit gracefully); tests themselves pass.
run: npm test -- --ci --forceExit
cad-tools:
name: CAD tools (Python)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Syntax-check all Python
run: python -m compileall -q cad cicd outreach
- name: Smoke-test cost-benefit (offline, deterministic)
run: |
python3 cad/cost_benefit.py --modality small_molecule --phase phase1 \
--incidence 60000 --price 150000 --json
- name: Smoke-test CLI help paths
run: |
python3 cad/virtual_triage.py --help >/dev/null
python3 cad/target_report.py --help >/dev/null
python3 cad/fetch_structure.py --help >/dev/null
python3 cad/dock.py --help >/dev/null
python3 cad/news_update.py --help >/dev/null
python3 cad/cheminformatics.py --help >/dev/null
python3 cad/binding_site.py --help >/dev/null
python3 cad/precompute_site_data.py --help >/dev/null
- name: Cheminformatics (real RDKit, deterministic offline)
run: |
pip install --quiet rdkit
python3 cad/cheminformatics.py --smiles "CC(=O)Oc1ccccc1C(=O)O" --json \
| python3 -c "import sys,json; r=json.load(sys.stdin)['results'][0]; assert r['lipinski_ok'] and 170<r['mw']<190, r; print('cheminformatics OK:', r['mw'], r['qed'])"
- name: Cheminformatics LE + chemotype clustering (offline)
run: |
printf 'smiles,best_pchembl,chembl_id\nCC(=O)Oc1ccccc1C(=O)O,7.0,A\nO=C(O)c1ccccc1O,6.5,B\nCCO,5.0,C\n' > /tmp/t.csv
python3 cad/cheminformatics.py --csv /tmp/t.csv --json | python3 -c "
import sys,json
rs=json.load(sys.stdin)['results']
assert len(rs)==3, rs
assert all('le' in r and 'lle' in r and isinstance(r['cluster'],int) for r in rs), rs
print('LE+cluster OK:', [(r['id'], r['le'], r['cluster']) for r in rs])"
- name: Anti-hallucination enforcement tests (offline)
run: python3 cad/test_provenance.py
- name: Outreach agent E2E + edge cases (offline, no network, never sends)
run: python3 outreach/test_e2e.py
- name: Verify a deterministic artifact end-to-end (offline)
run: |
mkdir -p /tmp/run
python3 cad/cost_benefit.py --modality small_molecule --phase phase1 \
--incidence 60000 --price 150000 --json > /tmp/run/cost_benefit.json
python3 cad/verify.py --run /tmp/run --json | python3 -c "
import sys,json; r=json.load(sys.stdin)
assert r['ok'] and r['fail']==0, r
print('verify gate OK:', [(c['figure'], c['status']) for c in r['checks']])"
web-build:
name: Build web app (Angular)
runs-on: ubuntu-latest
timeout-minutes: 15
defaults:
run:
working-directory: web
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
cache-dependency-path: web/package-lock.json
- run: npm ci
- run: npx ng build --configuration production