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