[Hackage] #598: Bogus build failures on HackageDB
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Keywords: Difficulty: unknown | Ghcversion: Platform: | --------------------------------+------------------------------------------- HackageDB reports build failures for packages due to inconsistent dependencies. For instance, the dedukti package currently has a build failure because it depends on both bytestring and text. The latest version of bytestring is 0.9.1.5, but text is built using bytestring-0.9.1.4. This causes a build failure because the functions in text expect as arguments something of type ByteString from bytestring-0.9.1.4, not something of type ByteString from package bytestring-0,9.1.5. If the text package were built using the latest available version of bytestring, as would happen after a "cabal install text" on a fresh system, the problem would go away. Always building packages with the latest versions of their dependencies available isn't a solution, because dedukti could, for instance, depend on some specific version of bytestring yet text might happen to be built with another version on the Hackage server. Could there be a way to at least detect when build failures are due to inconsistent versions in dependencies, which is a problem specific to the Hackage server installation and not the package itself? -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Resolution: Keywords: | Difficulty: unknown Ghcversion: | Platform: --------------------------------+------------------------------------------- Changes (by mboes): * cc: mboes@lix.polytechnique.fr (added) -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:1 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Resolution: Keywords: | Difficulty: unknown Ghcversion: | Platform: --------------------------------+------------------------------------------- Comment (by mokus): I'm getting extremely frustrated by situations very much like this one. the bytestring-0.9.1.5 update was particularly nasty and caused bogus failures in every package I uploaded for a couple months, to the point where i added hacks to one project's cabal file for the sole purpose of making it build on the hackage server. It really should not be possible for a _._._.x version bump to wreak this kind of havoc. More recently, I uploaded a new version of my 'random-fu' package and it failed due to some problem which prevented the non-negative package from linking. I have not looked into it just yet, but it looks like another of the same issues - essentially bitrot in the ghc-pkg database on whatever system does the hackage builds. This is getting out of hand, in my opinion. I propose a few alternative solutions, varying in directness and complexity: 1) all packages be rebuilt occasionally (say, monthly) from a clean Haskell-Platform install (preferably also updating the info on the web for packages that successfully rebuild) 2) keep stats on reverse-dependency build failures, use a pagerank- like tool to propagate those stats up the graph, and rebuild packages and their dependencies when scores start to plummet (which presumably would have happened to bytestring shortly after 0.9.1.5 was uploaded and huge numbers of projects referencing it would not build) 3) Just build *every* upload in its own clean package.conf environment as a fallback (instead of or in addition to the preferred-versions fallback), rebuilding all the package's dependencies as well like "cabal install" does. That last should be fairly simple to implement and would make a lot of sense to me, especially given that I think most users do something of the kind in their own pre-upload testing. I know I do anyway. I would personally be satisfied if I could just get the haddock documentation to appear on the package archive page when the build fails. People can and will skim the package documentation and try building a package themselves if the package sounds interesting to them, but they're extremely unlikely to build the documentation just so that they can discover whether the package is interesting to them. -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:2 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Resolution: Keywords: | Difficulty: unknown Ghcversion: | Platform: --------------------------------+------------------------------------------- Comment (by ross): Replying to [comment:2 mokus]:
3) Just build *every* upload in its own clean package.conf
environment as a fallback (instead of or in addition to the preferred- versions fallback), rebuilding all the package's dependencies as well like "cabal install" does. Is there a sequence of cabal-install commands to do that (including the options --html-location, --hyperlink-source, --hoogle and --haddock- option)? -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:3 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Resolution: Keywords: | Difficulty: unknown Ghcversion: | Platform: --------------------------------+------------------------------------------- Comment (by duncan): The simplest solution would be to use cabal-install rather than `runghc Setup`. cabal-install will rebuild things as appropriate to avoid the diamond dependency problem. -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:4 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Resolution: Keywords: | Difficulty: unknown Ghcversion: | Platform: --------------------------------+------------------------------------------- Comment (by ross): Replying to [comment:4 duncan]:
The simplest solution would be to use cabal-install rather than `runghc Setup`. cabal-install will rebuild things as appropriate to avoid the diamond dependency problem. It will rebuild package versions that are already installed? Probably saves trouble in the long run, though it would be annoying if the rebuild failed.
-- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:5 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Keywords: Difficulty: unknown | Ghcversion: Platform: | --------------------------------+------------------------------------------- Comment(by duncan): Replying to [comment:5 ross]:
It will rebuild package versions that are already installed?
Probably saves trouble in the long run, though it would be annoying if
Exactly. It rebuilds them against different versions of their dependencies, so that the overall installation plan (graph) is consistent. It tries where possible to reuse existing installed package instances. the rebuild failed. Hopefully it would not matter since you wouldn't be uploading the results of dependent package rebuilds, just the single target package you're interested in. -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:6 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
Replying to [comment:5 ross]:
Probably saves trouble in the long run, though it would be annoying if
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Keywords: Difficulty: unknown | Ghcversion: Platform: | --------------------------------+------------------------------------------- Comment(by mokus): Replying to [comment:6 duncan]: the rebuild failed.
Hopefully it would not matter since you wouldn't be uploading the
results of dependent package rebuilds, just the single target package you're interested in. I may be wrong, but I think he was referring to the new uploader as the one being annoyed by such a situation, because they would know that there's a version of the package on which their upload depends already built on Hackage. I'd say that this annoyance is an acceptable risk, though - if an old package won't build in a particular configuration of the dependency graph, that's a legitimate build failure of the package which induced that graph, even if the fault is in the dependency. An end user very well may run into that same failure. The depended-upon package's maintainer should probably get notified if that happens, or the build failure should at least be recorded somewhere that the maintainer could easily find it without having to dig through other packages' build logs. -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:7 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB
--------------------------------+-------------------------------------------
Reporter: mboes | Owner:
Type: defect | Status: new
Priority: normal | Milestone:
Component: hackageDB website | Version:
Severity: normal | Keywords:
Difficulty: unknown | Ghcversion:
Platform: |
--------------------------------+-------------------------------------------
Comment(by ross):
Replying to [comment:4 duncan]:
> The simplest solution would be to use cabal-install rather than `runghc
Setup`. cabal-install will rebuild things as appropriate to avoid the
diamond dependency problem.
To generate the documentation for a package, one must
* build, haddock and install all pre-requisite packages
* do the equivalent of
{{{
runghc Setup.hs configure --ghc --user --haddock-option=--use-
contents=http://hackage.haskell.org/package/
runghc Setup.hs haddock '--html-
location=http://hackage.haskell.org/packages/archive/$pkg/$version/doc/html'
--hyperlink-source
runghc Setup.hs haddock --hoogle
}}}
From hunting through the code, it seems the planning stuff only happens if
I use the "install" subcommand, but that doesn't take the haddock options
I want to use.
What are the cabal-install commands I should be using?
--
Ticket URL:
Hackage
Hackage: Cabal and related projects
#598: Bogus build failures on HackageDB --------------------------------+------------------------------------------- Reporter: mboes | Owner: Type: defect | Status: new Priority: normal | Milestone: Component: hackageDB website | Version: Severity: normal | Keywords: Difficulty: unknown | Ghcversion: Platform: | --------------------------------+------------------------------------------- Comment(by ross): The client's build environment got messed up by building recent versions of a couple of GHC 6.12.1 core packages with GHC 6.10. There are two problems with that: * some of them have undeclared dependencies on base-4.2.0.0 * Cabal and the GHC build system build packages with different flags, so that yields a binary incompatibility. Switching to GHC 6.12.1 fixes those, leaving the diamond dependency problem. Building with cabal-install should fix that, but seems to be blocked by #517. -- Ticket URL: http://hackage.haskell.org/trac/hackage/ticket/598#comment:9 Hackage http://haskell.org/cabal/ Hackage: Cabal and related projects
participants (1)
-
Hackage