Guía de Contribución para Changelog.com: Participa en un Proyecto Open Source Activo

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:

  1. Clona el repositorio: ``` git clone https://gitcode.com/gh_mirrors/ch/changelog.com cd changelog.com
  2. 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 enlib/changelog/schema/, incluyen modelos comoEpisode,NewsItem, yPerson.
  • Tareas en Segundo Plano: Se utilizaObanpara 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 directorioassets/, gestionados con Webpack.

Encontrando Oportunidades de Contribución

Tipos de Tareas Amigables para Principiantes

  1. Mejoras en la Documentación: Refinar elREADME, comentarios en el código o documentación de la API.
  2. Casos de Prueba: Añadir pruebas faltantes o mejorar las existentes.
  3. Corrección de Bugs: Solucionar problemas reportados en los issues de GitHub.
  4. Mejoras en la UI: Optimizar la interfaz de usuario o corregir estilos CSS.
  5. 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:

  1. Descripción del Problema: ¿Qué problema soluciona este PR?
  2. Solución Propuesta: ¿Cómo se abordó el problema?
  3. Pruebas Realizadas: ¿Qué pruebas se añadieron o modificaron?
  4. Enlaces Relevantes: Issues o discusiones asociadas.

Proceso de Revisión de Código

  1. Verificaciones Automáticas: GitHub Actions ejecutará la tubería de CI/CD.
  2. Revisión por Mantenedores: El equipo revisará el código.
  3. Solicitudes de Modificación: Realiza cambios basados en el feedback.
  4. 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:

  1. Tuberías CI/CD: Ejecución automática de pruebas y despliegues.
  2. Análisis de Calidad de Código: Uso deCredopara análisis estático.
  3. 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:

  1. Participar en discusiones RFC (Request for Comments).
  2. Proponer mejoras arquitectónicas.
  3. 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!

Etiquetas: Elixir phoenix open-source web-development postgres

Publicado el 7-20 22:01