[Haskell-cafe] Haskell CI with many repositories/packages

Alexander Kjeldaas alexander.kjeldaas at gmail.com
Tue Oct 24 21:30:20 UTC 2017


The following might count as a trick.  It checks that all .stack-work
directories are mentioned in the .gitlab-ci.yml file.

A nicer approach than the ugly grep is to use jq-on-yaml, but this works
for me.  The goal is just to fail CI if a new module is added without
caching it.

# Check that all stack work directories are cached
- diff -u <( find . -name .stack-work | grep -v '.stack-work.*.stack-work'
| grep -v '.stack/' | grep -v node_modules | cut -c3- | sort) <( grep
.stack-work .gitlab-ci.yml | egrep -v 'find .|for a|rm -rf|^\s*#.*|grep' |
tr -d '"' | awk '{print $2}' | cut -d/ -f5- | sort)

Alexander

On Tue, Oct 24, 2017 at 10:43 PM, Matthew Pickering <
matthewtpickering at gmail.com> wrote:

> It sounds like using Hydra (the Nix based CI system) would be suitable
> for your needs.
>
> The essential work flow would be to create a package set which
> contained all your packages and then create a job set which built that
> package set.
>
> What's more, if your developers are also using nix then it is trivial
> to setup a build cache which serves prebuilt packages to them.
>
> The manual provides a concise introduction - https://nixos.org/hydra/
>
> Matt
>
> On Tue, Oct 24, 2017 at 10:33 AM, Jeroen Bransen <jeroen at chordify.net>
> wrote:
> > Hi cafe,
> >
> > Does anyone know of a good setup for doing continuous integration with a
> set
> > of Haskell packages, each in its own repository? Just building everything
> > upon every commit is not so hard, but to speed up building times I'd
> like to
> > build and test only the minimal set of packages. In particular, at a
> commit
> > for some package A, I would like to build and test A and all packages
> that
> > depend on A.
> >
> > The problem is that most CI tools use some notion of 'build artefact',
> which
> > Stack doesn't really seem to give me. Ideally building a package results
> in
> > some object file, which can then be used by the other packages. When
> > building failed, packages that depend on it can still use the last
> succesful
> > build. I've tried to look up some Haskell projects, but most of them
> seem to
> > use some ad hoc setup.
> >
> > Some pointers are appreciated, as we are using Gitlab a gitlab-runner
> > specific option would be great, but I am also open to use Jenkins or
> other
> > tools. And I guess my main struggle now is on the stack/Haskell side.
> >
> > Regards,
> > Jeroen Bransen
> > _______________________________________________
> > Haskell-Cafe mailing list
> > To (un)subscribe, modify options or view archives go to:
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> > Only members subscribed via the mailman list are allowed to post.
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20171024/bf460ffe/attachment.html>


More information about the Haskell-Cafe mailing list