Bienvenido, soy Luis y hoy les traigo un nuevo post.
Índice
Acción de GitHub acoplada con Python y Basic Front-end
Al ser cualquier desarrollador, generamos una gran cantidad de código y lo enviamos a Github para realizar copias de seguridad, administrar versiones de software, proyectos de alojamiento y otras muchas tareas. Si hablamos de cuántos repositorios son proyectos reales, hospedamos y mostramos en nuestro currículum vitae / redes sociales, es mucho menos que en comparación con la cantidad total de repositorios creados. Estos incluyen repositorios bifurcados, algunos códigos de práctica cargados o algún contenido adicional al que hacer referencia.
He creado muchos de ellos, y ahora, cuando tengo que mostrar mis proyectos, me confunde cuál debería incluirse o qué he hecho. Para resolver este dilema, se me ocurrió una solución para desarrollar una acción de Github para automatizar la adición de proyectos, hackatones asistidos, mostrar algunas estadísticas de perfil de Github y opcionalmente, conecté la acción y alojé la página web de forma gratuita. Veamos cómo lo hice.
¿Qué es GitHub Action?
La acción de Github le permite automatizar y personalizar el ciclo de desarrollo de software, de probar e implementar la aplicación, todo integrado en su repositorio. Estas acciones se denominan trabajos y se pueden programar para que se ejecuten de acuerdo con sus necesidades a través de trabajos Cron, que son programadores de trabajos basados en el tiempo. Si visita la acción de GitHub documentación, puede confundirse entre dos términos, acciones y flujos de trabajo. Estas son cosas confusas que deben aclararse antes de continuar:
- La principal diferencia entre acción y flujo de trabajo es que uno es parte de los demás. Las acciones son los eventos que se activan cuando se ejecuta un flujo de trabajo en particular.
- Las acciones son las tareas que se ejecutan en el entorno de código mientras Los flujos de trabajo gestionan cómo se realizarán estas tareas., cuál será su orden, cualquier dependencia / configuración a realizar antes de ejecutarlos, entradas, argumentos para pasar o definir la dependencia entre los diferentes trabajos.
- Un flujo de trabajo puede tener varias acciones ejecutándose secuencialmente o en paralelo, según la configuración asignada.
Ahora que tiene una comprensión básica de la acción de Github, codifiquemos el script real, que será parte de esta acción.
¡Tiempo de escritura!
Para este proyecto, estoy usando Python ya que es fácil para mí codificarlo y además hay menos acciones creadas con Python. Este proyecto requiere acceso a los datos del perfil de Github, aunque la API de Github proporciona la mayoría de los datos, todavía está restringido a 60 solicitudes por hora para usuarios no autenticados. Por lo tanto, necesita un Token de acceso personal (Configuración> Configuración de desarrollador> Tokens de acceso personal) que autentica al usuario en Github y permite 5000 solicitudes por hora.
Para comenzar, instale la biblioteca PyGithub para todos los dolores de cabeza de hacer conexiones, paginar los resultados y finalmente recuperar los datos. A continuación, necesitamos almacenar los datos devueltos por la API. Elijo el formato de diccionario porque es fácil de administrar y acceder a los atributos. Así es como se ve el código inicial:
from github import Github git = Github("TOKEN HERE") user_object = git.get_user() git_username = user_object.login user_data = {'username': git_username, 'git_photo_url': user_object.avatar_url, 'git_bio': user_object.bio, 'git_email': user_object.email, 'git_followers': user_object.followers, 'git_following': user_object.following, 'name': user_object.name, 'latest_updated': str(user_object.updated_at)}
A continuación, con respecto a los repositorios, necesitaba distinguir entre proyectos, hackatones y otros repositorios adicionales. Para hacer esto, he configurado una condición que antes de configurar esta acción, debe asignar manualmente el tema de repositorios de «proyecto» o «hackathon» para ser considerado en la cartera. Si un repositorio no está etiquetado para ninguno de estos, no se reflejará en la salida. Esta condición segrega los repositorios en dos secciones diferentes y ahora se almacenan por separado.
Construcción de página web
El script Python extrae toda la información, pero ahora, para el objetivo principal de este proyecto, se necesitaba una página web. Inicialmente, pensé en usar archivos de rebajas para hacer esto, pero debido a las restricciones de Github, no puede usar CSS en markdown (para evitar ataques de phishing). Este fue un problema importante, ya que no quiero que los usuarios se sientan tan aburridos o abatidos después de ver una cartera de texto simple. Por lo tanto, extendí el script actual para usar la información recopilada antes e inyectar los valores en una plantilla HTML que se almacena como una cadena y se cambia usando f-strings. La plantilla HTML tuvo muchos éxitos y rastros para lograr una vista simple que necesitaba diferentes configuraciones para la vista móvil. Se obtuvo toda la información básica de Github, pero aún faltaba una cosa, una visualización de estadísticas. Para la visualización de estadísticas, utilicé la aplicación Vercel de código abierto creada por Anurag Hazra que actualiza las estadísticas de forma dinámica. Para la actualización del blog, utilicé el Gautam Krishna R acción que se programó de manera diferente.
Después de todo el lío, la acción podría generar un archivo HTML que con la ayuda de Se pueden implementar páginas de Github, y ahí tienes tu cartera de autoactualización alojada de forma gratuita! Ahora, para automatizar todo este proceso de agregar nuevas entradas, se me ocurrió la acción de Github.
Dockerizar y crear la acción
Elijo imágenes de Docker para esta acción, ya que cuando probé diferentes enfoques para crear una acción en Python, no obtuve ningún buen resultado. Los Dockers ayudaron a aislar el entorno y ejecutar el código como se suponía que debía ejecutarse localmente. El archivo de la ventana acoplable para esta acción parece muy simple:
FROM python:3 RUN pip install -Iv PyGithub==1.53 COPY ./ /gen_index ENTRYPOINT ["python", "/gen_index/generate_index.py"]
Extraje una imagen de Python del centro de la ventana acoplable, instalé dependencias y ejecuté el script.
Ahora es el momento de crear la acción. Según los documentos de Github, necesita un archivo llamado action.yml en el directorio raíz de su repositorio público para que las acciones funcionen. El archivo de acción comprende lo siguiente: un nombre de acción único, descripción, nombre de autor, entradas que necesita tomar del usuario y luego qué archivo ejecutar. En formato YAML es muy fácil de configurar ya que sigue un sistema jerárquico. Para la entrada, tomé el token de Github y, para el archivo, proporcioné el archivo de la ventana acoplable. Ahora su acción está lista para su uso y también puede publicar su acción en el mercado, pero no es obligatorio.
Flujo de trabajo final para uso
Ahora es el momento de probar esta acción. Como mencioné anteriormente, las acciones son solo los eventos desencadenados de un flujo de trabajo. los el flujo de trabajo define el orden de las acciones, las especificaciones del sistema / entorno donde se ejecutaráy otras actividades que deba realizar antes o después del desencadenante. Estos archivos se almacenan en
.github/workflows folder.
El flujo de trabajo diseñado para usar esta acción es este:
Puede personalizar el flujo de trabajo con sus requisitos, pero el sLos pasos mencionados en el trabajo no deben modificarse. Este flujo de trabajo funciona bien y genera el archivo index.html que están utilizando las páginas de Github, pero algo falta nuevamente. El problema es que la acción de actualización del blog aún no está integrada. He hecho este paso opcional ya que no todo el mundo escribe blogs. Para integrar la acción del blog, en la misma carpeta de flujos de trabajo, cree un archivo YAML y coloque el mismo código: (solo actualice la lista de fuentes con sus enlaces)
Puede consultar la acción del flujo de trabajo de la publicación del blog para personalizar otros factores simplemente asegúrese de no ajustar el parámetro de la plantilla por mucho que no dé buenos resultados. Esta acción se ejecuta cada vez que envía algo al repositorio y, como se enviará el archivo de índice, esta acción actualizará la sección de blogs tan pronto como se genere el archivo de índice.
Conclusión
En este artículo, lo guié a través del concepto básico de acción de Github, flujo de trabajo, diferencias entre ellos, un poco de scripting de la acción, archivos requeridos para acciones y finalmente usarlos en un flujo de trabajo. También hablé de los desafíos que enfrenté durante este proyecto y cómo pueden usar mi acción en sus repositorios. Para obtener instrucciones más detalladas y el código fuente completo, consulte el enlace del repositorio aquí:
Gracias por leer este artículo.
Añadir comentario