Skip to content

Cargo upgrade service project

Josh Matthews edited this page Sep 15, 2016 · 4 revisions

Create a service that automatically upgrades Cargo dependencies

Background information: Servo depends on numerous other Rust libraries that are published on the package manager crates.io. There are no notifications for when packages are updated; it's up to developers to keep track of when they need to upgrade their dependencies. The goal of this project is to build a service similar to Greenkeeper that can automatically upgrade Servo's dependencies whenever new versions are released. It is recommended to use a language like Python, node.js, or Ruby, that is well-supported on systems like Heroku.

Note: there exists a tool that reports outdated Cargo dependencies, but it has limitations we wish to avoid. It can be used for inspiration/guidance, however!

Initial steps:

  • email the mozilla.dev.servo mailing list (be sure to subscribe to it first!) introducing your group and asking any necessary questions
  • write code that takes a Cargo.lock file (example) file as input and determines the list of crate names and versions that are dependencies
  • write code that takes a list of crates and versions as input, compares them against a local git clone of the crates.io index, and reports which crates can be updated

Subsequent steps:

  • ensure the code that processes Cargo.lock files can process Servo's Cargo.lock (warning: stress test!)
  • write code that accepts a list of crate names that require updates, then (in a local clone of https://github.com/servo/servo/) runs ./mach cargo-update -p [name] for each crate name
  • write code that can interact with a local git clone - change to the master branch; pull from the upstream repository; commit changes with a meaningful message; push to a remote repository (see some sample python code).
  • write code that can open a pull request against Servo's github repository from a particular branch on a fork
  • put all the pieces together as part of a single operation: update a local git repository; read its Cargo.lock; update the crates.io index; determine the crates that can be updated; make a new branch in the local repository; update the crates; commit the changes; push the branch to github; open a pull request.
Clone this wiki locally