Files
gitea-auto-urls/README.md
Pihkaal 0eb189660b
All checks were successful
Build and Push Docker Image / build (push) Successful in 19s
chore: update README
2025-12-21 19:06:39 +01:00

2.7 KiB

gitea-auto-urls

Automatically generates Traefik middleware to shorten Gitea repository URLs.

Purpose

Removes the username from single-user Gitea instances: https://git.pihkaal.xyz/pihkaal/repo-namehttps://git.pihkaal.xyz/repo-name.
Note that this will work only if you have a single user on Gitea, this is not meant to be used with multiple users. This projects is done based on my needs.

How it works

  1. Fetches all repositories from Gitea API
  2. Generates Traefik rewrite middleware using a template
  3. Outputs configuration to /etc/traefik/dynamic/gitea-rewrites.yml
  4. Traefik auto-reloads when the file changes

Quick start

$ pnpm build
$ pnpm start

Traefik Configuration

Configure Traefik to watch the dynamic configuration directory:

# add this to your traefik config to be able to put dynamic config in /etc/traefik/dynamic
providers:
  file:
    directory: "/etc/traefik/dynamic"
    watch: true

Docker Setup

You can add this to your gitea stack:

services:
  # ...
  auto-urls:
    image: git.pihkaal.xyz/pihkaal/gitea-auto-urls:latest
    container_name: gitea-auto-urls
    restart: always
    environment:
      - PORT=3000
      - GITEA_URL
      - GITEA_USERNAME
      - GITEA_TOKEN
      - GITEA_WEBHOOK_SECRET
      - TEMPLATE_FILE=/config/gitea-rewrites.yml.in
      - OUTPUT_FILE=/config/gitea-rewrites.yml
    volumes:
      - /etc/traefik/dynamic:/config
    networks:
      - gitea

Configure in gitea

Create the token

Navigate to /user/settings/applications, then click "Generate a new token". Only required permissions are read:repository and read:user.

Create the webhook

Navigate to /user/settings/hooks, then click "Add webhook".

In "Target URL", put the server address. If you use docker and added this service to your gitea stack, just put http://container_name:PORT (e.g http://gitea-auto-urls:3000). In "Secret", put the same secret you used for GITEA_WEBHOOK_SECRET. You can easily generate it using:

$ openssl rand -base64 32

Lastly, for the triggers select "Custom Events", then "Repository".

And you're done, just hit "Add Webhook" and the service will start working.
The Gitea webhooks interface shows you the logs, so you can see here if it reached the service.

Template Format

You can put anything in here, {{REPOSITORIES}} will be pipe-separated repos list (repo-a|repo-b) and {{USERNAME}} just contain GITEA_USERNAME.
Minimal config: (see gitea-rewrites.yml.in):

http:
  middlewares:
    gitea-rewrites:
      replacePathRegex:
        regex: "^/({{REPOSITORIES}})(.*)$"
        replacement: "/{{USERNAME}}/$1$2"