[racket] package builds, updated daily

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Fri Aug 22 10:29:16 EDT 2014

At Fri, 22 Aug 2014 09:13:52 -0400, Sam Tobin-Hochstadt wrote:
> On Fri, Aug 22, 2014 at 8:53 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> > The site
> >
> >   http://pkg-build.racket-lang.org/
> >
> > reports the result of a daily build of all packages that are listed at
> > "pkgs.racket-lang.org". The builds use the current release of Racket
> > (version 6.1), and the site includes documentation for packages that
> > build successfully.
> 
> What should happen for packages that require an unreleased version of
> Racket (such as "misc1" and its dependencies)? Right now they fail to
> build, but it would be nice to have documentation for them.

If there's a branch or commit of a package that works with v6.1, and if
the author of the package registers that branch/commit as source of the
package when requested for version "6.1", then the package-build
service will pick up that branch/commit and the build can succeed.

The package author can register a core-version-specific source at
"pkgs.racket-lang.org" through the package-configuration dialog's
"version exception" field.

----------------------------------------

Stepping back, there are different possible modes for working with
Racket and packages: working with the very latest of everything,
working with the most recent release of the Racket core but the latest
versions of packages, working with a snapshot of packages taken at the
most recent release, and so on.

In general, the way to select a different mode is to use a particular
package catalog. Different catalogs can implement different modes and
policies.

(A Racket distribution selects a mode through its default
package-catalog configuration. For example, a distribution from
"download.racket-lang.org" consults a catalog that supplies a snapshot
of some packages and defers to "pkgs.racket-lang.org" for others. The
subset of packages in the release snapshot is currently the packages
that are in the main Racket repo, but that's evolving.)

The "pkgs.racket-lang.org" catalog is mainly set up for "the very
latest of everything", but it tries to provide "the latest that works
for a particular Racket core version". The latter currently requires
more work from package authors in the case that "latest for a core
version" is not the same as "latest".

The package-build service could similarly always build against the
latest of everything. That would work well enough with the number of
packages that we have now, but when there are 20 times as many
packages, then I think it will be difficult for the build service to
keep up when a widely-used package changes (e.g., when "base" changes).

The current combination tries to hit a workable compromise between "the
latest of everything" and "the latest that works for the current
release". My guess is that the latest of a package will usually work
with the latest release, mainly because package developers will be like
other users and use the latest release. If so, things will generally
work out. (In other words, I think that "misc1" is an exception in the
way that it depends on a pre-release addition to "base", and I bet the
author is willing to register a v6.1-compatible source.)

If not, then we'll end up changing the policy at either
"pkgs.racket-lang.org" or "pkg-build.racket-lang.org", or we may end up
with multiple catalogs and multiple build services to support different
modes.


Posted on the users mailing list.