-
Notifications
You must be signed in to change notification settings - Fork 1k
Description
Ok, I don't have a nice and minimal test case for you guys, unfortunately, but I do have a reproducer. It seems like this issue is broadly related to the cake pattern, which is used heavily in some older parts of the quasar codebase (sadface…). Changing upstream functions (in inherited traits) will cause some downstream compilation units to explode at runtime with AbstractMethodError due to Zinc improperly believing the files in question did not need to be invalidated.
This happens intermittently in local development (my steps below point to a changeset which will reproduce the issue) and 100% deterministically in CI. The reason it is happening deterministically in CI is because we cache our target directories for PR builds in Travis (as discussed with @jvican) in order to bring down our horrendously-long compilation times. This worked almost flawlessly with SBT 0.13.x for the last eight months (we only needed to cache flush twice), which is quite impressive! However, on SBT 1.0, we can't even get a single PR build to work, as the slower matrix builds will get the new caches from the faster builds, and themselves run into mutual-invalidation issues. This is kind of an edge case, but it does demonstrate how much less reliable current Zinc is from its state in 0.13.
steps
- Clone my fork of quasar
- Check out commit
a6b7a91010faf8d06ef678653db53bafdaceaa5e - Run
sbt test:compile - Check out commit
66c97fd9ed3e36eec1a058e5b9a546c80ab6309b - Run
sbt mimir/test
notes
sbt version: 1.0.2