zeph 0.21.2

Lightweight AI agent with hybrid inference, skills-first architecture, and multi-channel I/O
name: openai-integration

# Runs ignored OpenAI integration tests that require a live API key.
# Manual-only: consumes OpenAI API tokens, so not triggered on push.

on:
  workflow_dispatch:
    inputs:
      debug:
        description: "Enable verbose test output (--no-capture)"
        required: false
        default: "false"
        type: choice
        options:
          - "false"
          - "true"

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

concurrency:
  group: openai-integration
  cancel-in-progress: false

jobs:
  openai-integration:
    name: OpenAI Integration Tests
    runs-on: ubuntu-latest
    timeout-minutes: 15

    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Check secrets
        id: secrets-check
        env:
          API_KEY: ${{ secrets.ZEPH_OPENAI_API_KEY }}
        run: |
          if [ -z "$API_KEY" ]; then
            echo "Skipping: ZEPH_OPENAI_API_KEY not configured"
            echo "skip=true" >> "$GITHUB_OUTPUT"
          else
            echo "skip=false" >> "$GITHUB_OUTPUT"
          fi

      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
        if: steps.secrets-check.outputs.skip == 'false'

      - uses: taiki-e/install-action@6fb7e047ecef54aa053294f996a8feb3a5769baf # nextest
        if: steps.secrets-check.outputs.skip == 'false'

      - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
        if: steps.secrets-check.outputs.skip == 'false'
        with:
          cache-targets: "false"
          shared-key: "openai-integration"

      - uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
        if: steps.secrets-check.outputs.skip == 'false'

      - name: Run OpenAI ignored tests
        if: steps.secrets-check.outputs.skip == 'false'
        env:
          ZEPH_OPENAI_API_KEY: ${{ secrets.ZEPH_OPENAI_API_KEY }}
          RUSTC_WRAPPER: sccache
          SCCACHE_GHA_ENABLED: "true"
        run: |
          EXTRA=""
          if [ "${{ inputs.debug }}" = "true" ]; then
            EXTRA="--no-capture"
          fi
          cargo nextest run \
            --config-file .github/nextest.toml \
            --cargo-profile ci \
            --workspace \
            --features full \
            --run-ignored ignored-only \
            -E 'package(zeph-llm) and test(openai)' \
            $EXTRA