[ocaml-platform] Dev Version as Package?

Thomas Braibant thomas.braibant at gmail.com
Tue May 5 20:42:55 BST 2015


Hi,

We faced this issue at work too. The typical issue is "I want to depend on
this particular branch of a third party repository". Pinning packages
locally would work, but we want something that we can push on CI and build
servers, and share in the team (and keep in the git history of the
project).

The solution we came up with is as follows: in our dev repository
`project`, we keep a particular opam repository `project/opam-repository`.
This repository contains shadow opam packages. For instance, if I want to
depend on branch bar of a public project foo, we just add a new version of
the opam package for foo in `project/opam-repository/packages`, with an
explicit version number, and with an url like `path-to-project-foo#bar`.
Then, we keep a opam file in `project` that specifies the explicit
dependencies (given version of public package) and the dev dependencies
(home brewed version of public packages). The dev dependencies can only be
met using the shadow opam files.

Then, our CI/build scripts use something like
```
opam remote remove shadow-opam-repository
opam remote add shadow-opam-repository ./opam-repository
opam update
opam pin add --no-action project ./ -y
opam install --deps-only project -y
```

Changing version of packages for all devs and our servers is done by
commiting changes either to the opam-repository or to the opam file in the
project.

Hope that helps.
Thomas





On Tue, May 5, 2015 at 9:19 PM, Malcolm Matalka <mmatalka at gmail.com> wrote:

> Each project I have has its own opam repo which I put as higher priority
> to the basic one.  Does this do what you want?
>
> Trevor Smith <trevorsummerssmith at gmail.com> writes:
>
> > Hi all,
> >
> > We're using opam internally at work. I have two use cases for our
> internal
> > libraries:
> >
> > 1) "dev dependencies" -- I want what is in the repo.
> > 2) "explicit dependency" -- I want a given version.
> >
> > opam has #2 covered.
> >
> > However it is not clear to me how to do #1 correctly. I can, on a given
> > machine (ie not on an opam repository), pin a given package to a git
> repo.
> > But locally pinning isn't what I want. I want a package in an opam
> > repository to say "I depend upon this other dev package" so that our
> build
> > boxes, and various developer machines will all do the same thing, and I
> > don't need to separately pin everything on each box.
> >
> > Has anyone else encountered this situation before?
> >
> > Thoughts? Thanks.
> >
> > Trevor
> > _______________________________________________
> > Platform mailing list
> > Platform at lists.ocaml.org
> > http://lists.ocaml.org/listinfo/platform
> _______________________________________________
> Platform mailing list
> Platform at lists.ocaml.org
> http://lists.ocaml.org/listinfo/platform
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ocaml.org/pipermail/platform/attachments/20150505/d7ee728a/attachment-0001.html>


More information about the Platform mailing list