It’s another monthly burst of news about bors, the bot that tests your code before it becomes the master.

In the last month, we landed 12 PRs in the bors-ng repository.

Notable Additions

  • notriddle switched to using the GitHub App login flow, instead of a separate OAuth App
  • mmun configured bors to infer CircleCI configuration, in the absence of a bors.toml file
  • notriddle made bors error out if it’s configured to block on nothing
  • notriddle started bors testing with MySQL as well as PostgreSQL
  • jniles updated the README to identify bors as a GitHub App
  • notriddle fixed the add-reviewer flow in some cases
  • notriddle cleaned up the Heroku setup instructions

New Contributors

Want to see your name in this newsletter? Look at bors starters, a curated list of issues that are good for new contributors!

Who’s using bors?

This month’s featured user is pint. Pint is a Python package for dimensional analysis, doing arithmetic on numbers with units (like mass in kilograms, length in astronomical units, and volume in pints).

  • Your arithmetic can be written in natural-looking Python, since Pint overrides the mathematical operators.

    >>> import pint
    >>> ureg = pint.UnitRegistry()
    >>> 3 * ureg.meter + 4 *
    <Quantity(3.04, 'meter')>
  • Pint has built-in support for asserting dimension types, so that unit errors cause the program to crash instead of giving meaningless results:

    >>> import pint
    >>> import numpy as np
    >>> ureg = pint.UnitRegistry()
    >>> G = ureg("9.8 m s^-2")
    >>> @ureg.check('[length]')
    ... def pendulum_period(length):
    ...     return 2*np.pi*np.sqrt(length/G)
    >>> pendulum_period(5 * ureg.seconds)
    pint.errors.DimensionalityError: Cannot convert from '5 second' ([time]) to 'a quantity of' ([length])
    >>> pendulum_period(5 * ureg.meters)
    <Quantity(4.48798950513, 'second')>
  • Also, Pint supports NumPy without wrapping or monkey-patching it.

Got any suggestions for next month? Post a comment on the June pull request.