Google Summer of Code 2024 Final Report

Oct 2, 2024 min read

This report outlines my work and learning experiences during Google Summer of Code 2024 with Synfig. Over the course of more than four months, I contributed to Synfig, a powerful open-source 2D animation software, starting from the application phase in March to April through the main project period from July to October.
I worked using C++, Bash scripting, DevOps, GitHub Actions, Linux, AppImage, and Virtual Machines.

Glossary

  • Release Notes A summary that is uploaded when a new update of a software is launched, this summary includes new features, bug fixes, etc.
  • AppImage A technology that allows Linux applications to be packaged into a single file, similar to a Windows .exe, making it easy for users to run the application without installation. Software engineers can create these single files with scripts, allowing the application to be easily distributed on Linux and run by simply double-clicking.
  • Contributors and Pull Requests A contributor is a software engineer who works on open-source projects by making improvements or adding features. They submit these changes to the project’s codebase by creating a pull request, which describes the changes made, and why they are beneficial.

Project Goals

This summer I worked on 2 projects, I will state their goals below.

Automating Release Notes Generation

  1. Free up software engineers’ valuable time by removing the burden of modifying release notes manually by creating a software that automatically generates release notes.
  2. Improve the looks and structure of the release notes to help Synfig users better understand the changes made.
  3. Enhance the pull requests and release notes’ descriptions by automatically showing contributors how their pull requests will affect the release notes.

Simplifying Linux Download Experience

  1. Currently, Synfig is bundled to work on Linux using AppImage v1.0 complicated scripts. AppImage v1.0 is outdated and has the critical issue that it doesn’t work smoothly on newer systems (Ubuntu v22.04 and others); the AppImage scripts will be updated to use the latest AppImage version to run smoothly on old as well as newer Linux distributions.

What Was Done

  1. Created a detailed technical proposal that got me accepted into Google Summer of Code with Synfig.
  2. Automated the generation of release notes when a new GitHub release is created, eliminating manual effort for release notes creation by creating the Release Notes Manager using C++, GitHub Actions, GitHub API, and Git.
  3. Significantly improved the looks and structure of the release notes which will help Synfig users better understand the changes made.
  4. Transferred the release notes to the GitHub releases’ descriptions, increasing their visibility and professionalism.

Example of automatically generated release notes from git commit messages.

Automatically Generated Release Notes

  1. Automated showing contributors how their pull requests will affect the release notes, this aims to enhance the pull requests and release notes descriptions and give Synfig’s pull requests a more professional feel to attract more contributors.

Demo Pull Request

Showing contributors how their pull requests will affect the release notes

  1. Integrated the above features into Synfig by creating the following 2 pull requests, PR1, and PR2.
  2. Improved accessibility for users by making Synfig easy to use on any Linux distribution by packaging it into the latest AppImage using simple and easy to understand bash scripts and testing it on 6 Linux distributions.
Synfig on Debian 10 Synfig on Pop!_OS 22.04 Synfig on Fedora 40
Synfig working on Debian 10 Synfig Working on Pop OS Synfig working on Fedora 40
  1. Ensured code quality, maintainability, and clear communication by adding Unit tests (doctest), detailed Code documentation (doxygen) and sending weekly status updates.

What’s Left to Be Done

  1. Remove libpk-gtk-module.so binary from the AppImage generator script repository, to avoid compatibility issues across different architectures
  2. Adjust the AppImage generator script to fix the Lottie exporter by bundling the needed Python dependencies.
  3. Automate the generation of the Synfig AppImage on a Debian 10 machine using GitHub Actions whenever a new GitHub release is created and automate uploading the generated AppImage as an asset to the new release.

Optional Enhancements for the Future

  1. Test and confirm the ability of the AppImage script to generate AppImages that run on 32-bit systems.
  2. Set up a GitHub Action to automatically generate a Synfig AppImage whenever a new pull request is created. Upload the generated AppImage as a comment within the pull request, allowing non-technical Synfig users to easily download and test changes introduced by the pull request.
  3. Fix the formatting issues with bullet points, numbered lists, and to-dos in the generated release notes.
  4. Add the ability to customize the messages the GitHub bot sends to show contributors how their pull requests will affect the release notes.
  5. Address the limitation of generating complete release notes for the first release in a new repository, as the first commit is excluded.
  6. Add the ability to customize the looks of the generated release notes.
  7. Make the Release Notes Manager a GitHub Action in the GitHub Actions marketplace.
  8. Improve the structure of the Release Notes Manager code into folders.
  9. Refactor my code to improve its readability and maintainability, making it easier for future contributors to navigate and build upon.
  10. Create scripts to package Synfig as Debian and Flatpak packages, providing Linux users with more options beyond AppImages.
  11. Work on the extra ideas in my proposal.

Important Non-Technical Lessons

  1. Anything that seems incredibly hard at first, given enough time and effort becomes extremely easy.
    Initially challenging tasks became manageable by breaking them down and staying consistent.
  2. Stress comes from not taking action over things we should be doing.
    I found that stress often came from delaying tasks; tackling challenges head-on and maintaining a steady pace throughout the project helped me stay calm and productive. Jeff Bezos explains this well

Thank you for taking the time to read my Google Summer of Code 2024 report, if you have any questions or would like to chat, please feel free to contact me!