doc: Guía de integración del Package Registry de Forgejo
* 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>
This commit is contained in:
parent
89d6f66be8
commit
9efc2d8d4e
1 changed files with 88 additions and 0 deletions
88
docs/technical/reference/forgejo_rpm_registry.rst
Normal file
88
docs/technical/reference/forgejo_rpm_registry.rst
Normal file
|
|
@ -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 <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
|
||||
Loading…
Reference in a new issue