"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Construyendo jergons.dev [# The Fork Script

Construyendo jergons.dev [# The Fork Script

Publicado el 2024-09-18
Navegar:573

Este es el primero de los 4 scripts que me propuse escribir tal como se indica en la arquitectura del sistema. ¡Me sentí emocionado! ¿Fue un paso en la dirección de crear la experiencia "wiki" que contribuye al código abierto sin interactuar con la interfaz de usuario de GitHub?.

¿Cuáles son estos guiones?

Estos son archivos js que contienen algunas funciones reutilizables relacionadas, especialmente diseñadas para interactuar con las API de GitHub; se consumen dentro del mismo script o se exportan para usarlos para realizar su funcionalidad básica en otra parte del proyecto. Aceptan una instancia de Octokit autenticada de un usuario como parámetros de otros, esta instancia se utiliza para realizar acciones/funciones a través de las API de GitHub en nombre del usuario autenticado.

La necesidad de crear un flujo de contribución al código abierto sin interactuar con la interfaz de usuario de GitHub significó que teníamos que automatizar algún proceso, simulando cada paso que daría un usuario si contribuyera a través de la interfaz de usuario de GitHub, los pasos son los siguientes: sigue...

  1. Repositorio del proyecto Fork
  2. Crear una sucursal
  3. Confirmar cambios en la rama (agregar un nuevo archivo mdx en el directorio src/pages/word/ para una nueva palabra o editar los existentes, en nuestro caso)
  4. Crear una solicitud de extracción (enviar los cambios de palabras, en nuestro caso)

Una verdad que vale la pena decir

Comencé a escribir este script justo después de la confirmación inicial; de hecho, este fue el PR n.° 2, pero ¿recibió un éxito durante el largo mes de descanso? Tomé del proyecto antes de volver a trabajar en la función del diccionario base.

El guión

La tarea aquí era crear "The Fork Script", cuyo objetivo final es crear/obtener una bifurcación del repositorio jergons.dev en/desde la cuenta de un usuario. Debería albergar todas las funciones que realizarán lo siguiente.

  • Compruebe si ya existe una bifurcación de jergons.dev en la cuenta de un usuario
    • Si existe una bifurcación
      • Compruebe si el Fork está sincronizado con el upstream (es decir, actualizado con la rama principal del repositorio jergons.dev); SI NO: actualiza la bifurcación
    • Si NO se encuentra ninguna bifurcación
      • Crear la bifurcación

Al comprender la tarea, "profundicé" directamente en el guión.

Ya estoy muy acostumbrado a las API de GitHub debido a mi consumo frecuente en mi trabajo diario en Hearts ❤️... ¿Entonces la documentación de GitHub's Fork me parecía un broski?...

Los pasos

  • Creé una función forkRepository principal que era el punto de entrada principal para ejecutar la funcionalidad fork; conduce a todos los demás
  • Agregué las siguientes funciones, que en su mayoría sirvieron como ayuda para la función principal obvia forkRepository
    • isRepositoryForked: esta función comprueba si el repositorio de jergons.dev ya está bifurcado con la cuenta del usuario autenticado actual
    • isRepositoryForkUpdated: para comprobar si la bifurcación (si se encuentra) está (en sincronización con el repositorio principal) actualizada con el repositorio principal de jergons.dev
    • updateRepositoryFork: se utiliza para actualizar (sincronizar) el repositorio al estado del repositorio principal (head) jergons.dev
    • getBranch: es una utilidad básica (requerida al momento de escribir este script) que se utiliza para obtener detalles de rama/referencia para el repositorio de jergons.dev y la bifurcación del usuario para usar en la comparación que se realiza en el asistente isRepositoryForkUpdated para realizar su función principal; utiliza el punto final de Referencias de GitHub.

Mi extraña suposición

¿Pasando por mi mente? Mientras escribía este script fue un pensamiento al que me aferré después de leer el párrafo citado a continuación en la documentación de GitHub Fork

Nota: La bifurcación de un repositorio ocurre de forma asincrónica. Es posible que tengas que esperar un breve período de tiempo antes de poder acceder a los objetos de Git. Si esto lleva más de 5 minutos, asegúrese de comunicarse con el Soporte de GitHub.

Entendí mal esto y supuse que solo íbamos a poder iniciar un proceso de bifurcación, seguir adelante y seguramente no podremos esperar por un objeto de respuesta que devuelva los detalles de la nueva bifurcación porque no lo sabemos. cuando se completa el proceso de bifurcación.

Esta suposición me obligó a no devolver ningún dato de la función principal del repositorio de la bifurcación y ya estaba empezando a pensar en este punto: ¿cómo voy a conseguir que los detalles de la bifurcación se procesen en la siguiente fase del proceso de contribución? Hmm, ¿tal vez usaré webhooks?

¿Resultó que lo estaba pensando demasiado? Más tarde me di cuenta de que, de hecho, obtendría detalles de respuesta para la bifurcación y esto me llevó a hacer un PR de seguimiento para abordar la devolución de los datos requeridos del objeto de respuesta de la bifurcación para su consumo en el proceso de contribución.

las relaciones públicas

Principal:

Building jargons.dev [# The Fork Script hazaña: implementar el script del repositorio `fork` #3

Building jargons.dev [# The Fork Script
balbuceo publicado el

Esta solicitud de extracción implementa el script de bifurcación; este script está diseñado para bifurcar mediante programación el repositorio del proyecto principal a una cuenta de usuario; Alberga una función principal y otras funciones auxiliares que utiliza para realizar algunas acciones necesarias a fin de garantizar una operación eficiente de la bifurcación del repositorio.

Cambios realizados

  • Implementada la función principal forkRepository dentro del script; esta función es la principal función exportada que realiza la operación de bifurcación principal; acepta una instancia de userOctokit (un objeto autenticado por el usuario con permiso para actuar en nombre del usuario) y los detalles del repositorio del proyecto, es decir, el objeto repoDetails y hace lo siguiente...
    • Comprueba si el repositorio del proyecto ya se ha bifurcado a la cuenta del usuario utilizando la función auxiliar isRepositoryForked; esto devuelve la bifurcación de nulo
      • Si el repositorio ya se ha bifurcado, verificamos si la bifurcación está actualizada/sincronizada con el repositorio principal del proyecto usando la función auxiliar isRepositoryForkUpdated; esto devuelve el SHA actualizado y una propiedad booleana isUpdated que confirma si la bifurcación está actualizada
        • Si la bifurcación no está actualizada; luego realizamos la actualización sincronizándola con el repositorio principal del proyecto usando la función auxiliar updateRepositoryFork
      • Si el repositorio está actualizado/sincronizado con el repositorio principal del proyecto; cancelamos la operación en este punto con una devolución anticipada;
    • Si el repositorio del proyecto no está bifurcado en la cuenta del usuario; luego procedemos a iniciar un proceso de bifurcación llamando al punto final "POST /repos/{owner}/{repo}/forks" usando la instancia userOctokit. (Esto inicia el proceso de bifurcación, ¿no sabemos exactamente cuándo se completa el proceso?)
  • Implemente las siguientes funciones auxiliares consumidas dentro de la función forkRepository principal y también dentro de otras funciones auxiliares
    • updateRepositoryFork: se utiliza para actualizar (sincronizar) el repositorio al estado del repositorio principal (principal)
    • isRepositoryForkUpdated: se utiliza para comprobar si una bifurcación está (en sincronización con el repositorio principal) actualizada con el repositorio principal
    • getBranch: se utiliza para obtener detalles de una sucursal/referencia
    • isRepositoryForked: se utiliza para comprobar la presencia de un repositorio específico en la lista de repositorios fork de un usuario
  • Se agregó getRepoParts a /lib/utils; es una función de utilidad que se utiliza para resolver repoOwner y repoName desde el nombre completo de un repositorio.

Problema relacionado

Resuelve #2

Screencast/Captura de pantalla

https://github.com/babblebey/jargons.dev/assets/25631971/16221b7e-3c28-4c6c-a1f3-24d583ce7e3a

?

Ver en GitHub

Hacer un seguimiento:

Building jargons.dev [# The Fork Script Hazaña: devolver el repositorio `fullname` en el script fork #29

Building jargons.dev [# The Fork Script
balbuceo publicado el

Este PR es un seguimiento de un paso que falta en la implementación inicial del script de bifurcación en el n.° 3; el script de bifurcación no pudo devolver un repositorio que pueda usarse en el siguiente paso del cálculo. Esto se debió a una suposición extraña que tuve durante la implementación inicial. ?Vea mi suposición a continuación...

Supongo que la llamada al punto final "POST /repos/{owner}/{repo}/forks" solo garantiza el inicio de un proceso de bifurcación sin asegurarnos una respuesta en absoluto. Lo que significa que es posible que no obtengamos exactamente una respuesta.datos después de la llamada

...pero eso no era cierto, descubrí que en realidad llega una respuesta.datos, pero puede llevar algo de tiempo y solo en los casos en que el repositorio que se bifurca es enorme... y en este momento La bifurcación del repositorio del proyecto ocurre en menos de 5 segundos.

Cambios realizados

  • Repositorio de bifurcación devuelto: este es un valor de nombre completo del repositorio devuelto por la función auxiliar isRepositoryForked; Por la presente lo devuelvo como valor principal devuelto por la ejecución de la función forkRepository en la condición en la que el repositorio ya está bifurcado en la cuenta de un usuario en ejecución
  • Respuesta devuelta.data.full_name: este es un nombre completo del repositorio de bifurcación recién creado; Es un valor de la respuesta a la llamada al punto final "POST /repos/{owner}/{repo}/forks"; Por la presente lo devuelvo como valor principal reajustado de la ejecución de la función forkRepository en los casos en los que ya no se encontró ninguna bifurcación en la cuenta del usuario ejecutante
  • Cherry eligió algunos cambios del n.° 25 para usarlos aquí
    • f12f25f548a5c5836e9be7d601ed226c5269f5ee
    • 436ceea649b67812c0ec1164fde95d443ce556e0

?

Ver en GitHub
Declaración de liberación Este artículo se reproduce en: https://dev.to/babblebey/building-jargonsdev-5-the-fork-script-558i?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3