Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GSOC 2025 Project Proposal #1085

Open
hxrshxz opened this issue Jan 22, 2025 · 3 comments
Open

GSOC 2025 Project Proposal #1085

hxrshxz opened this issue Jan 22, 2025 · 3 comments
Labels
💡 Proposal (RFC 1) RFC Stage 1 (See CONTRIBUTING.md)

Comments

@hxrshxz
Copy link

hxrshxz commented Jan 22, 2025

Project Title: Dockerizing the AsyncAPI Specification Repository for Simplified Development and Deployment

1. What is the issue your project idea addresses?

Setting up a development environment for the AsyncAPI Specification repository can be a bit tricky for new contributors. Issues like dependency conflicts, version mismatches, and the challenge of ensuring a consistent environment across different machines can slow down the onboarding process. Furthermore, the absence of a containerized setup limits the ability to integrate seamlessly into CI/CD pipelines, and it can make automated testing less efficient. By Dockerizing the repository, these challenges can be addressed, streamlining the development process and improving the overall experience for contributors.

2. What should the contributor build or improve?

Here’s what I plan to work on:

Dockerizing the repo: I’ll create a Dockerfile to containerize the AsyncAPI Specification repository, making sure all the required dependencies for development and testing are pre-configured.
Service orchestration: If necessary, I’ll develop a docker-compose.yml file to help orchestrate multiple components (such as parsers, validators, or related services), ensuring everything runs smoothly together.
CI/CD integration: I will integrate the Docker setup into existing CI/CD pipelines to enable reliable and reproducible builds and tests, making sure everything works seamlessly.
Optimized Docker images: The Docker images will be lightweight and secure, with a focus on multi-stage builds to optimize both development and production environments.
Comprehensive documentation: I’ll write clear documentation explaining how to use the Docker setup for local development, running tests, and incorporating it into CI/CD workflows.

3. How will this benefit AsyncAPI and its community?

For contributors: By providing a containerized setup, I can drastically reduce setup time and eliminate the "works on my machine" issue. New developers will be able to start contributing more quickly and with fewer environment-related headaches.
For maintainers: A standardized development environment means that all contributors will be using the same tools and versions, ensuring fewer inconsistencies across different setups.
For the broader community: Dockerizing AsyncAPI tools will make it easier to distribute them, encouraging more people to adopt and use the tools. It also streamlines the process of deploying these tools in different environments.
For CI/CD workflows: A containerized setup will ensure automated builds and tests are performed in consistent environments, making the whole process more reliable and reducing time spent debugging issues related to local configurations.

4. Is the project suitable for a beginner, intermediate, or advanced contributor?

This project is perfect for intermediate contributors who have experience with Docker, understand GitHub workflows, and are familiar with CI/CD concepts. While Docker is an accessible technology, integrating it with CI/CD pipelines and ensuring everything works across different services requires a bit more experience.

5. What is the estimate of hours for project completion?

I estimate that the project will require about 180-240 hours in total, broken down as follows:

Research and Planning (20-30 hours): I’ll take time to get familiar with the repository, understand its structure, dependencies, and the specific needs of the community.
Dockerfile Development (40-50 hours): Writing the Dockerfile and testing it to make sure it includes all the necessary dependencies and works smoothly in different environments.
Service Orchestration (Optional, 30-40 hours): If the repository requires multiple services to run (e.g., a parser, database, etc.), I’ll develop a docker-compose.yml file to make service orchestration easier.
CI/CD Integration (40-50 hours): Integrating the Docker setup into existing CI/CD pipelines, ensuring the Dockerized environment works well with automated tests and builds.
Documentation and Feedback (30-40 hours): Writing detailed documentation, making sure it’s clear, and incorporating any feedback from mentors or the community.
Testing and Optimization (20-30 hours): Ensuring the Docker image is as lightweight, secure, and optimized as possible while maintaining full functionality.

@hxrshxz hxrshxz added the 💡 Proposal (RFC 1) RFC Stage 1 (See CONTRIBUTING.md) label Jan 22, 2025
Copy link

Welcome to AsyncAPI. Thanks a lot for reporting your first issue. Please check out our contributors guide and the instructions about a basic recommended setup useful for opening a pull request.
Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out this issue.

@ramzan3019
Copy link

Alternative Solutions to Addressing the Problems

Problem 1: Complex Development Environment Setup

Issues: Dependency conflicts, version mismatches, and environment inconsistencies make it hard for new contributors to set up the development environment.

Solution:

Use containerized development environments with tools like Dev Containers (VS Code) or GitHub Codespaces.

  • Create a .devcontainer.json configuration file specifying the required tools, dependencies, and environment settings.
  • Contributors can use predefined environments within VS Code or GitHub Codespaces, reducing setup time and ensuring consistency.

Problem 2: Lack of Standardized Testing Environment

Issues: Variability in contributors' local setups makes testing unreliable.

Solution:

Implement a dedicated virtual machine-based setup using tools like Vagrant.

  • Use Vagrant to define a virtualized development environment with consistent configurations for all contributors.
  • Provide scripts to automate setup, ensuring everyone tests on identical environments.

Problem 3: Inefficiency in Managing Multiple Components

Issues: Running multiple related services (e.g., parsers, validators) manually can be tedious and error-prone.

Solution:

Use a Monorepo Toolchain to handle dependencies and services.

  • Adopt tools like Nx or Lerna to manage interdependencies and run services effectively.
  • These tools allow efficient builds and testing by orchestrating services directly from the repository.

Problem 4: Integration Challenges in CI/CD Pipelines

Issues: Absence of a standardized environment complicates automated builds and tests.

Solution:

Use Ephemeral CI Environments provided by platforms like GitHub Actions or CircleCI.

  • Configure ephemeral environments to spin up pre-configured virtual machines or containers for each build/test cycle.
  • Add caching mechanisms for dependencies to optimize performance.

Problem 5: Large and Inefficient Development Dependencies

Issues: Heavy development environments can be slow and resource-intensive.

Solution:

Switch to Lean Dependency Management techniques.

  • Audit the repository to remove unnecessary dependencies.
  • Use dependency management tools like pnpm (for Node.js) or poetry (for Python) to keep the project lightweight and modular.

Problem 6: Lack of Contributor-Friendly Documentation

Issues: New contributors may struggle to understand and use the existing setup.

Solution:

Adopt a Documentation-Driven Development (DDD) approach.

  • Use tools like Docusaurus or MkDocs to create a contributor-friendly documentation site.
  • Include interactive tutorials, diagrams, and examples to explain setup and usage.

Problem 7: Distribution and Deployment Challenges

Issues: Lack of containerization makes deploying AsyncAPI tools cumbersome.

Solution:

Adopt Package Bundling and Distribution Platforms.

  • Distribute prebuilt packages via platforms like npm, pip, or homebrew for easy installation.
  • Use version managers (e.g., nvm, pyenv) to support multiple versions seamlessly.

@hxrshxz
Copy link
Author

hxrshxz commented Jan 22, 2025

You see the how dockerizing the project addresses so many issues as you mentioned several steps in each of your solution . That would be time consumint and confusing . that can be simplified by dockerizing the application . That's the aim

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
💡 Proposal (RFC 1) RFC Stage 1 (See CONTRIBUTING.md)
Projects
None yet
Development

No branches or pull requests

2 participants