Contributing to Discourse development

:bookmark: Esta guía está diseñada para aquellos que deseen contribuir al proyecto de código abierto de Discourse, detallando la configuración y las convenciones necesarias para una colaboración efectiva.

:person_raising_hand: Nivel de usuario requerido: Si bien cualquiera puede contribuir con código, deberá estar familiarizado con Ruby y JavaScript.

Resumen

Esta documentación cubrirá lo siguiente:

  • Configuración de su entorno de desarrollo
  • Comprensión de por dónde empezar a contribuir
  • Creación y trabajo con plugins de Discourse
  • Contribución al núcleo de Discourse
  • Convenciones de codificación a seguir
  • Envío de sus contribuciones en GitHub

Configuración del entorno de desarrollo

Antes de comenzar a contribuir, asegúrese de que su entorno de desarrollo esté configurado correctamente. Siga la guía apropiada para su plataforma:

Saber por dónde empezar

Discourse es un proyecto grande, y comprender sus tecnologías subyacentes como Ruby y JavaScript es esencial. Para obtener orientación sobre cómo empezar, consulte la guía para novatos.

Creación y trabajo con plugins

Los plugins ofrecen una forma de comprender los internos de Discourse en porciones manejables y le permiten comenzar a contribuir con código fácilmente. Comience con:

Para inspiración, explore ideas populares en Feature y Plugin > Extras.

Contribución al núcleo de Discourse

El código central de Discourse se gestiona en el repositorio central en GitHub.

Firma del CLA

Antes de contribuir, lea y firme el Acuerdo de Licencia de Contribución de Foros Electrónicos de Discourse. El equipo no puede aceptar legalmente solicitudes de extracción (PRs) de usuarios que no hayan firmado el CLA.

Calentamiento con tareas iniciales

Explore la etiqueta pr-welcome para buenas tareas para comenzar.

Trabajar a través de la lista de errores (bugs)

Arregle errores de la lista de errores abiertos ordenados por “me gusta”. Deje una nota si está trabajando en un error; si no lo completa, deje cualquier nota relevante para que otra persona continúe su trabajo.

Ayuda con temas de características (features)

Contribuya con detalles y maquetas a las solicitudes de características para ayudar en su proceso de aprobación. Recuerde, no todas las características se incluirán en el núcleo.

Mejorar el rendimiento

Agradecemos las solicitudes de extracción que mejoren el rendimiento del lado del cliente o del servidor, centrándose en áreas de alto impacto como la carga inicial de la página principal o la vista de temas.

Mejorar los proyectos mantenidos por Discourse

Contribuya a otros proyectos de código abierto mantenidos por Discourse. Algunos proyectos notables incluyen:

Convenciones de codificación

El nombramiento es CRÍTICO

Busque una paridad del 100% entre los términos utilizados en el sitio y los nombres de las clases y columnas en la base de datos (ej. “posts”).

La compatibilidad con las últimas versiones de las dependencias es CRÍTICA

Asegure la compatibilidad con las últimas versiones estables de librerías como Rails, Ruby y Ember. Pruebe si hay regresiones al actualizar dependencias.

Las contribuciones solo de pruebas son bienvenidas

Se agradecen las contribuciones de pruebas, especialmente para procesos y acciones de controlador no probados. Evite simular (mocking) a menos que sea absolutamente necesario.

Las contribuciones solo de refactorización NO son bienvenidas

Evite enviar solicitudes de extracción que solo sean de refactorización. En su lugar, arregle un error o implemente una característica mientras mejora el código.

Envío de código en GitHub

Flujo de trabajo paso a paso

  1. Clonar el repositorio de Discourse:

    git clone git@github.com:discourse/discourse.git
    
  2. Crear una nueva rama:

    cd discourse
    git checkout -b nueva_rama_discourse
    
  3. Codificar:

    • Adhiérase a las convenciones de código existentes que encuentre en el código.
    • Incluya pruebas y asegúrese de que pasen.
    • Haga referencia a discusiones relevantes en el foro meta de Discourse.
  4. Seguir las convenciones de codificación:

    • dos espacios, sin tabulaciones
    • sin espacios en blanco al final, las líneas en blanco no deben tener espacios
    • use espacios alrededor de operadores, después de comas, dos puntos, punto y coma, alrededor de { y antes de }
    • sin espacio después de (, [ o antes de ], )
    • use la sintaxis de hash de Ruby 1.9: prefiera { a: 1 } sobre { :a => 1 }
    • prefiera class << self; def method; end sobre def self.method para métodos de clase
    • prefiera { ... } sobre do ... end para bloques de una sola línea, evite usar { ... } para bloques de varias líneas
    • evite return cuando no sea necesario
  5. Confirmar (Commit):

    git commit -m "Un breve resumen del cambio" -m "Una descripción detallada del cambio"
    

    Nunca deje un mensaje de confirmación en blanco - esta es una guía útil para escribir mensajes de confirmación. El mensaje debe comenzar con un resumen breve (máximo 72 caracteres) en la primera línea, seguido de una línea en blanco, y luego una descripción más detallada del cambio. Puede usar sintaxis markdown para un estilo simple si es necesario.

    Asegúrese de prefijar los títulos de confirmación de acuerdo con las convenciones de Discourse.

    5 (a). Análisis de código (Linting):
    El código JavaScript se analiza con eslint y las condiciones de formato de prettier. Ruby se analiza con RuboCop. Todas estas comprobaciones se ejecutan automáticamente en las acciones de GitHub cada vez que crea una solicitud de extracción para Discourse.

    • Es muy recomendable que instale nuestros ganchos (hooks) de git previos a la confirmación usando lefthook. Esto se ejecutará automáticamente cada vez que realice una confirmación en el núcleo de Discourse, y planteará problemas con los diversos lenguajes y plantillas antes de enviarlos y tener que esperar a que se ejecute CI de GitHub. Ejecute esto en la raíz de su proyecto:
      mkdir .git/hooks
      npx lefthook install
      
  6. Actualizar su rama:

    git fetch origin
    git rebase origin/main
    
  7. Bifurcar (Fork):

    git remote add mine git@github.com:<your-username>/discourse.git
    
  8. Enviar a su remoto:

    git push mine nueva_rama_discourse
    
  9. Emitir una solicitud de extracción:

    • Navegue a su repositorio en GitHub.
    • Haga clic en “Pull Request”.
    • Escriba el nombre de su rama en el campo de la rama.
    • Haga clic en “Update Commit Range”.
    • Verifique los cambios en las pestañas “Commits” y “Files Changed”.
    • Proporcione un título y una descripción.
    • Haga clic en “Send pull request”.

    Antes de enviar una solicitud de extracción, limpie el historial, revise sus confirmaciones y fusione (squash) cambios menores y correcciones en las confirmaciones correspondientes. Puede fusionar confirmaciones con el comando de rebase interactivo:

git fetch origin
git checkout nueva_rama_discourse
git rebase origin/main
git rebase -i

< se abre el editor y le permite cambiar el historial de confirmación >
< siga las instrucciones en la parte inferior del editor >

git push -f mine nueva_rama_discourse
  1. Responder a los comentarios:
    • Sea receptivo a los comentarios y esté listo para implementar los cambios sugeridos.
    • Recuerde, los comentarios significan que su trabajo es valorado y está destinado a ser incluido.

¡Gracias por contribuir al proyecto de código abierto de Discourse!

73 Me gusta

¿Se eliminó esto a propósito?


Esto ya no funciona

2 Me gusta

Gracias @Moin - ¡lo he solucionado en el tema!

3 Me gusta

Hola, ¿hay alguna guía sobre cómo solicitar una revisión de PR?

He enviado un par de solicitudes de extracción y parece que el equipo de Discourse desafortunadamente se las ha perdido. Sucede, y está bien.
Pero parece que no hay documentación sobre cómo contactar respetuosamente a alguien del equipo.

4 Me gusta

Te entiendo. Como pauta, creo que una publicación de recordatorio en el PR después de un mes está bien. También puedes abrir un tema (o responder a un tema relevante existente en Meta) al respecto.

3 Me gusta

Hola Sam, en realidad intenté impulsar una PR (aquí) y parece que los impulsos no funcionan de la misma manera en GitHub que aquí (no se impulsa a la parte superior de la lista).

Me pasaré por la categoría Dev en el futuro. Podría ser bueno mencionar explícitamente esa categoría en el OP (ya sea en o antes del paso #10) :slight_smile:

1 me gusta

Si enviamos una PR que necesita localización, ¿ponemos cadenas YAML vacías en los archivos config/locales?