Renovate on non-GitHub platforms

Published: 2026-08-17, updated on: 2026-08-18

Running Renovate and the Mend Renovate app on GitHub was as easy as pie. But my recent switch to Codeberg had me looking into how I can self-host Renovate myself and get it working outside of the standard GitHub environments.

Some Things to Note

The Mend Renovate platform provides useful features for managing dependencies, including the ability to use webhooks to trigger dependency checks or rebase pull requests based on repository activity. While these features are very convenient, the Mend Renovate platform (at the time of writing) doesn’t support any git hosting platform based on the Forgejo/Gitea stack.

With this limitation in mind, I had to approached my experiments with self-hosting Renovate a little differently. I needed to:

  • Determine the usability of running the renovate CLI as a Kubernetes CronJob.
  • Figure out how to handle/trigger any rebasing that should occur for open renovate PRs.
  • Assess the utility of the dependency dashboard when automatic triggers/reruns aren’t available.

Configuring the CLI

To get the Renovate CLI to function correctly with specific Git platforms like forgejo and codeberg, the simplest way is to set the necessary environment variables to point your non-GitHub. As a 12-factor app, any flag that the renovate binary accepts can also be set via environment variables.

On Kubernetes this was achieved with a combination of ConfigMap and Secret resources.

apiVersion: v1
kind: ConfigMap
metadata:
  name: renovate-envs
  namspace: renovate
data:
  RENOVATE_PLATFORM: forgejo
  # point the endpoint to the api, not just the root domain
  RENTOVATE_ENDPOINT: https://codeberg.org/api/v1

The following Secret is just for demonstration purposes. Please use some form of secret management solution to keep your credentials safe!

apiVersion: v1
kind: Secret
metadatata:
  name: renovate-secrets
  namespace: renovate
stringData:
  RENOVATE_TOKEN: super-secret-token
  # this gh token is necessary to prevent rate limiting
  # when renovate pulls changlog data from GitHub 
  RPENOVATE_GITHUB_TOKEN: another-super-secret-token

Creating a CronJob resource

I found that using a CronJob was the simplest and most reliable way to get the CLI close to how the Mend Renovate app works.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: &name renovate
  namespace: *name
spec:
  schedule: "@hourly"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - image: renovate/renovate:44.8.0
              name: *name
              envFrom:
                - configMapRef:
                    name: renovate-envs
                - secretRef:
                    name: renovate-secrets
              volumeMounts:
                - name: &work work
                  mountPath: /tmp/renovate/
          restartPolicy: Never
          volumes:
            - name: *work
              emptyDir: {}

Running the CLI every hour seems to be the sweet spot, each successive run takes care of rebasing or retrying any open Renovate PRs as well as act on any out-of-schedule updates you request on the dependency dashboard!

The CronJob can also be modified to build a cache by mounting a persistent volume to the /tmp/renovate/ path. But for my uses, running with non-persistent storage is fine for now.

While not as reactive as the Mend Renovate app, running the CLI this way has still proved to be super helpful!

Do you have a cool idea? I love helping bring complex visions to life.

Say hi or follow me here: