Skip to content

Add CI coverage for assistant modules #52

Description

@alexeygrigorev

Add CI coverage for assistant modules

Status: pending
Tags: assistant, podcast, infra, testing, P0
Depends on: #7
Blocks: None

Scope

Add GitHub Actions coverage for assistant modules under assistants/**, with the initial required coverage focused on the canonical Podcast Assistant at assistants/podcast/.

Current gap from the #7 on-call context: commit 245a276 canonicalized Podcast Assistant under assistants/podcast/, but existing workflows do not run for assistants/** changes. The current workflows are:

  • .github/workflows/deploy-dataops-v1.yml, which is scoped to the V1 app, content, Lambda, scripts, tests/docs_app, and work-engine paths.
  • .github/workflows/validate-dataops-content.yml, which is scoped to content/** and the content validation workflow.

This issue should add or update CI so assistant changes get a deterministic, non-credentialed test signal. The expected baseline command from #7 is:

uv run --project assistants/podcast pytest

The workflow must be safe for a clean GitHub Actions checkout. It must not require real Telegram delivery, TELEGRAM_BOT_API_KEY, TELEGRAM_CHAT_ID, GROQ_API_KEY, live Groq calls, live Heru engine runs, Codex, or Claude. If the current assistants/podcast dependency on a local Heru checkout (../../../heru) prevents this from working in Actions, resolving that CI dependency boundary is part of this issue, but only to the extent needed for safe unit CI.

Acceptance Criteria

  • GitHub Actions runs assistant CI when files under assistants/** change.

  • Assistant CI also runs when its workflow file changes, and can be started with workflow_dispatch.

  • The workflow runs on push to main; adding pull_request coverage for assistants/** is acceptable and preferred if it matches existing repo conventions.

  • Podcast Assistant unit tests run in CI with the safe baseline command, or a documented equivalent that executes the same default assistants/podcast/tests suite from a clean checkout:

    uv run --project assistants/podcast pytest
  • CI does not set or require Telegram, Groq, Heru engine, Codex, or Claude credentials for the default assistant test job.

  • CI does not run live Telegram delivery, Groq transcription/image analysis, real Heru processing, Codex, or Claude by default.

  • Opt-in real-engine tests under assistants/podcast/tests_integration/ remain excluded from normal CI, or are collected only in a way that proves they skip when PODCAST_ASSISTANT_INTEGRATION_ENGINES is unset.

  • CI is able to install/resolve the assistant test environment from a clean GitHub Actions checkout. Any handling of the Heru dependency is explicit and does not depend on Alexey's local ../heru directory being present on the runner.

  • Workflow path filters include assistant package metadata and lock/config files that affect assistant tests, such as assistants/podcast/pyproject.toml, assistants/podcast/uv.lock, and assistant test files.

  • CI failure messages are attributable to the assistant job rather than being hidden inside the DataOps V1 deploy workflow.

  • Existing DataOps V1 app and content workflows keep their current purpose; this issue should not accidentally deploy, refresh content caches, or require AWS credentials for assistant-only test changes.

Test Scenarios

Scenario: Podcast unit tests run for assistant code changes

Given: A change touches assistants/podcast/main.py, assistants/podcast/session_retrier.py, or a file under assistants/podcast/tests/
When: The change is pushed to main or evaluated through any configured pull request event
Then: GitHub Actions runs the assistant CI job and executes the Podcast Assistant unit suite without external credentials.

Scenario: Workflow-only change can validate assistant CI

Given: A change touches the assistant CI workflow file
When: The workflow runs through path filters or workflow_dispatch
Then: The assistant CI job runs and reports a pass/fail status for the Podcast Assistant test suite.

Scenario: No live integrations in default CI

Given: The Actions runner has no TELEGRAM_BOT_API_KEY, TELEGRAM_CHAT_ID, GROQ_API_KEY, Codex CLI, Claude CLI, or live Heru credentials
When: The assistant CI job runs
Then: The default unit suite still passes or fails based on code behavior only, not missing external credentials.

Scenario: Real-engine tests remain opt-in

Given: PODCAST_ASSISTANT_INTEGRATION_ENGINES is unset
When: Any integration-test collection/check is run for assistants/podcast/tests_integration/
Then: Codex/Claude real-engine tests are skipped and do not consume external quota or require CLIs.

Scenario: Assistant-only changes do not trigger app deployment

Given: A change only touches assistants/** and the assistant CI workflow
When: The change reaches GitHub Actions
Then: The assistant test workflow runs, and the DataOps V1 deploy/content refresh workflows are not required for assistant-only validation unless their own path filters are intentionally changed in a separate issue.

Out of Scope

  • Implementing or changing assistant product behavior.
  • Running real Telegram, Groq, Heru, Codex, or Claude checks in normal CI.
  • Adding production assistant deployment, AWS resources, DynamoDB tables, S3 artifact storage, or portal UI.
  • Closing the [HUMAN] Telegram smoke check left open on Import Podcast Assistant into assistants/podcast #7.
  • Modifying source repos outside dataops, including ../podcast-assistant, ../dtc-operations, ../datatasks, or ../heru, unless a separate issue explicitly scopes that work.
  • Refactoring all assistant packaging beyond what is required for a clean, safe CI test environment.

Dependencies

  • Import Podcast Assistant into assistants/podcast #7 provides the canonical assistants/podcast/ package location and current safe local test command.
  • The engineer should verify the workflow from a clean checkout assumption, not from local-only directories available on Alexey's machine.
  • If Heru must be available for import-time unit tests, the solution should make that dependency explicit in dataops CI without requiring live Heru engine execution.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0Must haveassistantAssistant modules and jobsinfraDeployment and infrastructurepodcastPodcast workflow and assistanttestingTests and QA

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions