The following report summarizes the work done during Google Summer of Code 2025, along with the results, scope for improvements, and future work. This also serves as the final project report with all the contributions.
- Name: Ahmed Kashkoush
- Email: ahmedkashkoush464@gmail.com
- GitLab Username: ahmad-kashkoush
- LinkedIn: https://www.linkedin.com/in/ahmad-kashkoush/
- Project Title: Add Additional Source Control Operations to the Web IDE
- Project Link: https://gitlab.com/gitlab-org/gitlab-web-ide
- Project Tracker: https://gitlab.com/groups/gitlab-org/-/epics/11142
- Proposal Link: https://docs.google.com/document/d/1x9h_joqBWAJe_Pkb28WbgDxcSdRpwZmHEGjRVkgN2IA/edit?usp=sharing
I've contributed to open source, including Jenkins, stdlib, and the Accord Project, and have been amazed by GitLab and its community.
I've learned a lot from open source, such as networking, effective communication, and working on projects that have real impact. I'm fortunate to have met some great friends and mentors who are always ready to help when needed.
The GitLab Web IDE enables users to modify files, view diffs, commit, and push changes directly from the browser. This reduces the need to clone repositories for minor edits. However, it lacks key Git commands such as commit amend, force push, stash, and rebase; this forces developers to switch to the command line. This disrupts workflow and introduces several challenges.
My project aims to implement additional source control operations in the Web IDE, enhancing the user experience and expanding its capabilities. These improvements will further reduce the need to clone repositories or switch to alternative platforms to perform common version control tasks.
To add support for advanced Git operations in the GitLab Web IDE source control UI, including:
- Commit & Force Push
- Amend Commit & Force Push
- Create Branch
- Create Branch from Base...
- Delete Branch
- Stage/Unstage Changes
- Commit & Force Push
- Amend Commit & Force Push
- Create Branch
- Create Branch from Base...
- Delete Branch
- Stage/Unstage Changes
My approach to implementing features is straightforward and consists of the following steps:
- Clearly identify and understand the issue.
- Learn what it takes to solve the issue using resources provided by my mentor.
- Confirm my understanding by discussing the issue with my mentor and the wider community.
- Implement a smaller part of the solution first.
- Share updates with my mentor to ensure I’m on the right track.
- Continue implementing the feature and ask for feedback as needed.
Merge request | Status | Description |
---|---|---|
Feat: Add commit and force push | ✅ | Allow users to force push commits without the need to clone the project locally to get the job done. |
Feat: Add commit amend and force push | ✅ | Allows users to amend and force push commits from the browser. Use cases: 1. If a user typed a wrong commit message and needs to update it. 2. If a user wants to add, remove, or modify files in the last commit without cloning the project. |
Feat: Update confirmation message | ✅ | Adds a warning to users attempting to force push or amend and force push commits; ensures the user is intentional about this operation. |
Feat: Create branch operations | ✅ | Allows users to create branches from the current branch or a selected base branch. Use case: 1. When a user wants to create a minor merge request faster. |
Doc: Add documentation for additional commit operations | ✅ | Updates the documentation for the commit features to improve understanding for new users. |
Feat: Delete branch | ✅ | Allows users to delete branches, given they have the required permissions. |
Feat: Add support for staging changes | Pending | Allows users to stage files before committing, instead of committing all changes. This feature is foundational for implementing other features such as commit amend without pushing. Implementing its filesystem will also make future features like stashing changes easier to build. |
- Asynchronous discussions on GitLab issues were the primary mode of communication.
- Weekly video calls on Zoom were held to get feedback and discuss deliverables with my mentor.
- The GitLab Discord community channel was used to resolve doubts, share suggestions, and get feedback from the wider community.
- Daily updates were posted on the issues to keep my mentor informed.
Participating in GSoC '25 has been a major learning experience. I made several mistakes along the way, but each one taught me something valuable and helped me grow both technically and interpersonally. Some of the key lessons include:
- Communicating effectively in a fully remote environment.
- Asking better questions to clarify goals and get what I really need.
- Managing my time more wisely while handling multiple priorities.
- Navigating and understanding large codebases.
- Writing clean, maintainable code and testing it properly.
- Learning new tools and technologies quickly when needed.
- Realizing that delivering a feature involves much more than just coding; user experience, documentation, and peer reviews are all essential parts of the process.
- Understanding the importance of feature flags and how they are used in real-world products.
- Learning and using the VS Code API to build meaningful features.
- Improving how I write and structure tests, and learning when mocking is appropriate and when it is not.
- Strengthening my TypeScript skills through real-world challenges.
- Deepening my Git knowledge, especially around squashing, rebasing, conflict resolution, and how those features are implemented.
- Writing cleaner, more composable TypeScript functions with proper types.
- Learning how to implement entirely new features without getting overwhelmed or burnt out.
I would like to thank my mentor and the wider community for their continued support throughout this journey. Special thanks to:
The mentorship I received and the project I worked on have been invaluable. I plan to continue my journey with GitLab after GSoC.
I would like to:
- Add support for staging changes in the Web IDE.
- Collaborate on redesigning the Web IDE's advanced source control operations.
- Help new contributors in the wider community.
- If possible, introduce new contributors to the Web IDE and review their merge requests. I believe this will benefit them by contributing to a product with major impact, and benefit GitLab by accelerating the development of the Web IDE.