ansible-koji/docs/technical/reference/forgejo_rpm_registry.rst
Rénich Bon Ćirić 9efc2d8d4e
doc: Guía de integración del Package Registry de Forgejo
* Explicación de la carga de RPMs a través del API de Forgejo
* Configuración del repositorio local DNF
* Ejemplo de workflow en YAML para Forgejo Actions

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-16 10:27:48 -06:00

3.4 KiB

Registro de Paquetes Forgejo

Contexto y API de Forgejo

Forgejo posee un registro de paquetes integrado (Package Registry) que soporta múltiples formatos de empaquetamiento, incluyendo RPM. Este registro genera y mantiene automáticamente los metadatos necesarios (como repomd.xml) para que los gestores de paquetes como DNF puedan consumir los RPMs directamente.

Subida Manual vía API

Para subir un paquete RPM de forma manual utilizando la línea de comandos, se realiza una petición HTTP PUT (o POST en algunas versiones) pasando el binario en el cuerpo del mensaje. Se debe autenticar mediante un Token de Acceso Personal (PAT) de Forgejo.

El comando exacto utilizado es:

curl -H "Authorization: token <TU_TOKEN_DE_ACCESO>" \
     --upload-file /ruta/al/paquete.rpm \
     https://git.mx-os.mx/api/packages/RPMs/rpm/upload

Nota: Si el archivo ya existe en el registro con el mismo nombre y versión, Forgejo rechazará la petición con un error 409 Conflict para prevenir sobreescrituras accidentales.

Configuración del Repositorio DNF

Para consumir los paquetes subidos al registro desde cualquier máquina de MxOS, se debe crear un archivo de configuración en /etc/yum.repos.d/mxos-packages.repo:

[mxos-packages]
name=MxOS Forgejo Packages
baseurl=https://git.mx-os.mx/api/packages/RPMs/rpm
enabled=1
gpgcheck=0
metadata_expire=0

Automatización con Forgejo Actions (Runners)

Podemos automatizar la compilación y publicación de los paquetes utilizando Forgejo Actions (compatible con GitHub Actions). A continuación, se detalla una plantilla de flujo de trabajo que se puede colocar en .forgejo/workflows/publish.yaml en el repositorio del RPM (como rust-siguldry):

name: Build and Publish RPM

on:
  push:
    tags:
      - 'v*'

jobs:
  build-rpm:
    runs-on: docker
    image: fedora:43 # O una imagen base con mock/rpmbuild preinstalados
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Install Build Dependencies
        run: |
          dnf install -y rpm-build rpmdevtools spectool mock

      - name: Download Sources
        run: |
          spectool -g *.spec

      - name: Build Source RPM (SRPM)
        run: |
          rpmbuild -bs --define "_sourcedir $PWD" --define "_srcrpmdir $PWD" *.spec

      - name: Build Binary RPM via Mock
        run: |
          # Mock necesita privilegios para chroot/systemd-nspawn.
          # Alternativamente se puede usar rpmbuild directamente si la imagen ya tiene las builddeps:
          rpmbuild -bb --define "_sourcedir $PWD" --define "_rpmdir $PWD" *.spec

      - name: Publish to Forgejo Registry
        env:
          FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
        run: |
          find . -name "*.rpm" -not -name "*.src.rpm" -not -name "*debuginfo*.rpm" -not -name "*debugsource*.rpm" | while read rpm_file; do
            echo "Subiendo $rpm_file..."
            curl -H "Authorization: token $FORGEJO_TOKEN" \
                 --upload-file "$rpm_file" \
                 "${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/rpm/upload"
          done