Skip to content

ahmad-kashkoush/gitlab-web-ide-report

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 

Repository files navigation

GSoC logo

GSoC'25 - Final Project Report

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.

Basic Info

Background

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.

About the Project

MARS logo

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.

Expected Outcome

To add support for advanced Git operations in the GitLab Web IDE source control UI, including:

  1. Commit & Force Push
  2. Amend Commit & Force Push
  3. Create Branch
  4. Create Branch from Base...
  5. Delete Branch
  6. Stage/Unstage Changes

Goals Achieved

  1. Commit & Force Push
  2. Amend Commit & Force Push
  3. Create Branch
  4. Create Branch from Base...
  5. Delete Branch
  6. Stage/Unstage Changes

Approach and Workflow

My approach to implementing features is straightforward and consists of the following steps:

  1. Clearly identify and understand the issue.
  2. Learn what it takes to solve the issue using resources provided by my mentor.
  3. Confirm my understanding by discussing the issue with my mentor and the wider community.
  4. Implement a smaller part of the solution first.
  5. Share updates with my mentor to ensure I’m on the right track.
  6. Continue implementing the feature and ask for feedback as needed.

Merge Requests and Issues

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.

Communication and Work Management

  • 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.

What I've Learned

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:

  1. Communicating effectively in a fully remote environment.
  2. Asking better questions to clarify goals and get what I really need.
  3. Managing my time more wisely while handling multiple priorities.
  4. Navigating and understanding large codebases.
  5. Writing clean, maintainable code and testing it properly.
  6. Learning new tools and technologies quickly when needed.
  7. Realizing that delivering a feature involves much more than just coding; user experience, documentation, and peer reviews are all essential parts of the process.

Technical Learnings

  1. Understanding the importance of feature flags and how they are used in real-world products.
  2. Learning and using the VS Code API to build meaningful features.
  3. Improving how I write and structure tests, and learning when mocking is appropriate and when it is not.
  4. Strengthening my TypeScript skills through real-world challenges.
  5. Deepening my Git knowledge, especially around squashing, rebasing, conflict resolution, and how those features are implemented.
  6. Writing cleaner, more composable TypeScript functions with proper types.
  7. Learning how to implement entirely new features without getting overwhelmed or burnt out.

Note of Thanks

I would like to thank my mentor and the wider community for their continued support throughout this journey. Special thanks to:

Future Involvement with GitLab

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:

  1. Add support for staging changes in the Web IDE.
  2. Collaborate on redesigning the Web IDE's advanced source control operations.
  3. Help new contributors in the wider community.
  4. 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.

About

Final report of my contributions to Gitlab at GSoC'25

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published