-
Notifications
You must be signed in to change notification settings - Fork 45
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
continuous integration #12
Comments
Note that, additionally, if you want this to be tested on the Coq bench, there also needs to be an opam package. I can take care of this (as well as ~ step 5 above of making a PR that adds bedrock2 to the Coq CI), once 1-4 are completed, if you let me know which dependencies are expected to be installed via opam (or similar) (rather than locally available via submodules), and what the version constraints on those dependencies are (which I'm guessing will just be "= dev" or whatever it is to say that it's the one for the dev version of Coq). |
Oh, also, I think you'll need to support building without being able to download things to |
Is there any reason why coq benchmarks use opam even though CI is fine with non-opam code? |
I'm certainly pro CI! Regarding 3) I wouldn't like to use git submodules because diamond dependencies will bite us. Some days ago I actually tried to use recursive make to build bbv and riscv-coq, but gave up after a few hours because I couldn't tell makefile that coqdep-generated dependencies going pointing outside of bedrock2 have to be built using recursive make (various things which you'd expect to work didn't work...) My workflow involves often modifying bbv, riscv-coq, bedrock2, and the current setup allows me to do that quite productively. What would that look like using opam? In particular, could I test the effects of changes in one repo in another repo without committing and updating version numbers? |
CI runs on travis, but the bench runs on an INRIA machine which times/profiles |
@JasonGross how much would you worry about diamond dependencies like this one: Suppose in a few months kami switches to using bbv rather than an integrated copy of it, and they prove some kami processor correct agains riscv-coq, and I want to create a repo called end-to-end which depends both on the kami processor and bedrock2, so it will depend on two different types of bbvs: The kami submodule, and the riscv-coq submodule. So I guess I'd have to write some kami-bbv<->riscv-bbv word conversion boilerplate. How bad do you think this will be? So far I classified it as very bad and therefore excluded submodules and |
I don't have an opinion about bedrock's CI. But, I am actively using the bbv repo (not the plv/kami version) in sifive/kami and I am not using git submodules to avoid all the problems it brings with it. I don't see why submodules would solve any of your problems @samuelgruetter |
I'd say then you should make both repos support a global/COQPATH-based installation of |
I think the only sustainable solution to diamond dependency situations with shared interfaces like the one you describe is to have all code in the same repo, perhaps using git-merge-subtree to integrate with separate development repositories. this would also solve the CI compatibility issues, allowing git clone of that repo to build without permissions to the parent directory. I think we could emulate that by hacking together an umbrella repo that has git submodules for all repos which you want to use the sibling trajectory setup for. |
I like the "umbrella repo" idea! Here's how I understood it: Each "participating repo" should satisfy the following requirement: It has to be possible to configure the repo such that it builds with all shared dependencies as siblings. bbv, riscv-coq and bedrock2 satisfy this already, and if I understand correctly, sifive/Kami as well, and repos supporting a COQPATH-based installation of bbv would satisfy this requirement as well. Whether or not an individual repo wants to use git submodules would be up to their owners, as long as they satisfy the above requirement. Given this, the "umbrella repo", called eg |
I made an umbrella repo here: https://github.com/mit-plv/bedrock2-ci Going through @andres-erbsen's original list of blockers:
I haven't tried yet with other Coq versions than 8.7.2.
TODO
DONE
TODO
TODO |
So I added a
I also removed the |
We did this. |
Spinned off from coq/coq#7878
It would be great if bedrock2 could be built as a part of the Coq continutous integration system so that coq changes do not break it. Secondarily, it would also be nice to have a computer nanny us to make sure we don't break the build ourselves. I think there are three blockers for this:
master
.EXPECTED_COQC_VERSION=any
so coq devs can bump their version numbers without breaking their CI@samuelgruetter is this a direction where you would like to see bedrock2 go? If so, would you like to do some of the above steps yourself, or give me guidance on how to do them in a way that does not conflict with your plans?
The text was updated successfully, but these errors were encountered: