Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
165 changes: 48 additions & 117 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,144 +1,75 @@
# Guía de Contribución para `nerve-community`

¡Qué emoción que quieras contribuir a este proyecto! No importa si es la primera vez que tocas código o si ya tienes años de experiencia, aquí eres bienvenido/a.
¡Qué emoción que quieras contribuir a este proyecto!

El objetivo principal de este repositorio es **aprender**. Nadie nace sabiendo hacer Pull Requests (PRs), así que no tengas miedo de equivocarte. Sigue estos pasos y, si te trabas, ¡pregunta sin pena!

## Antes de empezar
Asegúrate de tener lo siguiente:
- Una cuenta en **GitHub**.
- **Git** instalado en tu computadora.
- **Python 3.10** o superior instalado.

---

## 🛠️ Paso 1: Haz un Fork
Un *fork* es hacer una copia exacta de este proyecto y ponerla en tu propia cuenta de GitHub. Así puedes experimentar y romper cosas en tu copia sin afectar el repositorio original.
Para hacerlo, ve a la página principal de este repositorio y dale clic al botón **Fork** que está arriba a la derecha.

---

## 💻 Paso 2: Clona tu fork en tu computadora
Abre tu terminal (línea de comandos) y escribe el siguiente comando, cambiando `TU-USUARIO` por tu nombre de usuario en GitHub:

```bash
git clone https://github.com/TU-USUARIO/nerve-community.git
cd nerve-community
```
El objetivo principal de este repositorio es **aprender** y mantener un currículum de alta calidad para la comunidad. Sigue estos pasos y reglas para asegurarte de que tu contribución sea aceptada rápidamente.

---

## Paso 3: Crea una rama nueva
**Nunca** trabajes directamente en la rama `main`. Es una buena práctica crear una "rama" (branch) separada para cada tarea o reto que vayas a resolver.
## 🚫 Regla de Oro: La estructura es sagrada

```bash
git checkout -b solucion-reto-01
```
La estructura de carpetas dentro de `python/` (`Modulo-01`, `Modulo-02`, etc.) es utilizada por sistemas automatizados.
- **NO cambies el nombre** de ninguna carpeta `Modulo-XX`.
- **NO cambies el nombre** de los archivos internos (`README.md`, `teoria.md`, `ejemplo.py`, `reto.md`, `test_main.py`).
- **NO agregues nuevos archivos** dentro de las carpetas de los niveles, a menos que un mantenedor lo apruebe.

---

## Paso 4: Elige un reto
Ve a la pestaña de **Issues** en el repositorio original.
Busca los issues que tengan la etiqueta `good-first-issue` o `disponible`.
Si encuentras uno que te guste, deja un comentario que diga: *"¡Yo lo tomo!"* o *"Me gustaría intentar resolver esto"*. Así, evitamos que dos personas hagan el mismo reto al mismo tiempo.
## 💡 ¿Qué y cómo puedes contribuir?

---
Puedes ayudarnos a mejorar el contenido existente o crear nuevos retos socráticos.

## 📦 Paso 5: Instala dependencias y prueba que todo funcione
Crea un entorno virtual e instala lo necesario (si tu reto lo requiere):
### 1. Mejorar el contenido de aprendizaje
Puedes editar `teoria.md`, `ejemplo.py` o `README.md` de cualquier nivel si notas que:
- Una explicación es confusa o tiene faltas de ortografía.
- El código de ejemplo podría ser más claro o tener mejores comentarios.
- El reto está mal redactado.

```bash
# En Windows:
python -m venv env
.\env\Scripts\activate
### 2. Mejorar los tests automáticos
Si detectas que un `test_main.py` de algún reto es demasiado permisivo (deja pasar código malo) o es incorrecto (falla con código bueno), puedes mejorarlo. Asegúrate de probarlo bien antes de enviar el PR.

# En Mac / Linux:
python3 -m venv env
source env/bin/activate
### 3. Crear nuevos Retos Socráticos
La carpeta `retos/` contiene retos abiertos (sin instrucciones paso a paso) para que los alumnos apliquen lo aprendido. Puedes crear uno nuevo en la carpeta correspondiente a su dificultad (`retos/python/MXX-MYY/nombre-del-reto/reto.md`).

# Instalar Nerve (ejemplo):
pip install alenia-nerve
```

---
**Plantilla para un nuevo reto socrático (`reto.md`):**

## Paso 6: Escribe tu código
Entra a la carpeta correspondiente a tu reto (por ejemplo `retos/nerve/01-chat-terminal/`).
Dentro de esa carpeta encontrarás el archivo `README.md` con las instrucciones del reto.
```markdown
# [Nombre del reto]

Para guardar tu solución, debes crear una carpeta dentro de `soluciones/` en la raíz del repositorio siguiendo la convención `TuUsuario-Lenguaje`. Por ejemplo:
- `soluciones/Tacos-python/`
- `soluciones/Maria-rust/`
- `soluciones/Juan-go/`
- `soluciones/Ana-js/`
> **Nivel**: Módulos [X]–[Y] completados
> **Tiempo estimado**: [N] horas
> **Lenguaje**: Python

Dentro de tu carpeta personal, puedes crear los archivos necesarios para resolver el reto. ¡Diviértete programando!
## Tu misión
[Descripción en 2-3 líneas de qué debe hacer el programa. Sin decir cómo.]

### 🛠️ Instrucciones por Lenguaje
## Lo que debe hacer tu programa
- [Comportamiento observable 1]
- [Comportamiento observable 2]

**Python:**
- Se recomienda crear un entorno virtual (`python -m venv env`).
- Si instalas dependencias, recuerda exportarlas en un `requirements.txt`.
## Restricciones (respétalas o el reto no cuenta)
- **Solo puedes usar** conceptos de los módulos [X] al [Y]
- **No puedes usar**: [librerías prohibidas]
- **Obligatorio**: [requisito técnico concreto]
- El programa debe correr con `python reto.py`

**Rust:**
- Usa `cargo new tu-proyecto` para crear tu proyecto dentro de tu carpeta de solución.
- Verifica tu código con `cargo clippy` y formatéalo con `cargo fmt`.

**Go:**
- Inicializa tu módulo con `go mod init <nombre>`.
- Formatea tu código usando `go fmt ./...`.

**JavaScript (Node.js):**
- Inicializa tu proyecto con `npm init -y`.
- Es buena práctica usar `eslint` o `prettier` para mantener el código limpio.

---

## Paso 7: Guarda tus cambios (Commit)
Una vez que termines y pruebes que funciona, debes guardar tus cambios en git. Asegúrate de escribir un mensaje claro de lo que hiciste.

```bash
git add .
git commit -m "Agrega solución al reto 01: chat-terminal"
## Criterio de éxito
Tu solución es válida si:
1. [Verificación concreta 1]
2. [Verificación concreta 2]
```

---

## Paso 8: Sube tu rama a tu fork
Ahora envía los cambios guardados desde tu computadora a tu repositorio en GitHub:

```bash
git push origin solucion-reto-01
```

---

## Paso 9: Abre el Pull Request
Ve a tu repositorio fork en GitHub. Verás un botón verde gigante que dice **Compare & pull request**. ¡Dale clic!
- Llena la plantilla del PR.
- Menciona qué número de Issue estás resolviendo (ejemplo: `Closes #1`).
- Añade una captura de pantalla si tu código hace algo visual.

---
## 🛠️ El proceso de contribución (Fork + PR)

## ⏳ Paso 10: Espera revisión
Los mantenedores del proyecto revisaremos tu PR.
Es **súper normal** que te pidamos hacer algún cambio o corrección. No te lo tomes a mal, ¡no es un rechazo! Es simplemente la mejor forma de darte *feedback* y aprender juntos. Haz los cambios en tu computadora, haz otro `commit`, haz `push` y el PR se actualizará solo.

---

## ❓ Preguntas frecuentes

- **¿Y si ya alguien más resolvió el reto que quería?**
¡No pasa nada! A veces aceptamos múltiples soluciones si tienen enfoques distintos, o simplemente puedes elegir otro reto. Pregúntanos en el Issue si tienes dudas.

- **¿Y si mi código no es perfecto?**
¡Mejor! El código perfecto no existe. Lo importante es que funcione, que intentes aprender algo nuevo y que pierdas el miedo a compartirlo.

- **¿Puedo proponer un reto nuevo?**
¡Sí! Ve a los Issues, elige "Propuesta de nuevo reto" y cuéntanos tu idea.

---
1. **Haz un Fork**: Crea una copia exacta de este proyecto en tu propia cuenta de GitHub dándole al botón "Fork".
2. **Clona**: Descarga tu copia a tu computadora (`git clone https://github.com/TU-USUARIO/nerve-community.git`).
3. **Crea una rama (branch)**: Nunca trabajes en `main`. Crea una rama descriptiva (`git checkout -b mejora-teoria-mod1`).
4. **Haz el cambio**: Modifica los archivos siguiendo las reglas mencionadas arriba.
5. **Commit y Push**: Guarda tus cambios (`git commit -m "feat: mejora explicación de diccionarios en Módulo 04"`) y súbelos a tu fork (`git push origin mejora-teoria-mod1`).
6. **Pull Request (PR)**: Ve a GitHub y abre un Pull Request hacia el repositorio original.
- En la descripción de tu PR, explica **qué** cambiaste y **por qué**.
- Marca la casilla correspondiente en nuestra plantilla de PR.

### ¡Los errores son bienvenidos!
Si algo sale mal con un comando de Git o con tu código, dínoslo. El propósito de `nerve-community` es crecer en comunidad. ¡Mucho éxito con tu primer PR!
¡Y listo! Los mantenedores revisaremos tu PR y te daremos feedback. ¡Gracias por ayudar a la comunidad!
13 changes: 13 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,19 @@ body:
placeholder: "1. Abrí la carpeta del reto...\n2. Ejecuté el comando..."
validations:
required: true
- type: dropdown
id: lenguaje
attributes:
label: "Lenguaje afectado (si aplica)"
options:
- No aplica / General
- Python
- Rust
- Go
- Java
- JavaScript / TypeScript
validations:
required: false
- type: textarea
id: entorno
attributes:
Expand Down
13 changes: 13 additions & 0 deletions .github/ISSUE_TEMPLATE/propuesta_nuevo_reto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,19 @@ body:
placeholder: "- Manejo de JSON\n- Peticiones HTTP..."
validations:
required: true
- type: dropdown
id: lenguaje
attributes:
label: "¿Para qué lenguaje(s) propones este reto?"
options:
- Multilenguaje (Aplica para todos)
- Python
- Rust
- Go
- Java
- JavaScript / TypeScript
validations:
required: true
- type: dropdown
id: dificultad
attributes:
Expand Down
52 changes: 35 additions & 17 deletions .github/ISSUE_TEMPLATE/reto.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,44 @@
name: Solucionar un Reto
description: Sube tu solución a uno de los retos de código disponibles.
title: "Reto: [NOMBRE DEL RETO]"
labels: ["en-progreso"]
name: Compartir Solución de un Reto
description: Comparte el enlace de tu repositorio (creado con nerve--template) con tu solución a un reto.
title: "Solución: [NOMBRE DEL RETO]"
labels: ["solución-reto"]
body:
- type: markdown
attributes:
value: "¡Gracias por animarte a resolver este reto! Por favor llena esta plantilla para que podamos revisar tu propuesta fácilmente."
value: "¡Felicidades por resolver este reto! Llena esta plantilla para compartir tu repositorio generado a partir de `nerve--template`. Así podremos revisar tu código y darte feedback."
- type: dropdown
id: nivel
id: lenguaje
attributes:
label: "¿De qué nivel es el reto que resolviste?"
label: "¿En qué lenguaje resolviste el reto?"
options:
- Nivel 1 - Principiante
- Nivel 2 - Intermedio
- Nivel 3 - Avanzado
- Python
- Rust
- Go
- Java
- JavaScript / TypeScript
validations:
required: true
- type: dropdown
id: tipo
attributes:
label: "¿Qué tipo de reto es?"
options:
- Reto de Módulo (Evaluado por GitHub Actions)
- Reto Socrático
validations:
required: true
- type: input
id: modulo_nivel
attributes:
label: "Módulo y Nivel exactos"
placeholder: "Ejemplo: python/Modulo-01-Fundamentos/01-hola-mundo"
validations:
required: true
- type: input
id: nombre_reto
id: repo_url
attributes:
label: "Nombre exacto del reto"
placeholder: "Ejemplo: 01-chat-terminal"
label: "Enlace a tu repositorio público"
placeholder: "https://github.com/tu-usuario/tu-repo"
validations:
required: true
- type: textarea
Expand All @@ -36,13 +54,13 @@ body:
attributes:
label: "Lista de verificación"
options:
- label: "Probé mi código localmente y funciona."
- label: "Usé el repositorio `nerve--template` para crear mi proyecto."
required: true
- label: "Agregué mi código en la carpeta correspondiente al reto."
- label: "Los tests automatizados (si aplican) pasan exitosamente en mi GitHub Actions."
required: true
- label: "Comenté mi código para que otras personas puedan aprender leyéndolo."
- label: "Comenté mi código para explicar mis decisiones de diseño."
required: false
- label: "Creo que esta solución está lo suficientemente pulida como para considerarse para 'graduarse' a zenith-nerve-tools."
- label: "Creo que esta solución está tan pulida que podría integrarse como herramienta en `zenith-nerve-tools`."
required: false
- type: markdown
attributes:
Expand Down
44 changes: 32 additions & 12 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,35 @@
## 📌 ¿Qué reto resuelve este PR?
(Ej: Reto 01 - chat-terminal. Enlaza el issue con "Closes #NUMERO")
<!--
ATENCION: Lee esto antes de continuar.

## ✅ Checklist
- [ ] Mi código está dentro de la carpeta correcta del reto
- [ ] Agregué un README corto explicando cómo correr mi solución
- [ ] Probé que mi código funciona antes de subirlo
- [ ] Es mi primera vez contribuyendo a un proyecto open source (opcional, ¡para celebrarlo!)
- [ ] Creo que esta solución está lo suficientemente pulida como para considerarse para "graduarse" a zenith-nerve-tools (opcional, no pasa nada si no marcas esto)
Este repositorio (nerve-community) es el material del curso, no el lugar donde
los alumnos entregan su trabajo.

## Capturas o gif (opcional pero recomendado)
(Arrastra aquí una imagen o gif de tu solución funcionando)
Si eres alumno: NO abras un PR aqui. Tu trabajo va en tu repositorio privado
generado desde el template oficial. Si aun no tienes acceso al template,
pide el enlace en el Discord de la comunidad.

## 💬 Notas para quien revise
(¿Algo que quieras comentar, dudas, o partes en las que no estás seguro/a?)
Si eres contribuidor y quieres mejorar el material del curso, continua.
-->

## Tipo de contribucion

- [ ] Mejora de contenido (`teoria.md`, `ejemplo.py`, `README.md` de un modulo)
- [ ] Correccion en `test_main.py`
- [ ] Nuevo reto socrático en `retos/`
- [ ] Correccion de bug general o documentacion
- [ ] Otro

## Descripcion de los cambios

<!-- Explica que cambiaste y por que. Si resuelve un Issue, incluye "Closes #NUMERO" -->

## Checklist

- [ ] He leido la [Guia de Contribucion](.github/CONTRIBUTING.md).
- [ ] No modifique la estructura de carpetas ni los nombres de archivos dentro de `python/Modulo-XX/`.
- [ ] Si modifique un `test_main.py`, lo probe localmente para verificar que es correcto.
- [ ] Si es un reto socratico nuevo, use la plantilla correcta y lo ubique en la carpeta de dificultad adecuada.

## Notas para quien revise

<!-- Comentarios, dudas, o partes en las que no estas seguro -->
Loading
Loading