Eurytus coding automates code grading for algorithmic challenges. Users, including educators, can create challenges shared publicly or through private links. The platform supports test-based evaluation, code structure checking, and design pattern detection.
So far the platform supports Java and JavaScript with the main focus being on Java since it allows more complex tests such as structure and design pattern detection.
- Installation
- Usage
- Backend Services
- Frontend
- Messaging Service
- NPM Package
- Testing
- Continuous Integration/Continuous Deployment (CI/CD)
- Contribution Guidelines
- License
To run the application locally, follow these steps:
Install Node, Docker and Kubernetes.
Clone the project
git clone https://github.com/Pervolarakis/Eurytus-Coding.gitGo to the project directory
cd Eurytus-CodingInstall dependencies for every service.
cd auth
npm install
cd ..
cd challenges
npm install
cd ..
cd executeChallenges
npm install
cd ..
cd moderateChallenges
npm install
cd ..
cd history
npm installInstall Ingress nginx on your kubernetes cluster.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yamlCreate a kubernetes secret for your JWT Key secret
kubectl create secret generic jwt-key --from-literal=JWT_KEY=abcFinally, in order to start the services you can either use:
kubectl apply -f file-name.yamlFor every yaml file in the infra/k8s directory.
However, for development purposes the use of Skaffold is recommended by using
skaffold devIn the parent directory.
Once the application is up and running, you can perform the following actions:
- Create algorithmic challenges and set their visibility (public/private).
- Solve challenges
- Submit code for grading and receive feedback on test results, code structure, and design pattern usage.
The application is built using a microservices architecture with five different backend services, each serving specific purposes:
- Challenges Service: This service is responsible for storing and managing all the challenges. It allows users to create and manage challenges, set their visibility (public/private), and specify the test cases for grading.
- Execute Challenges Service: This service handles the execution of user-submitted code and performs grading based on the test cases defined by the challenge creators. It ensures secure and isolated execution of code submissions.
- History Service: The History Service stores and manages the grades and submissions history for each challenge. It provides data in formats suitable for visualization and analytics.
- Moderation Service: The Moderation Service is responsible for the moderation of public challenges. Administrators can approve or decline requests related to public challenges for quality assurance. These requests include challenge creation, modifications to existing challenges, and more.
- Authentication Service: The Authentication Service handles user authentication and authorization. It ensures that only authorized users can access certain features, such as creating challenges, submitting solutions, and moderating public challenges.
Each backend service operates independently and communicates with each other through the messaging service, facilitating a scalable and maintainable microservices architecture. This design allows for efficient development, testing, and deployment of each service, enhancing the overall performance and flexibility of the application.
The frontend of the application is built using React.js and styled with Tailwind CSS. It communicates with the backend services to manage challenges, user submissions and grading.
The messaging service facilitates communication between the backend services in the microservices architecture.
We have developed an NPM package, eurytus/common, to abstract common functionality across the microservices. The package can be found here.
A Test-Driven Development (TDD) approach was used during development. Each endpoint has associated tests to ensure functionality and stability. To run the tests, use the following command on each backend service folder:
npm testThe project uses GitHub Actions for CI/CD. On every push to the main branch, the application is automatically tested, built, and deployed to the production environment.
Contributions are always welcome!
If you have any suggestions or something you want to work on please open an issue and wait to get assigned!
You can help by:
- Adding new features.
- Fixing bugs.
- Cleaning up the code.
- Optimizing project performance.
This project is licensed under the MIT License. Feel free to use, modify, and distribute the code according to the terms of this license.