============================ 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