# Action mirrors

Codebahn mirrors the most-used GitHub Actions on the instance. By default, workflows resolve actions from GitHub as usual. You can opt in to using the local mirrors per workflow step by referencing the Codebahn URL instead. Local mirrors make your builds more reliable: no dependency on GitHub availability, no transient network failures fetching action code, and CI traffic stays within the EU.

## How to use a local mirror

Replace the short-form `uses:` with the full Codebahn URL:

```yaml
steps:
  # Default: resolves from GitHub
  - uses: actions/checkout@v7

  # Opt-in: resolves from Codebahn's local mirror
  - uses: https://codebahn.net/actions/checkout@v7
```

Both forms work. The full-URL form is part of the [Forgejo Actions syntax](https://forgejo.org/docs/latest/user/actions/reference/) and resolves from the local instance with no network call to GitHub.

## Available mirrors

The following actions are mirrored locally and synced daily from GitHub.

### GitHub official (`actions/`)

| Action | What it does |
| --- | --- |
| `actions/checkout` | Clone the repository |
| `actions/setup-node` | Install Node.js |
| `actions/setup-python` | Install Python |
| `actions/setup-go` | Install Go |
| `actions/setup-java` | Install Java (Temurin, Corretto, etc.) |
| `actions/setup-dotnet` | Install .NET SDK |
| `actions/cache` | Cache dependencies between jobs |
| `actions/upload-artifact` | Upload build artifacts |
| `actions/download-artifact` | Download build artifacts |
| `actions/github-script` | Run JavaScript against the Forgejo API |

### Docker (`docker/`)

| Action | What it does |
| --- | --- |
| `docker/setup-qemu-action` | Install QEMU for multi-arch builds |
| `docker/setup-buildx-action` | Install Docker Buildx |
| `docker/build-push-action` | Build and push Docker images |
| `docker/login-action` | Log in to a container registry |
| `docker/metadata-action` | Generate image tags and labels |

### OpenTofu (`opentofu/`)

| Action | What it does |
| --- | --- |
| `opentofu/setup-opentofu` | Install OpenTofu |

:::note[Compatibility notes]
`actions/upload-artifact` and `actions/download-artifact` v3 work as-is. v4 uses an API that may require Forgejo's patched fork. `actions/github-script` works for repo-scoped operations (PRs, issues, labels) but fails for GitHub-only endpoints (CodeQL, Dependabot, GitHub Apps).
:::

## Actions not on this list

Any GitHub Action that does not depend on GitHub-specific APIs works on Codebahn. Actions not in the mirror list resolve from GitHub as usual when using the short-form `uses:` syntax. You can also reference them with a full GitHub URL if you prefer explicit URLs across your workflow:

```yaml
- uses: https://github.com/codecov/codecov-action@v4
```

### Common third-party actions

These are popular, Forgejo-compatible actions. Copy the `uses:` line into your workflow.

**Language and tool setup**

```yaml
- uses: https://github.com/actions-rust-lang/setup-rust-toolchain@v1
- uses: https://github.com/hashicorp/setup-terraform@v3
```

**Security and coverage**

```yaml
- uses: https://github.com/aquasecurity/trivy-action@master
- uses: https://github.com/codecov/codecov-action@v4
```

**Cloud provider authentication**

```yaml
- uses: https://github.com/aws-actions/configure-aws-credentials@v4
- uses: https://github.com/google-github-actions/auth@v2
- uses: https://github.com/azure/login@v2
```

**Git utilities**

```yaml
- uses: https://github.com/stefanzweifel/git-auto-commit-action@v5
- uses: https://github.com/peter-evans/create-pull-request@v6
```

:::caution[Incompatible actions]
`github/codeql-action` requires GitHub's CodeQL API and does not work on Forgejo. `softprops/action-gh-release` is hardcoded to the GitHub.com release API; use Forgejo's own [`forgejo/release-action`](https://code.forgejo.org/forgejo/release-action) instead.
:::

## Requesting additions

Need an action mirrored locally? Contact [support@codebahn.net](mailto:support@codebahn.net) with the GitHub org and repo name.
