* 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>
88 lines
3.4 KiB
ReStructuredText
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
|