-
Notifications
You must be signed in to change notification settings - Fork 452
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Factor the CLI executable into its own package #136
Comments
Agreed.
Are Alternatively, can we e.g. name the file |
Renamed the issue to reflect my by-fiat decision 😁 |
A conversation with @hvr revealed that I’m conflating two desires: the desire for the dependency graph associated with Docker builds and release tarballs tracked in the repo, and the desire to get something up on Hackage. Hackage’s PVP guarantees mean that if we specify the version bounds correctly, we should be able to distribute an executable package with inexact version bounds, while still tracking release bounds in a freeze file used only in Docker and release builds. |
Today the builders decided to recompile the universe from scratch because a
cabal new-update
gave us some new bugfixes. While the build time is unfortunate (see #88), I started thinking about a separate dilemma, to wit: as time goes on and we loosen/tighten library version bounds in response to new packages coming in over the wire, we risk introducing changes into the behavior of thesemantic
executable. Ideally we want thesemantic
library’s version bounds to be flexible, so as not to lock external consumers into a fixed library version. In contrast, we want executable builds to be reproducible, which means that a given release of thesemantic
command line tool should be built with a vetted, deterministic set of dependencies. Distributing both the library and the command line tool together in the same package—that is, trying to have flexibility and determinism simultaneously, in the same package—may render this difficult.I think what would be more correct would be to have
semantic
andsemantic-cli
packages, and usecabal new-freeze
to providesemantic-cli
with acabal.project.freeze
file that specifies the specific versions to use if someone wants tocabal install semantic-cli
(and get the same executable that we’ve vetted and tested, not one built against libraries that we don’t know from Adam). Sort of like howCabal
the library andcabal-install
the tool are separate things. I think? The documentation oncabal new-freeze
implies that this is the right thing to do:It’s not clear to me how a separate
semantic-cli
project in the same repository (and I would very much hope to use the same repository rather than a whole new one) would work. Hopefully thecabal.project.freeze
files thatcabal new-freeze
files take effect lexically viz. not applying to thesemantic
library.Given the relatively small user base of
semantic
the CLI tool, I don’t think this a crisis, nor do I necessarily insist on absolute and infallible build reproducibility: at this stage, the chances of production breakage creeping in due to version-bounds churn is very low, especially given our PVP contracts. I do, however, want to have an answer to this before we finish #16.The text was updated successfully, but these errors were encountered: