GitHub Actions Integration 🔦
The Lampe SDK includes a GitHub Action that makes it easy to integrate PR description generation and code review into your GitHub workflows. This action automatically fetches the necessary commit history and runs Lampe CLI commands in your GitHub workflows.
Features
- Automatic Git History Fetching: Includes the
fetch-through-merge-basefunctionality to ensure all PR commits are available - Multiple Commands: Support for
describe,review, andhealthcheckcommands - Flexible Configuration: Extensive options for customization
- Multiple Output Providers: Support for console, GitHub, GitLab, and Bitbucket outputs
- Two Generation Variants: Default and agentic modes
Quick Start
Add this to your .github/workflows/pr-description.yml:
name: Generate PR Description
on:
pull_request:
jobs:
describe:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: describe
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Usage Patterns
Pull Request Open Event Only
To run the action only when a pull request is opened (not on every push), use the opened event trigger:
name: Generate PR Description
on:
pull_request:
types: [opened]
jobs:
describe:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: describe
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Advanced Usage
name: Generate PR Description
on:
pull_request:
jobs:
describe:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: describe
variant: agentic
output: github
files_exclude: "*.md,*.txt"
files_reinclude: "docs/*.md"
max_tokens: 12000
timeout_seconds: 300
verbose: true
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
LAMPE_GITHUB_APP_ID: ${{ secrets.LAMPE_GITHUB_APP_ID }}
LAMPE_GITHUB_APP_PRIVATE_KEY: ${{ secrets.LAMPE_GITHUB_APP_PRIVATE_KEY }}
Commands
describe
Generates a comprehensive PR description based on the changes in the pull request.
Features:
- Analyzes file changes and commit history
- Generates structured descriptions
- Supports multiple output formats
- Configurable file inclusion/exclusion
review
Performs code review analysis on the pull request.
Features:
- Identifies potential issues and improvements
- Provides actionable feedback
- Supports different review styles and depths
- Automatic model selection based on review depth
- Integrates with GitHub's review system
Review Depth Options:
basic: Usesgpt-5-nanofor faster, lighter reviewsstandard: Usesgpt-5for balanced reviews (default)comprehensive: Usesgpt-5.1for thorough, detailed reviews
Review Variants:
multi-agent: Uses specialized agents for different aspects (default)diff-by-diff: Reviews each file change in parallel
healthcheck
Verifies that the Lampe SDK is properly configured and can connect to required services.
Features:
- Validates API keys
- Tests LLM connectivity
- Checks configuration
- Reports system status
Configuration Options
Input Parameters
| Input | Description | Required | Default |
|---|---|---|---|
command |
The Lampe CLI command to run (describe, review, healthcheck) |
Yes | describe |
repo |
Repository path | No | . |
title |
PR title (for local runs) | No | Pull Request |
base_ref |
Base ref for comparison | No | ${{ github.base_ref }} |
head_ref |
Head ref for comparison | No | ${{ github.head_ref }} |
output |
Output provider (auto, console, github, gitlab, bitbucket) |
No | auto |
variant |
Generation variant (default, agentic) or review variant (multi-agent, diff-by-diff) |
No | default (describe) or multi-agent (review) |
review_depth |
Review depth level (basic, standard, comprehensive). Model selection: basic=gpt-5-nano, standard=gpt-5, comprehensive=gpt-5.1 |
No | standard |
files_exclude |
Comma-separated list of file patterns to exclude | No | - |
files_reinclude |
Comma-separated list of file patterns to reinclude | No | - |
max_tokens |
Maximum tokens for truncation | No | 8000 |
timeout_seconds |
Timeout in seconds | No | - |
verbose |
Enable verbose output | No | false |
deepen_length |
Git fetch deepen length for merge-base | No | 10 |
Environment Variables
The following environment variables can be set as GitHub secrets:
| Variable | Description | Required |
|---|---|---|
OPENAI_API_KEY |
OpenAI API key for LLM calls | Yes (for LLM features) |
ANTHROPIC_API_KEY |
Anthropic API key for LLM calls | Yes (for LLM features) |
LAMPE_GITHUB_APP_ID |
GitHub App ID for GitHub integration | No |
LAMPE_GITHUB_APP_PRIVATE_KEY |
GitHub App private key | No |
Output Providers
auto: Automatically detects the platform (GitHub, GitLab, Bitbucket)console: Outputs to the GitHub Actions loggithub: Integrates with GitHub's PR systemgitlab: Integrates with GitLab's merge request systembitbucket: Integrates with Bitbucket's pull request system
Generation Variants
default
Standard generation using the default Lampe workflow.
agentic
Advanced generation using agentic workflows with enhanced reasoning capabilities.
File Filtering
Use files_exclude and files_reinclude to control which files are analyzed:
files_exclude: "*.md,*.txt,*.json"
files_reinclude: "docs/*.md,README.md"
Examples
Complete Workflow with Multiple Commands
name: Lampe Analysis
on:
pull_request:
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
# Health check
- name: Health Check
uses: montagne-dev/lampe@main
with:
command: healthcheck
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
# Generate description
- name: Generate Description
uses: montagne-dev/lampe@main
with:
command: describe
variant: agentic
output: github
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
# Generate review
- name: Generate Review
uses: montagne-dev/lampe@main
with:
command: review
variant: diff-by-diff
review_depth: comprehensive
output: github
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Custom Configuration
name: Custom Lampe Configuration
on:
pull_request:
jobs:
custom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: describe
variant: agentic
output: console
files_exclude: "*.md,*.txt,*.json,*.yml,*.yaml"
files_reinclude: "docs/*.md,README.md"
max_tokens: 15000
timeout_seconds: 600
verbose: true
deepen_length: 20
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Review Command
Basic review (standard depth):
name: Review PR
on:
pull_request:
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: review
variant: multi-agent
review_depth: standard
output: github
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Comprehensive review with diff-by-diff variant:
name: Comprehensive Review
on:
pull_request:
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: review
variant: diff-by-diff
review_depth: comprehensive
output: github
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Quick review (basic depth):
name: Quick Review
on:
pull_request:
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: review
variant: diff-by-diff
review_depth: basic
output: github
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Health Check
name: Health Check
on:
pull_request:
jobs:
healthcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: montagne-dev/lampe@main
with:
command: healthcheck
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Publishing the Action
To make this action available on GitHub Marketplace:
- Create a Release: Tag a version (e.g.,
v1.0.0) - Update References: Change
@mainto@v1.0.0in usage examples - Marketplace: The action will automatically appear in the marketplace
Local Testing
To test the action locally:
- Use
./instead ofmontagne-dev/lampe@mainin workflows - Run the example workflows in
.github/workflows/ - Check logs for any issues
Migration from Current Workflow
To migrate from the current pr_description.yml:
- Replace the manual steps with the new action
- Move environment variables to the
envsection - Use the
command: describeinput - Test with a small PR first
Troubleshooting
Common Issues
- API Key Issues: Ensure your API keys are properly set in GitHub secrets
- Timeout Issues: Increase
timeout_secondsfor large repositories - Memory Issues: Reduce
max_tokensfor very large changes - Git History Issues: Increase
deepen_lengthfor repositories with deep history
Debug Mode
Enable verbose output to see detailed logs:
- uses: montagne-dev/lampe@main
with:
command: describe
verbose: true
Health Check
Always run a health check first to verify your setup:
- uses: montagne-dev/lampe@main
with:
command: healthcheck
Security Considerations
- All API keys are passed as environment variables
- No sensitive data is logged
- Git operations are performed safely with proper ref handling
Support
For issues and questions:
- GitHub Issues: montagne-dev/lampe
- Documentation: Lampe SDK Docs