[arch-haskell] Thoughts on Procedure
dons at galois.com
Sat Oct 12 07:36:59 UTC 2013
> Hi guys,
> in my understanding, our current update procedure works like this:
> 1) We notice that a package was updated (or added) on Hackage by means
> of RSS.
> 2) A maintainer runs cabal2arch to generate an updated PKGBUILD.
> 3) If the generated PKGBUILD looks good, the file is committed to the
> Git repository and uploaded to AUR.
> There are a few things worth noting about that procedure:
> - A maintainer must perform 1 manual step per updated package: that is
> linear complexity O(n).
> - There is no mechanism to guarantee that the updated set of PKGBUILD
> files actually works.
Under my old system, each package was
* converted via cabal2arch
type check and compile the result:
* makepkg -f
So anything into AUR has to at least have type checked at one point
(even though each upload could have broken downstream packages).
It will be a stronger position if you aim for always having a
"consistent" package set -- i.e. all packages are guaranteed to be
consistent with respect to their version needs. A binary approach will
> Naturally, one wonders how to improve the update process. There are a
> few possible optimizations:
> - The simplest way to verify whether all PKGBUILDs compile is to, well,
> compile them. Given a set of updated packages, all packages that
> directly or indirectly depend on any of the updated packages need
> re-compilation, and the current set of PKGBUILDs is to be considered
> valid only if all those builds succeed.
> 3) Run "make all" to re-build all PKGBUILD files that need updating.
> 4) Run "make check" to perform all necessary re-builds of binary
> packages. If all builds succeed, proceed with (5). Otherwise, figure
> out which package broke the build and revert the changes in the
> corresponding Cabal file. Go back to (3).
> 5) Run "make upload" and "git commit" the changes.
So we'll always have a consistent set? This would be a valuable list --
no other distro aims for this, other than Debian, which aims only to
support a few hundred packages.
I think a full rebuild of the dependency tree each time is the only way
to be sure -- to force typechecking of the affected parts of the tree.
Additionally, once 'cabal check' is more widespread, you may also do
functional testing of the tree.
More information about the arch-haskell