Comments (6)
I'd like a clearer statement of the requirements. Implicit in the current description are:
- GHC is an evolving target, so bindists need to be regenerated periodically.
- You want to regenerate a bindist every few hours independently from Asterius CI.
- You want Asterius CI to pull whatever latest GHC was generated and use that during CI.
If so, then these sound like the wrong requirements to me.
- Precisely because GHC is a moving target, we should not target whatever is the latest GHC during CI.
- We should carefully track which GHC we use via a submodule reference in the asterius repo.
- The GHC submodule ref should not be updated automatically. It should be updated manually at controlled points in the asterius release cycle. Otherwise it'll be very hard to track the source of regressions.
- There should be only one CI system: the one for asterius. Having two CI systems is inevitably going to create all manner of races (e.g concurrent access to S3 bucket while being written by other CI system).
- GHC should be (re)built as part of CI.
- Use caching to avoid GHC being rebuilt each time. We want the following property: CI rebuilds GHC if and only if the ghc submodule ref was updated.
from asterius.
Further nice-to-have requirements (may or may not be workable):
- asterius should remain forkable. If CI relies on custom infra, then it's no longer forkable (any forker would need to replicate this infra themselves). This implies that CircleCI cache better than an S3 bucket that would be world readable but only writable from Tweag workspace.
from asterius.
@mboes I'd like to clarify a bit. I decided to base asterius on ghc head and follow upstream changes, because that was one of a pain spot when using ghcjs in the past (having several branches for different ghc releases, requiring extra effort to make it work once a new release is out, etc). That's the reason for routinely bumping ghc revisions, because for small breaking changes in ghc master (which happens a lot!) it's relatively easy to follow, but for point releases it will be a lot of work.
Furthermore, right now it's already deterministic: every revision of asterius already pins with one exact commit of ghc, so even if a regression is introduced it won't be much of a problem to bisect and track the breaking commit.
Also, the current CI setup and the new one @mrkkrp is working on both don't trigger a new build for ghc with every asterius commit.
I'm okay with introducing a ghc tree as submodule and using that, but automatic (or at least, semi-automatic) bumping of ghc revisions is not nonsense. I hope I've explained the rationale.
from asterius.
To be clear, I'm not arguing to only use GHC releases. Using a commit from GHC HEAD is fine, so long as we're not automatically switching to whatever is the latest commit. This is no different than for any other project dependency. Dependencies need to be vetted, and updates to dependencies need to be vetted too.
Also, the current CI setup and the new one @mrkkrp is working on both don't trigger a new build for ghc with every asterius commit.
I think they should (but thanks to caching this won't be noticeable).
from asterius.
Opened #7 for CircleCI part.
from asterius.
We are building ghc bindists on separate branches then using them for CI in master
and other wip-*
branches. The advantage of building bindists instead of utilizing CI caches is improved end-user experience: people do not need to set up a building environment on their end, rather they'll just use a plain stack build
and it mostly works out of the box.
from asterius.
Related Issues (20)
- Source code for demos HOT 3
- Asterius-compiled code is very slow
- Support for wasm2c
- Crash by "table index is out of bounds"
- confusing Uncaught (in promise) JSException
- Official bindists?
- ahc --help
- Haskell + C++ project? HOT 1
- Information about upgrading GHC and libraries
- Docs outdated? HOT 1
- JavaScript heap out of memory
- support upload 'docx' file and output 'html' string in the asterius pandoc online demo
- Fixes for the FFI blog post
- support the cabal condition "impl(ahc-ghc)"
- --export-function doesn't work with ahc-dist HOT 2
- Stack installation files missing, Docker image is huge and unwieldy to use HOT 1
- Order of --output-directory flag matters
- Building error on multi-packages cabal project. HOT 1
- How to trace the "unreachable" runtime error back to Haskell modules or functions?
- Runtime error related with GC options `--gc-threshold` HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from asterius.