This blog is dedicated to summarise the progress for the first phase of the project “Improve the Development Experience” in Google Summer of Code'2023.
This project focuses on making the process of working and developing with CircuitVerse easier and more efficient. The main goal is to simplify setting up the development environment and working with the code. Additionally, Our aim to enhance the test cases and improve the continuous integration (CI) workflow, which will ultimately reduce the time required for code review by maintainers.
In the first phase, we have covered
This integration enhances the debugging experience for developers by providing a visual debugging capability directly from their integrated development environment (IDE). It allows anyone to conveniently set breakpoints and debug the application from their IDE. This integration also support docker based environment. By changing configuration in IDE , it can easily connect to TCP based debugger and debug the application easily. The documentation has been updated accordingly.
Debugger Preview
Solargraph is a Language Server Protocol (LSP) server that enhances autocompletion for Ruby codebases by providing YARD documentation. To further enhance support for Rails codebases, the solargraph-rails gem has been installed and configured. YARD documentation has been generated for the entire codebase to ensure seamless autocompletion.
This integration also supports Docker-based environments, allowing the application to be run in a Docker container while connecting the IDE/Editor’s solargraph extension to the Solargraph server via a TCP socket. Initially, there was a significant challenge in this setup. The extension used to send the current directory to the LSP server, but the LSP server had a different path inside the Docker container. However, this issue was successfully resolved by creating a symlink inside the container.
For more detailed information, please refer to the blog post available at https://tanmoy.online/week-1-2-circuitversegsoc23
Currently, documentation and support has been added for
Visual Studio Code
Sublime Editor
Neovim
Previously in the project, all javascript compiled in a single one via esbuild and served by sprocket asset pipeline in development and production [mostly same]. As a result, during development on each change, esbuild need to build multiple JS files againg which increase friction during development.
That’s why vite rails is integrated, and simulator assets moved to vite. After this integration, if there are many changes in the javascript, only the specific portion will be updated in the website and hot reload will be performed (if possible), otherwise entire page will reload. Also, instead of packing and serving javascript files, it will load all dependency of javascript files asynchronously in browser.
In production, vite can pack all the javascript files together and serve static javascript files to make it faster.
Vite Rails Hot Reload
RBS [Ruby static typing] enabled static typing mechanism which enables to maintain consistency in codebase and reduce the bugs in code.
We used rbs_rails
gem for rbs as it provides some prebuilt task and cli to generate untyped *.rbs
annotation files from already written codes. With this we used steep
gem to verify type signatures.
We have also included steep check
in our CI to verify the changes in code or rbs annotation before finalizing any PR.
Undercover is a tool that analyzes the report generated by simplecov and generates a code coverage report based on it. The primary objective of this integration is to examine pull requests created by contributors and identify any new functions without code coverage.
To facilitate this process, we have incorporated the undercover_easy gem along with the reviewdog GitHub Actions bot. This enables us to provide feedback on any issues directly within the pull request by posting comments.
The codebase currently has a code coverage of approximately 86%. However, some recently added functions were lacking unit test coverage. As part of this task, We have addressed this gap by writing unit tests specifically for those functions.
To optimize the integration testing process in CircuitVerse, Capybara has been utilized for comprehensive automated testing. During the analysis, it was identified that certain workflows, including Profile management, Group management, Assignment management, and Project management, lacked integration testing. As part of this task, integration tests for these missing workflows have been incorporated to ensure their proper functioning and improve the overall quality of the application.
The work of phase 1 was focused on integration various development tools to improve quality of code and development experience.
In the second phase, we will be focusing on improvement of development environment including fine-tuning docker development setup and integration of available remote development platform. These improvements will undoubtedly contribute to an even more productive and seamless development process.