Skip to content

Add language-family support, group packages into umbrellas, and record build platforms in catalog#93

Merged
mflatt merged 3 commits into
racket:masterfrom
mflatt:family
May 20, 2026
Merged

Add language-family support, group packages into umbrellas, and record build platforms in catalog#93
mflatt merged 3 commits into
racket:masterfrom
mflatt:family

Conversation

@mflatt
Copy link
Copy Markdown
Member

@mflatt mflatt commented May 19, 2026

The backend changes here record language-families, umbrella, and build-platforms from a package "info.rkt" so that they are reported in a catalog.

The package-list display shows each package's families, and it indicates a "current language family" for the overall package listing. The default package-list sort shows packages matching the current family first, and it shows non-matching packages with a gray background.

Unrelated, but something that has long seemed like a good idea: Groups of packages that follow the -lib, -doc, -test, and -exe convention are combined into one row, and a turn-down arrow can show rows for individual packages. The umbrella field of "info.rkt" allows a package to declare that it falls under an umbrella package in the case that the umbrella is not inferred. (For example, the "actor-lint-lib" package should probably declare "actor" as its umbrella package.) It would make sense to infer umbrella relationships based on infers in "info.rkt", too, but (1) umbrellas are meant to cover things not normally implied, such as -test packages, and (2) a package could add infers to hide (somewhat) another package without that other package's author's consent.

The package server does not itself use build-platforms information. The intent is to have that information readily available to the pkg-build server by recording it in the catalog.

mflatt added 3 commits May 18, 2026 08:28
These are new fields in "info.rkt" at the package level.
A package "P" is under umbrella package "Q" if:

 * "P" is "Q-lib", "Q-doc", "Q-test", or "Q-exe"
 * "P" declares "Q" as its `umbrella` via "info.rkt"

Note that it would also make sense for "Q" to be an umbrella for "P"
if "Q" `implies` "P" via "info.rkt". However, that would let "Q"
adopt` "P" without necessarily having the author of "P" agree, so
that's why `implies` does not create umbrellas.

On the main package listing, only an umbrella package is shown by
default. A turn-down arrow in the umbrella package has the contained
packages listed next to it and exploses the details for all packages
under the umbrella.

Umbrella organization is based on the packages actually listed, which
might be limited in a search result. However, "this package needs
documentation" is now also sensitive to umbrellas (a package is
considered documented if anything in its umbrella is documented), and
that's independent of the listed packages.

Umbrellas are not meant to be nested, and the display mechanism
doesn't surrently support nesting beyond a single layer.
The top of the package-list page now shows the language families found
for packages. Selecting a language family changes the default sort to
have matching packages first, and non-matching packages get a gray
background. A `langfam=<family>` query parameter can initialize the
family choice.

This commit also repairs umbrella groups when sorting by table
columns. That involves using a newer fork of tablesorter that provides
direct support for child rows.
@mflatt
Copy link
Copy Markdown
Member Author

mflatt commented May 19, 2026

Related to #58, subsumes #75,

@mflatt mflatt merged commit 1f7dd90 into racket:master May 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant