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 |