Rust Maintenance

This page collects notes about rust maintenance, and is meant more to capture how things are than to be prescriptive.

There have been multiple instances of rust updates causing breakage, most recenly in 2021-09 (librsvg fails to build on NetBS aarch64).

Projects

There is a separate page about projects to improve rust in pkgsrc.

Multiple packages

Note that there is lang/rust, the package that builds the compiler from sources (using bootstraps) and lang/rust-bin, the package that wraps already-built binaries, originally official binaries from upstream, but now alternativel TNF-build binaries for platforms not supported by upstream.

When an update to rust is done, rust-bin should be updated at the same time or very soon thereafter.

Preparing an update

Generally, an updated package is staged as wip/rust. This lets many people test the proposed update with little friction.

Bootstraps

\todo Explain the processing of preparing binary bootstraps.

Testing an update

In normal times, there are no special rules about rust imposed by PMC. However, pkgsrc has a general notion that updates should not cause things that worked before the update to break, so the list of tests is likely a good guide at all times.

In the month of the freeze, updates require approval. PMC will likely refrain from approval unless at least most of the list of tests below have been done.

Specific tests

This section is about test results expected to approve a near-freeze update. It doesn't mean that platforms marked for no testing are irrelevant, just that they aren't part of the formal worry about stable branches. Testing is not solely the responsibility of the person that prepared the update, as that is clearly infeasible.

Once there is a proposed update in wip, it needs testing on multiple platforms. The tests are done relative to up-to-date pkgsrc. Tests are labeled either package, to pass if "make package" succeeds and the package can be installed, or actually run, to further verify that the package works. Each package should be installed before moving on to the next step. Note that firefox does not depend on librsvg, so testing firefox does not show that librsvg works.

  • rust
  • cbindgen
  • librsvg
  • firefox
  • firefox-run

There are also two codes for not testing:

  • none: no requirement to have a bootstrap
  • bootstrap: bootstrap in distinfo, but no testing needed

There are a lot of platforms, and firefox is troubled on many of them for non-rust reasons, so it is not reasonable to expect it to work. Also, testing firefox is time consuming and not clearly necessary.

Some platforms seem new/experimental for rust and are thus labeled none. Some platforms have few users; testing needs to be done by those who use the platform. Aside from NetBSD 9 amd64, if after a call for testing no one does tests, it is not reasonable during ordinary time to hold updates.

OS version CPU test
NetBSD current amd64 librsvg
NetBSD current i386 none
NetBSD current aarch64 none
NetBSD 9 amd64 librsvg firefox-run
NetBSD 9 i386 librsvg firefox
NetBSD 9 aarch64 librsvg firefox-run
NetBSD 9 earmv7hf-el librsvg
NetBSD 9 sparc64 bootstrap
NetBSD 9 ppc none
NetBSD 8 ppc none
NetBSD 8 amd64 librsvg
NetBSD 8 i386 librsvg
illumos std amd64 librsvg
macOS ? aarch64 none
macOS ? amd64 librsvg
Linux ? amd64 bootstrap
Linux ? i386 none
Linux ? aarch64 none
Linux ? armv7 none
Linux ? armv7 none
FreeBSD ? amd64 none