Cover image credits : undraw.co
This blog post is about my initial experiences as an Outreachy intern at the Wikimedia Foundation!
First Impressions
Confused and Excited
After eagerly waiting for my Outreachy internship to begin, I was extremely thrilled to finally start working on the project. The first task assigned to me was to migrate the code repository from GitHub to Gerrit, the official code hosting platform for the Wikimedia Foundation.
Gerrit was completely new to me. I spent the first few days familiarizing myself with the tool. Gerrit follows a very different approach compared to platforms like GitHub. For example, instead of tracking new branches, it assigns a Change-Id to every new feature. This Change-Id is a unique identifier, and any modifications to a commit are tracked using it, since the commit hash changes whenever there is an update. Thankfully, the documentation of Gerrit is excellent, and the examples really helped me understand the workflow.
The next task was to set up the project with Wikimedia’s CI service. Wikimedia uses Jenkins Job Builder (JJB) to create and manage Jenkins jobs. Again, this was a completely new experience for me. I used the tox-docker template of JJB for the project and added it to the zuul/layout.yaml file in the Integration/config repository to make Jenkins track changes and run the required jobs.
A special thanks to the Wikimedia community—this was all new to me, and I asked many questions on the IRC channel. Each time, I received prompt and accurate responses! I even received help with setting up permissions for my Gerrit account. Next, I set up tox for the project, running two tests: Django tests to validate the Python code, and code linting using Black.
Setting up the Development Environment
Since the project involves communicating with the Wikimedia API, authenticating users, and uploading images, repeatedly using the existing Wikimedia deployments was not ideal. My mentor suggested setting up Wikimedia Vagrant on my local machine for development.
This was a complex challenge, as I had to read a lot of documentation to understand how Vagrant works and which roles needed to be enabled. Since the application required OAuth, I enabled the OAuth role with suitable permissions.
Next, I created an application in my development environment, approved it, and integrated it with the project locally. I initially ran into some HTTP/HTTPS connection issues, but these were caused by a third-party package.
Setting up Wikimedia Vagrant greatly sped up my testing process, as I no longer had to worry about exposing images without proper permissions or licenses.
Final Thoughts
As you might notice, during the first three weeks of my internship, I did not work much directly on the project’s features. However, by setting up the CI service and the local development environment, I laid a solid foundation that will make the upcoming months more productive, smooth, and efficient.