LangChain CI Integration

VerifiedSafe

Configure LangChain CI/CD integration with GitHub Actions and testing for automated pipelines.

Sby Skills Guide Bot
DevOpsIntermediate
7/25/2026
Claude Code
#langchain#github-actions#ci-cd#pytest#automation

Recommended for

Automated summary

Sets up GitHub Actions CI/CD integration for LangChain applications, covering linting, type checking, unit tests and integration tests.

Strengths

  • Provides a complete ready-to-use GitHub Actions workflow with lint, unit test and integration test jobs
  • Clearly separates unit tests (no API calls) from integration tests requiring keys, gated to the main branch
  • Includes mock fixtures for LLMs and LangChain chains plus pytest marker configuration
  • Adds Ruff and mypy pre-commit hooks for local code quality

Limitations

  • The workflow targets GitHub Actions and Python only, with no variant for GitLab CI or other languages
  • Mock fixtures are minimal and do not cover advanced cases such as tools, retrievers or streaming
  • Assumes a specific project layout (tests/unit, tests/integration, src/) that is not adapted automatically
When to use it

Use this skill when you need to set up or automate a CI pipeline for a Python LangChain application hosted on GitHub.

When not to use it

Avoid this skill if your project does not use GitHub Actions, is not written in Python, or if you only want testing strategies without continuous integration setup.

Security analysis

Safe
Quality score85/100

The skill only produces standard GitHub Actions workflow YAML, pytest configuration, mock fixtures, and pre-commit hooks. Secrets are referenced correctly via GitHub Secrets (secrets.OPENAI_API_KEY) and the integration example uses a placeholder key. There is no curl|sh, no destructive commands, no obfuscated payloads, and no exfiltration of tokens. The Bash(gh:*) permission and Write/Edit access are used for legitimate CI configuration tasks, so overall execution risk is low.

No concerns found

How this analysis is made

Examples

Add CI pipeline
Set up a GitHub Actions CI pipeline for my LangChain app with lint, unit tests and integration tests.
LangChain test markers
Configure pytest markers and mock LLM fixtures so my LangChain tests run without hitting the API.
Pre-commit hooks
Add pre-commit hooks with Ruff and mypy to my LangChain repository.

name: langchain-ci-integration description: | Configure LangChain CI/CD integration with GitHub Actions and testing. Use when setting up automated testing, configuring CI pipelines, or integrating LangChain tests into your build process. Trigger with phrases like "langchain CI", "langchain GitHub Actions", "langchain automated tests", "CI langchain", "langchain pipeline". allowed-tools: Read, Write, Edit, Bash(gh:*) version: 1.0.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io

LangChain CI Integration

Overview

Configure comprehensive CI/CD pipelines for LangChain applications with testing, linting, and deployment automation.

Prerequisites

  • GitHub repository with Actions enabled
  • LangChain application with test suite
  • API keys for testing (stored as GitHub Secrets)

Instructions

Step 1: Create GitHub Actions Workflow

# .github/workflows/langchain-ci.yml
name: LangChain CI

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

env:
  PYTHON_VERSION: "3.11"

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: ${{ env.PYTHON_VERSION }}

      - name: Install dependencies
        run: |
          pip install ruff mypy

      - name: Lint with Ruff
        run: ruff check .

      - name: Type check with mypy
        run: mypy src/

  test-unit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: ${{ env.PYTHON_VERSION }}

      - name: Install dependencies
        run: |
          pip install -e ".[dev]"

      - name: Run unit tests
        run: |
          pytest tests/unit -v --cov=src --cov-report=xml

      - name: Upload coverage
        uses: codecov/codecov-action@v4
        with:
          files: coverage.xml

  test-integration:
    runs-on: ubuntu-latest
    needs: [lint, test-unit]
    # Only run on main branch or manual trigger
    if: github.ref == 'refs/heads/main' || github.event_name == 'workflow_dispatch'
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: ${{ env.PYTHON_VERSION }}

      - name: Install dependencies
        run: |
          pip install -e ".[dev]"

      - name: Run integration tests
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: |
          pytest tests/integration -v -m integration

Step 2: Configure Test Markers

# pyproject.toml
[tool.pytest.ini_options]
markers = [
    "unit: Unit tests (no external API calls)",
    "integration: Integration tests (requires API keys)",
    "slow: Slow tests (skip in fast mode)",
]
asyncio_mode = "auto"
testpaths = ["tests"]

Step 3: Create Mock Fixtures

# tests/conftest.py
import pytest
from unittest.mock import MagicMock, AsyncMock
from langchain_core.messages import AIMessage

@pytest.fixture
def mock_llm():
    """Mock LLM for unit tests."""
    mock = MagicMock()
    mock.invoke.return_value = AIMessage(content="Mock response")
    mock.ainvoke = AsyncMock(return_value=AIMessage(content="Mock response"))
    return mock

@pytest.fixture
def mock_chain(mock_llm):
    """Mock chain for testing."""
    from langchain_core.prompts import ChatPromptTemplate
    from langchain_core.output_parsers import StrOutputParser

    prompt = ChatPromptTemplate.from_template("{input}")
    return prompt | mock_llm | StrOutputParser()

Step 4: Add Pre-commit Hooks

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.1.6
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format

  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.7.1
    hooks:
      - id: mypy
        additional_dependencies:
          - langchain-core
          - pydantic

Step 5: Add Deployment Stage

# Add to .github/workflows/langchain-ci.yml
  deploy:
    runs-on: ubuntu-latest
    needs: [test-integration]
    if: github.ref == 'refs/heads/main'
    environment: production
    steps:
      - uses: actions/checkout@v4

      - name: Deploy to Cloud Run
        uses: google-github-actions/deploy-cloudrun@v2
        with:
          service: langchain-api
          source: .
          env_vars: |
            LANGCHAIN_PROJECT=production

Output

  • GitHub Actions workflow with lint, test, deploy stages
  • pytest configuration with markers
  • Mock fixtures for unit testing
  • Pre-commit hooks for code quality

Examples

Running Tests Locally

# Run unit tests only (fast)
pytest tests/unit -v

# Run with coverage
pytest tests/unit --cov=src --cov-report=html

# Run integration tests (requires API key)
OPENAI_API_KEY=sk-... pytest tests/integration -v -m integration

# Skip slow tests
pytest tests/ -v -m "not slow"

Integration Test Example

# tests/integration/test_chain.py
import pytest
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

@pytest.mark.integration
def test_real_chain_invocation():
    """Test with real LLM (requires API key)."""
    llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
    prompt = ChatPromptTemplate.from_template("Say exactly: {word}")
    chain = prompt | llm

    result = chain.invoke({"word": "hello"})
    assert "hello" in result.content.lower()

Error Handling

| Error | Cause | Solution | |-------|-------|----------| | Secret Not Found | Missing GitHub secret | Add OPENAI_API_KEY to repository secrets | | Rate Limit in CI | Too many API calls | Use mocks for unit tests, limit integration tests | | Timeout | Slow tests | Add timeout markers, parallelize tests | | Import Error | Missing dev dependencies | Ensure .[dev] extras installed |

Resources

Next Steps

Proceed to langchain-deploy-integration for deployment configuration.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/langchain-ci-integration-mrzxur1b/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/langchain-ci-integration-mrzxur1b' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/langchain-ci-integration-mrzxur1b/download' --output '.skill-downloads/langchain-ci-integration-mrzxur1b/SKILL.md.part' && mv '.skill-downloads/langchain-ci-integration-mrzxur1b/SKILL.md.part' '.skill-downloads/langchain-ci-integration-mrzxur1b/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): Read, Write, Edit, Bash(gh:*)

Original excerpt: Prerequisites
  • GitHub repository with Actions enabled
  • LangChain application with test suite
  • API keys for testing (stored as GitHub Secrets)

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/langchain-ci-integration-mrzxur1b/SKILL.md' && test -s '.skill-downloads/langchain-ci-integration-mrzxur1b/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/langchain-ci-integration' && cp -R '.skill-downloads/langchain-ci-integration-mrzxur1b' '.claude/skills/langchain-ci-integration'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/langchain-ci-integration-mrzxur1b'

openskills read 'langchain-ci-integration-mrzxur1b'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/langchain-ci-integration-mrzxur1b/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills