# Contribuye a Angular ¡Nos encantaría que contribuyeras a Angular y que ayudaras a hacerlo aún mejor de lo que es hoy! Como colaborador, estos son los lineamientos que nos gustaría que siguieras: - [Código de conducta](#coc) - [¿Preguntas o problemas?](#question) - [_Issues_ y _bugs_](#issue) - [Solicitud de funcionalidades](#feature) - [Guía para la creación de issues y PRs](#submit) - [Reglas del código](#rules) - [Convención para el mensaje de los _commits_](#commit) - [Firma del Acuerdo de Licencia de Colaborador (CLA)](#cla) ## Código de conducta Ayúdanos a mantener Angular abierto e inclusivo. Por favor lee y sigue nuestro [Código de conducta][coc]. ## ¿Tienes alguna pregunta o problema? No abras *issues* para preguntas de soporte general ya que queremos mantener los *issues* de GitHub para reporte de *bugs* y solicitud de funcionalidades. En su lugar, recomendamos utilizar [Stack Overflow](https://stackoverflow.com/questions/tagged/angular) para hacer preguntas relacionadas con soporte. Al crear una nueva pregunta en Stack Overflow, asegúrate de agregar el etiqueta (tag) de `angular`. Stack Overflow es mucho mejor para hacer preguntas ya que: - Hay miles de personas dispuestas a ayudar en preguntas y respuestas de Stack Overflow que permanecen disponibles para el público, por lo que tu pregunta o respuesta podría ayudar a otra persona. - El sistema de votación de Stack Overflow asegura que las mejores respuestas sobresalgan y sean visibles. Para ahorrar tu tiempo y el nuestro, cerraremos sistemáticamente todos los *issues* que sean solicitudes de soporte general y redirigiremos a las personas a Stack Overflow. Si deseas chatear sobre alguna pregunta en tiempo real, puedes hacerlo a través de nuestro [canal de Gitter][gitter]. ## ¿Encontraste un Bug? Si encontraste un error en el código fuente, puedes ayudarnos [creando un *issue*](#submit-issue) en nuestro [repositorio de GitHub][github]. O incluso mejor, puedes [crear un *Pull Request*](#submit-pr) con la solución. ## ¿Falta alguna funcionalidad? Puedes solicitar una nueva funcionalidad [creando un *issue*](#submit-issue) en nuestro repositorio de GitHub. Si deseas implementar una nueva funcionalidad, por favor considera el tamaño del cambio para determinar los pasos correctos para continuar: * Para un **cambio significativo**, primero abre un *issue* y describe tu propuesta para que pueda ser discutida. Este proceso nos permite coordinar mejor nuestros esfuerzos, evitar trabajo duplicado y ayudarte a diseñar el cambio para que sea aceptado con éxito en el proyecto. **Nota**: Agregar un nuevo tema a la documentación o reescribir significativamente un tema, también cuenta como *cambio significativo*. * **Cambios pequeños** pueden ser elaborados y directamente [creados como un _pull request_](#submit-pr). ## Guía para la creación de issues y PRs ### Creación de _issues_ Antes de crear un *issue*, por favor busca en el el *issue tracker*, quizá un *issue* para tu problema ya existe y la discusión puede informarte sobre soluciones alternativas disponibles. Queremos solucionar todos los problemas lo antes posible, pero antes de corregir un bug necesitamos reproducirlo y confirmarlo. Para reproducir errores, requerimos que proporciones una reproducción mínima. Tener un escenario reproducible mínimo nos brinda una gran cantidad de información importante sin tener que ir y venir con preguntas adicionales. Una reproducción mínima nos permite confirmar rápidamente un bug (o señalar un problema de código), así también confirmar que estamos solucionando el problema correcto. Requerimos una reproducción mínima para ahorrar tiempo a los encargados del mantenimiento y en última instancia, poder corregir más bugs. A menudo los desarrolladores encuentran problemas de código mientras preparan una reproducción mínima. Entendemos que a veces puede ser difícil extraer porciones esenciales de código de un código más grande, pero realmente necesitamos aislar el problema antes de poder solucionarlo. Desafortunadamente no podemos investigar/corregir errores sin una reproducción mínima, por lo que si no tenemos tu retroalimentación del bug, vamos a cerrar el *issue* ya que no tiene suficiente información para reproducirse. Puedes presentar nuevos *issues* seleccionando nuestra [plantilla de _issues_](https://github.com/angular/angular/issues/new/choose) y complentando la plantilla. ### Creación de un Pull Requests (PR) Antes de crear tu Pull Request (PR) considera los siguientes lineamientos: 1. Busca en [GitHub](https://github.com/angular/angular/pulls) PRs que estén abiertos o cerrados y que estén relacionados con el que vas a crear. No deseas duplicar los esfuerzos existentes. 2. Asegúrate de que el PR describa el problema que estás solucionando o que documente el diseño de la funcionalidad que deseas agregar. Discutir el diseño por adelantado ayuda a garantizar que estemos listos para aceptar tu trabajo. 3. Por favor firma nuestro [Acuerdo de Licencia de Colaborador (CLA)](#cla) antes de crear PRs. No podemos aceptar el código sin el Acuerdo de Licencia de Colaborador (CLA) firmado. Asegúrate de crear todas las contribuciones de Git con la dirección de correo electrónico asociada con tu firma del Acuerdo de Licencia de Colaborador (CLA). 4. Haz *fork* del repositorio angular/angular. 5. Haz tus cambios en una nueva rama de Git: ```shell git checkout -b my-fix-branch master ``` 6. Crea tu correción, **incluyendo casos de prueba apropiados**. 7. Sigue nuestras [Reglas de código](#rules). 8. Ejecuta todo el conjunto de pruebas de Angular, tal como está descrito en la [documentación del desarrollador][dev-doc], y asegúrate de que todas las pruebas pasen. 9. Crea un commit de tus cambios utilizando un mensaje de commit descriptivo que siga nuestra [convención para el mensaje de los commits](#commit). Es necesario cumplir con estas convenciones porque las notas de las versiones se generan automáticamente a partir de estos mensajes. ```shell git commit -a ``` Nota: la opción de la línea de comandos de Git `-a` automaticamente hará "add" y "rm" a los archivos editados. 10. Haz push de tu rama a GitHub: ```shell git push origin my-fix-branch ``` 11. En GitHub, crea un pull request a `angular:master`. Si solicitamos cambios a través de revisiones de código, sigue las siguientes indicaciones: * Haz los cambios requeridos. * Ejecuta nuevamente el conjunto de pruebas de Angular para asegurar que todas las pruebas aún están pasando. * Haz rebase de tu rama a la rama master y haz push con la opción `-f` a tu repositorio de Github (esto actualizará tu Pull Request): ```shell git rebase master -i git push -f ``` ¡Es todo! ¡Muchas gracias por tu contribución! #### Después del merge de tu pull request Después de que se hizo merge de tu pull request, puedes eliminar de forma segura tu rama y hacer pull de los cambios del repositorio principal (upstream): * Elimina la rama remota en GitHub a través de la interfaz de usuario web de GitHub o en tu línea de comandos de la siguiente manera: ```shell git push origin --delete my-fix-branch ``` * Muévete a la rama master: ```shell git checkout master -f ``` * Elimina tu rama local: ```shell git branch -D my-fix-branch ``` * Actualiza tu rama master con la última versión del fork (upstream): ```shell git pull --ff upstream master ``` ## Reglas del código Para garantizar la coherencia en todo el código fuente, ten en cuenta estas reglas mientras trabajas: * Todas las funcionalidades o solución de bugs **deben ser probadas** por una o más pruebas (pruebas unitarias). * Todos los métodos públicos del API **deben ser documentados**. * Seguimos la [guía de estilo JavaScript de Google][js-style-guide], pero cada línea no debe exceder **100 caracteres**. Un formateador automatizado está disponible, revisar [DEVELOPER.md](docs/DEVELOPER.md#clang-format). ## Formato para el mensaje de los commits *Esta especificación está inspirada y reemplaza el [Formato de mensaje de commits de AngularJS][commit-message-format].* Tenemos reglas muy precisas sobre cómo deben formatearse nuestros mensajes de los commits de Git. Este formato permite tener **un historial de commits más facil de leer**. Cada mensaje de un commit consta del **header**, el **body**, y el **footer**. ```