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

88 lines
3.4 KiB
ReStructuredText

============================
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:
.. code-block:: bash
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``:
.. code-block:: ini
[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``):
.. code-block:: yaml
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