Execute Claude-powered code generation workflows for GitHub issues with Simple Forge. This repository provides two GitHub Actions that integrate with the Simple Forge service to automate code generation, issue processing, and workflow orchestration.
- name: Run Simple Forge
uses: simple-container-com/forge-action/.github/actions@v1
with:
job_id: ${{ inputs.job_id }}
issue_id: ${{ inputs.issue_id }}
service_url: 'https://forge.simple-container.com'
model_name: 'claude-sonnet-4-5'
branch: ${{ inputs.branch }}
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
anthropic_base_url: ${{ secrets.ANTHROPIC_BASE_URL || format('{0}/ai', inputs.service_url || 'https://forge.simple-container.com') || 'https://api.anthropic.com' }}
simple_forge_api_key: ${{ secrets.SIMPLE_FORGE_API_KEY }}
github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}- name: Run Simple Forge (Dockerless)
uses: simple-container-com/forge-action/.github/actions/dockerless@v1
with:
job_id: ${{ inputs.job_id }}
issue_id: ${{ inputs.issue_id }}
service_url: 'https://forge.simple-container.com'
branch: ${{ inputs.branch }}
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
anthropic_base_url: ${{ secrets.ANTHROPIC_BASE_URL || format('{0}/ai', inputs.service_url || 'https://forge.simple-container.com') || 'https://api.anthropic.com' }}
simple_forge_api_key: ${{ secrets.SIMPLE_FORGE_API_KEY }}
github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
script_version: 'latest'This repository provides two GitHub Actions:
| Action | Path | Use Case | Requirements |
|---|---|---|---|
| Docker Action | / |
Production use, faster execution | Docker support |
| Dockerless Action | /dockerless |
Docker-restricted environments | Docker for script extraction |
The main action that runs in a pre-built Docker container with all dependencies included.
| Input | Description | Required | Default |
|---|---|---|---|
job_id |
Job ID from the Simple Forge queue | β | - |
issue_id |
GitHub issue ID to process | β | - |
service_url |
Simple Forge service URL | β | https://forge.simple-container.com |
model_name |
Claude model to use for generation | β | claude-sonnet-4-5 |
branch |
Target branch for changes | β | - |
anthropic_api_key |
Anthropic API key for Claude | β | - |
anthropic_base_url |
Anthropic API base URL (supports AI gateway) | β | https://api.anthropic.com |
simple_forge_api_key |
Simple Forge API key | β | - |
github_token |
GitHub Personal Access Token for repository access | β | - |
| Output | Description |
|---|---|
status |
Workflow execution status |
branch |
Branch where changes were made |
workflow_url |
URL to the workflow run |
A composite action that runs without Docker containers, extracting scripts from the Docker image at runtime.
| Input | Description | Required | Default |
|---|---|---|---|
job_id |
Job ID from the Simple Forge queue | β | - |
issue_id |
GitHub issue ID to process | β | - |
service_url |
Simple Forge service URL | β | https://forge.simple-container.com |
branch |
Target branch for changes | β | - |
anthropic_api_key |
Anthropic API key for Claude | β | - |
anthropic_base_url |
Anthropic API base URL (supports AI gateway) | β | https://api.anthropic.com |
simple_forge_api_key |
Simple Forge API key | β | - |
github_token |
GitHub Personal Access Token for repository access | β | - |
script_version |
Version of scripts to use | β | latest |
skip_dependency_install |
Skip automatic dependency installation | β | false |
| Output | Description |
|---|---|
status |
Workflow execution status |
branch |
Branch where changes were made |
workflow_url |
URL to the workflow run |
name: Simple Forge Workflow
on:
workflow_dispatch:
inputs:
job_id:
description: 'Job ID from the queue'
required: true
type: string
issue_id:
description: 'GitHub issue ID'
required: true
type: string
branch:
description: 'Target branch for changes'
required: true
type: string
service_url:
description: 'Simple Forge service URL'
required: false
type: string
default: 'https://forge.simple-container.com'
model_name:
description: 'Claude model to use for generation'
required: false
default: 'claude-sonnet-4-5'
script_version:
description: 'Script version to use'
required: false
type: string
default: 'latest'
api_token:
description: 'JWT token for both AI gateway and forge service API access'
required: false
type: string
jobs:
generate-code:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Run Simple Forge
uses: simple-container-com/forge-action/.github/actions@v1
with:
job_id: ${{ inputs.job_id }}
issue_id: ${{ inputs.issue_id }}
service_url: "${{ inputs.service_url || 'https://forge.simple-container.com' }}"
model_name: ${{ inputs.model_name }}
branch: ${{ inputs.branch }}
anthropic_api_key: ${{ inputs.api_token || secrets.ANTHROPIC_API_KEY }}
anthropic_base_url: ${{ secrets.ANTHROPIC_BASE_URL || format('{0}/ai', inputs.service_url || 'https://forge.simple-container.com') || 'https://api.anthropic.com' }}
simple_forge_api_key: ${{ inputs.api_token || secrets.SIMPLE_FORGE_API_KEY }}
github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}name: Simple Forge Workflow (Dockerless)
on:
workflow_dispatch:
inputs:
job_id:
description: 'Job ID from the queue'
required: true
type: string
issue_id:
description: 'GitHub issue ID'
required: true
type: string
branch:
description: 'Target branch for changes'
required: true
type: string
service_url:
description: 'Simple Forge service URL'
required: false
type: string
default: 'https://forge.simple-container.com'
model_name:
description: 'Claude model to use for generation'
required: false
default: 'claude-sonnet-4-5'
script_version:
description: 'Script version to use'
required: false
type: string
default: 'latest'
api_token:
description: 'JWT token for both AI gateway and forge service API access'
required: false
type: string
jobs:
generate-code:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
- name: Run Simple Forge (Dockerless)
uses: simple-container-com/forge-action/.github/actions/dockerless@v1
with:
job_id: ${{ inputs.job_id }}
issue_id: ${{ inputs.issue_id }}
service_url: "${{ inputs.service_url || 'https://forge.simple-container.com' }}"
branch: ${{ inputs.branch }}
model_name: ${{ inputs.model_name }}
anthropic_api_key: ${{ inputs.api_token || secrets.ANTHROPIC_API_KEY }}
anthropic_base_url: ${{ secrets.ANTHROPIC_BASE_URL || format('{0}/ai', inputs.service_url || 'https://forge.simple-container.com') || 'https://api.anthropic.com' }}
simple_forge_api_key: ${{ inputs.api_token || secrets.SIMPLE_FORGE_API_KEY }}
github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
script_version: ${{ inputs.script_version }}
skip_dependency_install: 'false'Configure these secrets in your repository settings:
| Secret | Description | Required |
|---|---|---|
PERSONAL_ACCESS_TOKEN |
GitHub Personal Access Token with repository access | β Required |
ANTHROPIC_API_KEY |
Your Anthropic API key for Claude access (fallback when api_token not provided) |
β Optional |
SIMPLE_FORGE_API_KEY |
Your Simple Forge service API key (fallback when api_token not provided) |
β Optional |
ANTHROPIC_BASE_URL |
Custom Anthropic API base URL (for AI gateways) | β Optional |
- Go to your repository Settings β Secrets and variables β Actions
- Click New repository secret
- Add the required
PERSONAL_ACCESS_TOKENand any optional secrets you need
Your GitHub Personal Access Token must have the following permissions:
- Contents: Write (to create/modify files)
- Pull requests: Write (to create pull requests)
- Metadata: Read (to access repository information)
- Actions: Read (for workflow access)
For classic tokens, ensure these scopes are selected:
repo(full repository access)workflow(if updating workflow files)
Primary Method: api_token workflow input (Recommended)
- Pass a JWT token that works for both Anthropic and Simple Forge APIs
- Provide
api_tokenas a workflow input when triggering the workflow - No repository secrets needed for API access
Fallback Method: Individual secrets (Optional)
ANTHROPIC_API_KEYandSIMPLE_FORGE_API_KEYare used only whenapi_tokenis not provided- Useful for backward compatibility or alternative authentication methods
This secret allows you to use AI gateways or custom Anthropic API endpoints. If not provided, the action will automatically use:
- Your custom
ANTHROPIC_BASE_URLif set - The Simple Forge AI gateway at
{service_url}/ai - The default Anthropic API at
https://api.anthropic.com
- GitHub Actions runner with Docker support
- No additional setup required
- GitHub Actions runner (any)
- Docker available for script extraction (temporary)
- Node.js and Go setup (if not using
skip_dependency_install)
- β Production environments
- β Faster execution (pre-built container)
- β Consistent environment
- β Minimal setup required
- β Docker-restricted environments
- β Custom dependency management
- β Debugging and development
- β Environments with Docker limitations
Both actions follow the same workflow process:
- Environment Setup - Configure workspace and dependencies
- Branch Management - Create or switch to target branch
- Context Fetching - Retrieve job context from Simple Forge service
- Claude Setup - Initialize Claude CLI and plugins
- Code Generation - Execute Claude-powered code generation
- Response Processing - Process and validate generated code
- Change Commitment - Commit and push changes to repository
- Status Reporting - Report completion status to Simple Forge service
Both actions provide structured outputs for monitoring:
- name: Run Simple Forge
id: forge
uses: simple-container-com/forge-action/.github/actions@v1
with:
# ... inputs
- name: Check Results
run: |
echo "Status: ${{ steps.forge.outputs.status }}"
echo "Branch: ${{ steps.forge.outputs.branch }}"
echo "Workflow URL: ${{ steps.forge.outputs.workflow_url }}"Enable debug logging by setting the ACTIONS_STEP_DEBUG secret to true in your repository.
Error: API authentication failed
Solution: Verify your SIMPLE_FORGE_API_KEY and ANTHROPIC_API_KEY secrets are correctly set.
Error: Failed to create branch
Solution: Ensure your PERSONAL_ACCESS_TOKEN has sufficient permissions for the repository.
Error: Failed to pull Docker image
Solution: Check Docker availability and network connectivity on the runner.
Error: Critical scripts are missing
Solution: Verify the Docker image version and ensure script extraction completed successfully.
- Check the workflow run logs for detailed error information
- Verify all required secrets are properly configured
- Ensure your Simple Forge service is accessible and responsive
- Review the Simple Forge documentation for service-specific issues
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please read our Contributing Guidelines for details on how to submit pull requests, report issues, and contribute to the project.
Simple Forge - Automate your code generation workflows with Claude AI