Actualiza tu perfil de GitHub con README y GitHub Actions - Parte 2

Search for a command to run...

No comments yet. Be the first to comment.
Crear tu GitHub README.md usando Python y GitHub Actions para cargar los últimos post de tu blog de forma dinámica.
Si aun no has leído las otras dos partes te invito a que las revises: Crear nuestro README en GitHub Escribir un script en python para crear nuestro README dinámico En esta tercera entrega vamos a automatizar mediante GitHub Actions la generación...
Introducción nanobot es una plataforma de asistente personal de IA diseñada para ejecutarse en tu propia infraestructura, ya sea una laptop, un servidor pequeño o un contenedor en la nube (VPS). A dif

Continuando con un post anterior donde publicamos nuestra librería a PyPI, vamos a ir un paso más allá en el proceso de construcción y despliegue (o, mejor dicho, build y release). En este tutorial, crearemos nuestro propio workflow en GitHub Actions...

El objetivo de este tutorial es guiarte paso a paso en el proceso de creación y publicación de tu propia librería en Python. Aunque Python ofrece una biblioteca estándar muy completa, aprovechar las contribuciones de la comunidad en PyPI te permite e...

En un post anterior, exploramos los conceptos básicos de la shell de la CLI de Odoo y cómo configurar IPython como REPL para mejorar nuestra experiencia de desarrollo. Ahora, profundizaremos en el uso de la shell de Odoo, abordando temas más avanzado...

¡Hola a todos! Hoy vamos a explorar un tema esencial para todos los programadores de Odoo que deseen profundizar en el desarrollo y uso del ORM de Odoo: la shell de la CLI de Odoo. La CLI (Command Line Interface) de Odoo es la forma en que se ejecuta...

La idea principal es poder generar un archivo README.md con una lista de los últimos 5 post de este Blog, pero en esencia este código con muy poco o hasta nula modificacion en algunos casos puede servir para otros servicios como dev.to, Medium o hashnode.com.
Ya teniendo nuestro archivo README.md creado en el post Actualiza tu perfil de GitHub con README y Github Actions - Parte 1 , nos ubicamos en la carpeta de nuestro proyecto y empezaremos creamos una copia de nuestro archivo pero con extensión .template, quedándonos algo como esto: README.md.template, este sera el archivo que usaremos como base para generar nuestro README.md
Luego editamos la sección de "Latest post (Spanish)" sustituyendo nuestros post estáticos con este código en Jinja2, que nos ayuda a iterar sobre una lista de post.
## Latest Posts (Spanish)
{% for post in latest_post %} - {{post.title}} {% endfor %}
En esta plantilla indico que le voy a pasar latest_post y que debo recorrer sus post e imprimirlos dentro de un link en markdown.
Ahora necesitamos el endpoint a el que consultaremos para obtener nuestras lista de posts, para esto haré uso de las RSS que tiene mi blog y con el siguiente servicio lo convertiré de XML a JSON
Acá pudimos haberlo hecho de muchas maneras distintas, se pudo haber hecho el cambio de XML a JSON usando Python, mi idea era hacerlo lo mas simple posible, si tienes una idea mejor la espero en los comentarios o un Pull Request, ya con esto aclarado podemos continuar xD.
Teniendo nuestro endpoint listo procederemos a crear nuestro script en Python, por lo que primero debemos preparar, es nuestro entorno virtual que nos ayude a aislar nuestras dependencias para este proyecto, podemos hacer uso de Pipenv del cual tengo un tutorial por acá (Entornos virtuales en python usando Pipenv), pero en este caso lo haremos de la siguiente manera ya que es la mas comun.
python3 -m venv env
source env/bin/activate
touch app.py
Lo que creara una carpeta env en el root de nuestro proyecto, activara nuestro entorno virtual y crea nuestro archivo app.py
Para poder usar nuestras librerías debemos instalarlas, en este caso haré uso de PIP que es nuestro gestor de paquetes en python y las librería a instalar son:
urllib3: Para realizar las consultas HTTP
json: para parsear la información recibida en la respuesta HTTP
jinja2: para renderizar nuestro archivo README con la potencia de esta librería de plantillas
pip install urllib3 json jinja2
pip freeze > requirements.txt
Ya tenemos nuestras dependencias instaladas nuestras dependencias, así que procederemos a crear nuestro script, quedándonos algo como esto:
import json
import urllib3
from jinja2 import Environment, FileSystemLoader
# Cantidad maxima de posts a mostrar
MAX_POSTS = 5
# Setup
env = Environment(loader=FileSystemLoader('.'))
http = urllib3.PoolManager()
def get_latest_posts(max_posts=5):
r = http.request('GET', 'https://api.rss2json.com/v1/api.json?rss_url=https://blog.rafnixg.dev/rss.xml')
data = json.loads(r.data.decode('utf-8'))['items']
return data[0:max_posts]
def render_readme(data):
template = env.get_template('README.template')
render = template.render(**data)
with open("README.md", "w") as f:
f.write(render)
def main():
latest_posts = get_latest_posts(MAX_POSTS)
data = {
'latest_post': latest_posts
}
render_readme(data)
if __name__ == " __main__":
main()
Las primeras 3 lineas de nuestro código son básicamente la importación de las librerías y utilidades que vamos a usar, luego definimos una constante para el numero máximo de post que vamos a escribir en nuestro archivo README.
El setup es donde indicamos a jinja en que fichero debe buscar los templates y creamos una instancia que llamaremos http para nuestras consultas HTTP
Como ven en la función get_latest_posts() es un simple petición GET a el enpoint, como parámetro le podemos limitar el numero de items que retornara
En la función render_readme() indicamos el archivo a usar como template, cargamos la data obtenida de los últimos post y lo renderizamos en nuestro template para luego escribirlo en el archivo final README.md
Con esto ya podemos correr nuestro script y ver como nos genera de forma dinámica nuestro archivo README.md
ptyhon3 app.py
Nuestro script ya genere de forma dinámica nuestro archivo README.md, con este mismo enfoque se pueden agregar muchísimas mas funciones consultando a diferentes servicios y editar desde el template como se va a renderizar esta información.
En la tercera y ultima parte veremos como automatizar la ejecución de nuestro script y actualizar README.md en nuestro repositorio de GitHub, gracias a las GitHub Actions.
Gracias por leerme, los espero por twitter @rafnixg y por mi GitHub rafnixg
Siguiente publicación de esta serie: Actualiza tu perfil de GitHub con README y GitHub Actions - Parte 3