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