HERMES-GIELIE/.github/workflows/conversation-lifecycle.yml
Frank Song deac1384fe
Live Stream: add public conversation lifecycle browser gate (#6251)
* test: add conversation lifecycle browser gate

* test: wait for durable lifecycle settlement

* test: harden lifecycle gate cleanup and startup

* test: normalize gateway fixture request paths

* test: harden conversation lifecycle gate

* test: fix lifecycle request failure capture

* test: align lifecycle CI dependencies

* test: harden lifecycle gate waits

* docs: align lifecycle gate setup command

* test: harden lifecycle gate persistence wait

* ci: scope conversation-lifecycle gate to relevant code paths

Only run the playwright browser gate when the chat render/streaming surface
it exercises actually changes (static/**, api/**.py, server.py, the test,
deps, the workflow). Docs-only and unrelated PRs skip it entirely, keeping
CI lean per the docs-only fast-path philosophy.

Co-authored-by: franksong2702 <franksong2702@users.noreply.github.com>

---------

Co-authored-by: Frank Song <franksong2702@gmail.com>
Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com>
Co-authored-by: franksong2702 <franksong2702@users.noreply.github.com>
2026-07-18 21:23:25 -07:00

64 lines
1.9 KiB
YAML

name: Conversation lifecycle (informational)
# Scoped to the code this browser gate actually exercises — the chat
# render/streaming surface — so it doesn't spin up playwright+chromium on
# docs-only or unrelated changes. If none of these paths change, the run is
# skipped entirely (GitHub treats a path-filtered no-match as "not triggered").
on:
pull_request:
branches: [master]
paths:
- 'static/**'
- 'api/**.py'
- 'server.py'
- 'tests/browser_conversation_lifecycle.py'
- 'requirements*.txt'
- 'pyproject.toml'
- '.github/workflows/conversation-lifecycle.yml'
push:
branches: [master]
paths:
- 'static/**'
- 'api/**.py'
- 'server.py'
- 'tests/browser_conversation_lifecycle.py'
- 'requirements*.txt'
- 'pyproject.toml'
- '.github/workflows/conversation-lifecycle.yml'
jobs:
live-to-final:
runs-on: ubuntu-latest
timeout-minutes: 10
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: 'pip'
cache-dependency-path: |
**/requirements*.txt
**/pyproject.toml
.github/workflows/conversation-lifecycle.yml
- name: Install browser gate dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt playwright
python -m playwright install --with-deps chromium
- name: Run conversation lifecycle gate
env:
LIFECYCLE_ARTIFACT_DIR: lifecycle-artifacts
run: python tests/browser_conversation_lifecycle.py
- name: Upload failure artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: conversation-lifecycle-failure
path: lifecycle-artifacts
if-no-files-found: ignore