Changelog.com es una plataforma de noticias y podcasts para desarrolladores, construida con Elixir y el framework Phoenix. Si te interesan Elixir, Phoenix o el desarrollo web moderno, contribuir a este proyecto es una excelente oportunidad para aprender y mejorar tus habilidades.
¿Por qué contribuir a Changelog.com?
Este proyecto no solo es una aplicación completa y lista para producción, sino que también representa una comunidad activa de desarrolladores. Su stack tecnológico moderno incluye:
- Elixir v1.18: Un lenguaje de programación funcional.
- Phoenix v1.8: Un framework web de alto rendimiento.
- PostgreSQL v16: Una base de datos relacional robusta.
- Node.js v22 LTS: Para herramientas de construcción del lado del cliente.
El proyecto cuenta con una suite de pruebas completa, una estructura de código clara y un equipo de mantenedores amigable. Al contribuir, podrás aprender sobre:
- Desarrollo de aplicaciones web complejas con Phoenix.
- Diseño de arquitecturas de bases de datos escalables.
- Implementación de procesamiento asíncrono de tareas con Oban.
- Buenas prácticas de codificación en Elixir.
Configuración Rápida del Entorno de Desarrollo
Changelog.com utilizajustcomo su ejecutor de tareas, simplificando enormemente la configuración. Sigue estos pasos:
- Clona el repositorio: ```
git clone https://gitcode.com/gh_mirrors/ch/changelog.com
cd changelog.com
- Ejecuta el comando para configurar el entorno y arrancar el servidor de desarrollo: ```
just contribute
Este comando se encargará de:
- Instalar todas las dependencias del sistema (PostgreSQL, Elixir, Erlang, Node.js).
- Descargar las dependencias de la aplicación.
- Iniciar la base de datos PostgreSQL.
- Ejecutar la suite de pruebas.
- Levantar el servidor de desarrollo.
Arquitectura General del Proyecto
Antes de empezar, es útil tener una idea de la estructura del proyecto:
Estructura de Módulos Principales
lib/changelog/ # Lógica de negocio principal
├── schema/ # Definiciones de modelos de base de datos
├── policies/ # Políticas de autorización
├── oban_workers/ # Procesadores de tareas en segundo plano
├── kits/ # Utilidades y funciones auxiliares
└── github/ # Integración con la API de GitHub
lib/changelog_web/ # Capa web
├── controllers/ # Controladores
├── templates/ # Plantillas de vistas
├── views/ # Lógica de vistas
└── plugs/ # Middlewares Plug
Componentes Tecnológicos Clave
- Modelos de Base de Datos: Definidos en
lib/changelog/schema/, incluyen modelos comoEpisode,NewsItem, yPerson. - Tareas en Segundo Plano: Se utiliza
Obanpara manejar tareas asíncronas, comoaudio_updater.exyfeed_updater.ex. - Integración de APIs: Soporte para servicios externos como GitHub, Slack y Zulip.
- Recursos Frontend: Ubicados en el directorio
assets/, gestionados con Webpack.
Encontrando Oportunidades de Contribución
Tipos de Tareas Amigables para Principiantes
- Mejoras en la Documentación: Refinar el
README, comentarios en el código o documentación de la API. - Casos de Prueba: Añadir pruebas faltantes o mejorar las existentes.
- Corrección de Bugs: Solucionar problemas reportados en los issues de GitHub.
- Mejoras en la UI: Optimizar la interfaz de usuario o corregir estilos CSS.
- Actualización de Dependencias: Mantener los paquetes actualizados.
Cómo Buscar Tareas
Consulta la sección de issues del proyecto y busca etiquetas como "good first issue" o "help wanted".
Flujo de Trabajo de Desarrollo
Requisito de Firma de Código
Changelog.com requiere la firma del Developer Certificate of Origin (DCO) para todas las contribuciones. Añade el flag--signoffa tus commits:
git commit --signoff -m "Corrige el layout de la página de login"
El mensaje de commit debe incluir la líneaSigned-off-by: <tu nombre=""> <tu email=""></tu></tu>.
Estrategia de Ramas
# Crear una rama para la nueva funcionalidad
git checkout -b fix-login-page-layout
# Realizar cambios y hacer commit
git add .
git commit --signoff -m "Fix: Mejora el layout de la página de login"
# Subir a tu fork
git push origin fix-login-page-layout
Ejecución de Pruebas
Antes de enviar un Pull Request (PR), asegúrate de que todas las pruebas pasen:
# Ejecutar todas las pruebas
just test
# Ejecutar un archivo de prueba específico
mix test test/changelog_web/controllers/episode_controller_test.exs
Estándares de Código y Calidad
Estilo de Código Elixir
- Indentación con 2 espacios.
- El operador de tubería
|>debe comenzar en una nueva línea. - Agrupa las funciones lógicamente.
- Utiliza
@moduledocy@docpara documentar módulos y funciones.
Guía para Escritura de Pruebas
El proyecto utilizaExUnitpara las pruebas, ubicadas en el directoriotest/.
# Ejemplo de estructura de prueba
defmodule ChangelogWeb.EpisodeControllerTest do
use ChangelogWeb.ConnCase
test "GET /episodes/:slug", %{conn: conn} do
episode = insert(:episode) # Asumiendo que insert es una macro de fábrica
conn = get(conn, ~p"/episodes/#{episode.slug}")
assert html_response(conn, 200) =~ episode.title
end
end
Áreas Comunes de Contribución
Mejoras Frontend
El código frontend se encuentra enassets/:
assets/app/components/: Componentes React.assets/app/styles/: Archivos SCSS.assets/app/modules/: Módulos JavaScript.
Funcionalidades Backend
El backend está escrito principalmente en Elixir:
lib/changelog_web/controllers/: Manejo de peticiones HTTP.lib/changelog/schema/: Definición de modelos de datos.lib/changelog/policies/: Implementación de control de acceso.
Migraciones de Base de Datos
Los archivos de migración se encuentran enpriv/repo/migrations/. Puedes crear nuevos archivos para añadir funcionalidades:
defmodule Changelog.Repo.Migrations.AddNewFeature do
use Ecto.Migration
def change do
create table(:new_features) do
add :name, :string
add :description, :text
timestamps()
end
end
end
Mejores Prácticas para Enviar Pull Requests
Plantilla de Descripción del PR
Proporciona una descripción clara que incluya:
- Descripción del Problema: ¿Qué problema soluciona este PR?
- Solución Propuesta: ¿Cómo se abordó el problema?
- Pruebas Realizadas: ¿Qué pruebas se añadieron o modificaron?
- Enlaces Relevantes: Issues o discusiones asociadas.
Proceso de Revisión de Código
- Verificaciones Automáticas: GitHub Actions ejecutará la tubería de CI/CD.
- Revisión por Mantenedores: El equipo revisará el código.
- Solicitudes de Modificación: Realiza cambios basados en el feedback.
- Merge: El PR se fusionará una vez aprobado.
Mantener los PRs Pequeños y Enfocados
- Cada PR debe resolver un único problema.
- Evita mezclar cambios no relacionados en un mismo PR.
- Divide funcionalidades grandes en múltiples PRs si es necesario.
Obtener Ayuda y Soporte
Recursos Comunitarios
- GitHub Discussions: Para discusiones técnicas y preguntas.
- Comunidad de Slack: Para comunicación y colaboración en tiempo real.
- Chat de Zulip: Para discusiones profundas y temáticas.
Recursos de Aprendizaje
- Documentación oficial de Elixir.
- Guía del framework Phoenix.
- El propio código fuente de Changelog.com es el mejor recurso.
Guía de Contribución Avanzada
Entender los Flujos de Trabajo del Proyecto
Changelog.com emplea varios flujos de trabajo automatizados:
- Tuberías CI/CD: Ejecución automática de pruebas y despliegues.
- Análisis de Calidad de Código: Uso de
Credopara análisis estático. - Escaneo de Seguridad de Dependencias: Revisión periódica de vulnerabilidades.
Participar en Decisiones de Arquitectura
A medida que te familiarices con el proyecto, podrás:
- Participar en discusiones RFC (Request for Comments).
- Proponer mejoras arquitectónicas.
- Ayudar a diseñar nuevos módulos funcionales.
Contribuir a Changelog.com es una excelente manera de mejorar tus habilidades técnicas y participar en una aplicación real. ¡Empieza con tareas pequeñas, no dudes en pedir ayuda y, lo más importante, disfruta del proceso de codificación y aprendizaje!