github RayLabsHQ/gitea-mirror v3.31.0

5 hours ago

Features

  • Mirror to GitHub and GitLab (beta). The Destination dropdown now offers GitHub and GitLab next to Gitea and Forgejo, including GitHub Enterprise Server and self-hosted GitLab through the instance URL. Neither host has a pull mirror API, so the app keeps a bare clone of each source repository under the data directory and pushes its branches and tags there with force and prune. The target always matches the source and is overwritten on every sync. Repositories are created under your account, an organization or a group as the mirror strategy decides, cleanup archives or deletes them through the host's API, and scheduled sync, retry and recovery all go through the same path. Issues, pull requests, releases, wiki and LFS objects are not pushed yet, and the switches say so. Configure with DESTINATION_PROVIDER=github or gitlab, plus MIRROR_CLONE_DIR and PUSH_CONCURRENCY if you need them. See PUSH_TARGETS.md. (#384, closes #377)

  • Reconcile the destination with the database. A "Reconcile with destination" button on the Repository Cleanup card compares what is on Gitea with what the app knows about. Mirrors it did not create rows for can be adopted, and rows whose mirror has gone missing can be reset so the next run recreates them. Only mirrors whose original URL points at your configured source count as this app's; native repositories and mirrors of other hosts are listed but never touched, and nothing is deleted on either side. Also available as POST /api/cleanup/reconcile. (#382, closes #284)

  • Helm chart on ghcr.io. The chart is published as an OCI package with every release, and its version now equals the application version, so a default install runs the release it shipped with instead of the old pinned 3.24.0. Install or upgrade with helm upgrade --install gitea-mirror oci://ghcr.io/raylabshq/charts/gitea-mirror. Installing from a clone still works. (#383)

  • GitHub to Gitea is the supported path; everything else is beta. The GitLab and Gitea / Forgejo sources and the Forgejo, GitHub and GitLab destinations show a beta pill in the settings, and the docs say the same. All twelve source and destination pairs were exercised against real hosts before this release. (#386)

Changes

  • Destination recorded on pull mirrors too. The Gitea and Forgejo mirror path now stores which host a repository was mirrored to, as the push engine does. Before this, a Forgejo mirror was recorded as Gitea with no host, showed the wrong icon and escaped the guard that stops a row being mirrored to a different host after a destination switch. Reconcile no longer counts rows mirrored to a previous destination as missing; it reports them separately. (#386)

  • First push into a freshly created repository is retried. GitLab, and sometimes GitHub, answer "not found" for a second or two after creating a repository. The engine now retries that first push a few times instead of failing the job. (#386)

  • Image security updates. The runner stage of the image is no longer served from the build cache, so Debian security updates land on every build. git-lfs is built with Go 1.25.14, the TypeScript native binary is no longer shipped in the production image, and browserslist, fast-uri, js-yaml and sharp are pinned to patched versions. All Docker Scout and Dependabot alerts are cleared. (#381)

  • The two overrides blocks that had crept into package.json are merged into one, so every dependency pin is honoured on the next install. (#385)

Notes

One migration runs on boot: 0018 records each repository's destination host so a row is never pushed to a different host later. Existing rows are backfilled from your destination settings. Back up data/gitea-mirror.db before upgrading, as with every release.

Push destinations are beta. Turning on auto mirror with a GitHub or GitLab destination creates a repository on the target for everything the app imports, so check the import list before you enable it.

Full Changelog: v3.30.0...v3.31.0

Don't miss a new gitea-mirror release

NewReleases is sending notifications on new releases.