From 9efc2d8d4e98fd37978f4285fccb1e43d88d9b52de9fcdf136a17e6899db996e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9nich=20Bon=20=C4=86iri=C4=87?= Date: Tue, 16 Jun 2026 10:27:48 -0600 Subject: [PATCH] =?UTF-8?q?doc:=20Gu=C3=ADa=20de=20integraci=C3=B3n=20del?= =?UTF-8?q?=20Package=20Registry=20de=20Forgejo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 Signed-off-by: Rénich Bon Ćirić --- .../reference/forgejo_rpm_registry.rst | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 docs/technical/reference/forgejo_rpm_registry.rst diff --git a/docs/technical/reference/forgejo_rpm_registry.rst b/docs/technical/reference/forgejo_rpm_registry.rst new file mode 100644 index 0000000..1705abd --- /dev/null +++ b/docs/technical/reference/forgejo_rpm_registry.rst @@ -0,0 +1,88 @@ +============================ +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 " \ + --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