[p-dev] Time to think about CI/testing
Paul Bone
paul at bone.id.au
Sat Dec 29 16:05:18 AEDT 2018
I'm not an expert on CI/CD. I'm fairly sure CD is not what we want. And
I'm not sure of the precise meaning of CI. So bear with me if I get
something wrong.
Compiler
========
Plasma has a compiler written in Mercury that has no system specific parts
beyond what Mercury has in its own runtime. it has a tiny bit of foreign
code in C but it's pretty simple.
We should test with:
+ 32 and 64 bit systems,
+ stable and development versions of Mercury.
Note that development versions of Mercury are currently broken on 32 bit
systems.
Runtime
=======
The rumtime is currently fairly system agnostic, at least until C++ was
added. It uses a mix of C and C++, and should be tested with at least two
compilers. There is also a build option to enable extra asserts and other
development options.
We should test with:
+ 32 and 64 bit systems
+ -DPZ_DEV
If possible:
+ le and be if possible
+ More than one OS (Linux and OS X have been tried so far, if it was known
to work on something else then I'd add this to "should").
+ Systems that assert for unaligned accesses if possible.
+ valgrind / memcheck / ubcheck / etc.
I'm also in the process of adding a "zealous" mode to the GC, which performs
a lot more checking but runs slower. And this is why I'm interested in CI.
I don't think we want this to run when people type "make test", not by
default. But it does make sense to run it for each commit / pull request.
So there's a few things that would be useful to begin testing now. Or at
the very least to think about testing. So here's where I throw it over to
you (the reader) since you probably know more about this than me.
New GC mode
===========
So the first question, is for the new GC mode should this be enabled as a
compiler option or an environment variable? I'm imagining compiling it when
PZ_DEV is defined and enable it when an environment variable is set. I
imagine that typical CI stuff can handle this but please tell me if it
isn't.
Hosted CI?
==========
When I've worked on other projects, things like "Travis" would run when I
opened a pull request. Has anyone worked with or set this up before? Can
it support what we need?
Alternatively I've setup Jenkins before, although I never finished the full
configuration, for a non-hosted thing I think Jenkins seems good. Does
anyone have any suggestions between hosted/non-hosted and which service to
use?
TAP
===
It was suggested (https://github.com/PlasmaLang/plasma/issues/28) that Test
Anything Protocol (TAP) can be used to gather results from a test suite and
integrate with a CI tool. Should we use this? is it the best option? What
other work needs to be done to the test suite / Makefile to make them work
with a CI tool?
I've also posted this as a GH issue: https://github.com/PlasmaLang/plasma/issues/95
Thanks.
--
Paul Bone
http://paul.bone.id.au
More information about the dev
mailing list