Saltar a contenido

Enlaces útiles

omegaUp no es un programa único: son un puñado de servicios que se comunican entre sí a través de HTTP, distribuido en varios repositorios. Si alguna vez has visto omegaup/omegaup has visto la interfaz PHP y la API, pero no el evaluador Go que realmente compila y ejecuta los envíos, ni el git Servidor que almacena problemas como repositorios controlados por versión. Esta página es el mapa: cual repositorio contiene qué, por dónde empezar si desea contribuir y dónde está la API siempre actualizada vidas de referencia. Cuando un enlace apunta a un código, apunta al repositorio que posee ese código, no el monorepo, por lo que aterrizas donde realmente se debe realizar el cambio.

Los repositorios

Hay tres que importan para casi todo, además de algunos satélites. La razón por la que existe división es que las piezas están escritas en diferentes idiomas y evolucionan diferentes relojes: la interfaz es PHP + Vue y se envía en cada fusión a main, mientras que el Grader es Go y se envía como un binario versionado al que la interfaz llama a través de la red. mantener ese límite en mente: es por eso que "arreglar la cola" y "arreglar el formulario de envío" viven en diferentes repositorios.

omegaup/omegaup: la interfaz y la API

github.com/omegaup/omegaup es el grande y el uno en el que pasarás la mayor parte de tu tiempo. Es el backend de PHP 8.1 (php-fpm detrás de nginx, el código \OmegaUp\... con espacio de nombres en frontend/server/src), los componentes de archivo único de Vue 2.7 + TypeScript en frontend/www/js/omegaup/components, y toda la API REST pública. Cada controlador vive en frontend/server/src/Controllers/, y cada método apiXxx en un controlador es exactamente un punto final, por lo que Run.php's apiCreate es /api/run/create/. Lo que este repositorio no contiene es el calificador, el runner o sandbox: cuando es necesario juzgar un envío, la clase PHP \OmegaUp\Grader simplemente hace una llamada curl a OMEGAUP_GRADER_URL (predeterminado https://localhost:21680) y deja el servicio Go hace el verdadero trabajo.

omegaup/quark — calificador, corredor, locutor

github.com/omegaup/quark es el backend propiamente dicho, escrito en Go, y su propio archivo README lo describe en tres partes:

  • calificador: gestiona la cola de ejecución/envío. En particular, no ejecuta nada por sí mismo; simplemente mantiene la cola y las manos trabajan. Cuando PUBLICAS un envío, esto es lo que \OmegaUp\Grader está hablando.
  • corredor: solicita al evaluador nuevos envíos, luego compila y ejecuta el código dentro del omegajail sandbox con cada entrada, compara el salida a la respuesta esperada (ejecutando un validador si el problema lo necesita) y asigna un puntuación por caso. Básicamente es una interfaz bonita y distribuida para el sandbox.
  • locutor: envía notificaciones en vivo a todos los participantes de un concurso o curso: las carreras se obtienen calificados, cambios en los marcadores, nuevas aclaraciones, etc.

Si está buscando un error sobre por qué un veredicto fue incorrecto o por qué la cola se detuvo, este es el repositorio, no el de PHP. La zona de pruebas en sí es un repositorio más caído: omegaup/omegajail: porque se aislan los que no son de confianza El código concursante es un problema lo suficientemente difícil como para merecer su propio proyecto.

omegaup/gitserver — problemas como repositorios de git

github.com/omegaup/gitserver es el servicio Go que almacena cada problema como su propio repositorio git: declaraciones, casos de prueba, validadores, configuraciones, todo versionado. Es por eso que editar un problema produce un historial de confirmaciones real que puedes revertir: la "base de datos" para el contenido del problema es git, no MySQL. La interfaz habla con él cada vez que un Se crea o edita el problema y el corredor lee los casos de prueba al calificarlo.

Los satélites

Estos aparecen con menos frecuencia, pero vale la pena saber que existen:

Repositorio Para qué sirve
omegaup/libinteractive Genera el texto estándar que permite que un problema sea interactivo (el código del concursante y un proceso de juez intercambian mensajes). Escrito en el artículo de la revista IOI de 2015 a continuación.
omegaup/omegajail La caja de arena a la que se dirige el corredor. Aísla los envíos que no son de confianza en el nivel de llamada al sistema.
omegaup/implementar Scripts de implementación y configuración de producción.
omegaup/kit de herramientas para solucionar problemas Herramientas para solucionar problemas de creación (consulte la wiki para conocer el punto de entrada actual).

Dónde empezar a contribuir

El flujo de trabajo se encuentra en el repositorio principal y la única fuente de verdad es CONTRIBUTING.md — léelo antes de su primer RP, porque las reglas de asignación se aplican mediante la automatización, no por la buena voluntad. Algunas cosas que vale la pena saber desde el principio para no sorprenderse:

  • Reclamar un problema con /assign. Puedes mantener hasta 2 asignaciones activas a la vez, y /assign solo funciona cuando alguien con asociación de repositorio abrió el problema OWNER, MEMBER o COLLABORATOR: ese filtro existe, por lo que el robot de asignación no entrega problemas que presentaron usuarios aleatorios. Si es la primera vez que contribuye, no puede autoasignarse hasta que tenga al menos un PR fusionado aquí; Hasta entonces, comente y un mantenedor ayudará.
  • Configure el entorno antes que nada. El tutorial completo de Docker: brindando el contenedores, ejecutar las pruebas, sembrar usuarios de prueba y solucionar problemas para cuando el contenedor no arranca: vive en frontend/www/docs/Development-Environment-Setup-Process.md, o en la guía Configuración de desarrollo de este sitio.
  • Siga las pautas de codificación. No son pedantería de estilo en sí misma; la meta-regla todo el código base que se ejecuta es explica por qué, no qué. Ver Pautas de codificación aquí, o las canónicas versión wiki.

Para el día a día, estas son las páginas a las que los mantenedores realmente dirigen a los nuevos contribuyentes:

Guía Qué cubre
Contribuyendo El bucle fork → branch → PR y por qué nunca te comprometes con main.
Obteniendo ayuda Dónde preguntar cuando estás atascado (y la wiki "Cómo obtener ayuda").
Comandos útiles Las invocaciones exactas de docker-compose, lint y prueba que ejecutará todos los días.
Prueba PHPUnit, Jest y Cypress: cómo ejecutarlos y cómo escribir uno.
Guía de migración La migración en vivo de Vue 2.7 → Vue 3 (la antigua Smarty → Vue está terminada).
Inicio de Wiki La wiki original de notas de trabajo, sigue siendo la fuente más profunda para casos extremos de configuración.

Y las superficies de GitHub en las que vivirás:

Recurso Enlace
Rastreador de problemas omegaup/omegaup/problemas
Buenos primeros números Etiqueta Good first issue
Abrir solicitudes de extracción omegaup/omegaup/tira
Código de conducta CODE_OF_CONDUCT.md
Discord (canal principal) discord.gg/gMEMX7Mrwe

Un puntero a la API

Todo lo que hace la interfaz web, lo hace llamando a la misma API REST pública a la que puedes llamar usted mismo: cada actualización del marcador, cada envío, cada inicio de sesión es solo una solicitud HTTP para /api/.... Las reglas son las mismas para todos ellos: HTTP simple GET o POST, JSON back, HTTPS solo (una llamada HTTP simple obtiene una redirección 301, no un éxito silencioso, porque el rastreo el tráfico del concurso es un verdadero vector de trampa), cada URL bajo https://omegaup.com/api/, y autenticación a través de un token que obtiene de user/login y lo envía de vuelta en una cookie llamada ouat. Una consecuencia que vale la pena recordar: solo puedes tener una sesión activa a la vez, por lo que Iniciar sesión mediante programación cancelará la sesión de su navegador y viceversa.

Lea esto primero

Las reglas transversales completas: transporte, token de autenticación ouat y Sobre de respuesta status/errorcode/errorname/error: están escritos en el Página Referencia API, con un ejemplo trabajado de curl.

Lo único que deliberadamente no guardamos aquí es una lista mantenida manualmente de puntos finales, porque se pudriría en el momento en que alguien editara un controlador. El autoritario y siempre actual la superficie es generada desde la fuente por frontend/server/cmd/APITool.php - la misma herramienta que emite el cliente frontend escrito api.ts y api_types.ts. Para ver exactamente qué acepta y devuelve una llamada, lea el método apiXxx en su controlador en frontend/server/src/Controllers/ en lugar de confiar en cualquier mesa.

Sitios oficiales

Recurso URL Qué es
Plataforma omegaup.com El juez en vivo y el sistema de concurso.
Organización omegaup.org La organización sin fines de lucro, nuestra misión e impacto.
Blog blog.omegaup.com Anuncios, tutoriales, notas de la versión.
Estado estado.omegaup.com Estado del sistema en vivo e historial de incidentes.

Antecedentes académicosDos artículos de la revista IOI son los antecedentes autorizados de por qué el sistema está construido de la forma en que

Vale la pena leerlo si desea conocer la intención del diseño detrás de la arquitectura, no solo la actual. código:

El lugar más amplio es el IOI Journal en ioinformatics.org, y omegaUp surgió de la Olimpiada Mexicana de Informática (OMI).

Ver también


¿Falta un enlace?

Si conoce un recurso que pertenece aquí, abra un PR con los documentos.