Honest OSINT + real CADD framework, pipeline, CI/CD, and interactive web app #413
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |