<!-- LLM_VERSION_INFO
FORMAT: text/markdown
CONTENT_TYPE: article
ORIGINAL_URL: https://lingo.dev/en/integrations/github
ALTERNATE_VERSION: en/integrations/github/index.html (text/html)
EXTRACTION_DATE: 2026-04-18T22:22:05.336Z

This is the markdown version with text-only content (images converted to alt-text).
For rich formatting with images, request the HTML version at: en/integrations/github/index.html
-->

# GitHub Actions

Max Prilutskiy·Updated about 1 month ago·2 min read

The official Lingo.dev GitHub Action runs the localization pipeline on every push, committing translations directly or opening a pull request depending on your workflow.

## Prerequisites

Complete the [CI/CD Setup](/content/en/docs/integrations/setup/index.html) first. You need a working `i18n.json` and `LINGODOTDEV_API_KEY` stored as a repository secret.

## Minimal setup

Create `.github/workflows/translate.yml`:

```yaml
name: Translate
on:
  push:
    branches: [main]
permissions:
  contents: write
jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
```

This commits translations directly to `main` on every push.

## Workflow examples

### Commit to main

### Pull request from main

```yaml
name: Translate
on:
  push:
    branches: [main]
permissions:
  contents: write
  pull-requests: write
jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
          pull-request: true
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

Enable **Settings > Actions > General > Allow GitHub Actions to create and approve pull requests** for PR-based workflows.

### Commit to feature branch

```yaml
name: Translate
on:
  push:
    branches-ignore: [main]
permissions:
  contents: write
jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
```

### Pull request from feature branch

```yaml
name: Translate
on:
  push:
    branches-ignore: [main]
permissions:
  contents: write
  pull-requests: write
jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
          pull-request: true
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

## Available inputs

| Input | Default | Description |
| --- | --- | --- |
| `api-key` | Required | Lingo.dev API key |
| `pull-request` | `false` | Create a pull request instead of committing directly |
| `commit-message` | `feat: update translations via @LingoDotDev` | Custom commit message |
| `pull-request-title` | `feat: update translations via @LingoDotDev` | Custom PR title |
| `commit-author-name` | `Lingo.dev` | Git commit author name |
| `commit-author-email` | `support@lingo.dev` | Git commit author email |
| `working-directory` | `.` | Working directory for monorepos |
| `process-own-commits` | `false` | Process commits made by this action |
| `parallel` | `false` | Run in parallel mode |
| `version` | `latest` | Lingo.dev CLI version |

## Next Steps

[Advanced Patterns](/content/en/docs/integrations/advanced/index.html) [GitLab CI/CD](/content/en/docs/integrations/gitlab/index.html) [Bitbucket Pipelines](/content/en/docs/integrations/bitbucket/index.html) [Connect Your Engine](/content/en/docs/platform/connect-your-engine/index.html)
