jspecify / jspecify-reference-checker

The reference implementation for the JSpecify nullness specification (and later, its other specifications as well)
https://jspecify.org
Apache License 2.0
26 stars 7 forks source link

Build race or other flakiness, at least on main-eisop #167

Open cpovirk opened 8 months ago

cpovirk commented 8 months ago

I'd never seen this before, but I saw it today in one of the several builds that I performed. The compileTestJava step apparently failed to find org.checkerframework.framework.test.

My guess would be that the build didn't wait for that to be built: We depend on the CF test framework from our tests, and apparently jspecifySamplesTest automatically picks up the test deps... but maybe doesn't wait for them to become available?

https://github.com/jspecify/jspecify-reference-checker/blob/75aa1de2a8f88f8c23347d86465844df9887874c/build.gradle#L69 https://github.com/jspecify/jspecify-reference-checker/blob/75aa1de2a8f88f8c23347d86465844df9887874c/build.gradle#L148

Note that I did ctrl+C a build when I had the flag wrong. I would hope that that does not matter, especially since I ran clean afterward, but maybe I needed to also clean the checker-framework project or something?? Anyway, the compilation worked fine when I re-ran it.

$ git clone git@github.com:jspecify/jspecify-reference-checker.git

$ git clone git@github.com:jspecify/jspecify.git -b samples-google-prototype

$ cd jspecify-reference-checker

$ git co main-eisop

$ ./gradlew jspecifySamplesTest
git clone --depth 1 --single-branch https://github.com/jspecify/jdk.git ../jdk 
Cloning into '../jdk'...
Updating files: 100% (66472/66472)
Updating files: 100% (66472/66472), done.
git clone https://github.com/eisop/checker-framework.git ../checker-framework 
Cloning into '../checker-framework'...
> Task :processResources
> Task :checker-framework:setLocalRepo
> Task :checker-framework:installGitHooks
> Task :conformance-test-framework:compileJava
> Task :processTestResources NO-SOURCE
> Task :unzipConformanceTestSuite
> Task :conformance-test-framework:processResources NO-SOURCE
> Task :conformance-test-framework:classes
> Task :conformance-test-framework:jar
> Task :checker-framework:checker-qual:compileJava
> Task :checker-framework:javacutil:compileJava
> Task :checker-framework:dataflow:compileJava
^C

$ ./gradlew clean
> Task :clean
> Task :conformance-test-framework:clean

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.6/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed

$ ./gradlew jspecifySamplesTest --include-build ../jspecify
> Task :processResources
> Task :checker-framework:setLocalRepo
> Task :processTestResources NO-SOURCE
> Task :checker-framework:installGitHooks UP-TO-DATE
> Task :conformance-test-framework:processResources NO-SOURCE
> Task :checker-framework:checker-qual:compileJava UP-TO-DATE
> Task :checker-framework:javacutil:compileJava UP-TO-DATE
> Task :checker-framework:dataflow:compileJava UP-TO-DATE
> Task :checker-framework:checker-util:compileJava
> Task :jspecify:compileJava
> Task :jspecify:processResources NO-SOURCE
> Task :jspecify:classes
> Task :conformance-test-framework:compileJava
> Task :conformance-test-framework:classes
> Task :conformance-test-framework:jar
> Task :jspecify:compileJava9Java
> Task :jspecify:processJava9Resources NO-SOURCE
> Task :jspecify:java9Classes
> Task :jspecify:jar
> Task :jspecify:conformance-tests:compileDepsJava
> Task :jspecify:conformance-tests:processDepsResources NO-SOURCE
> Task :jspecify:conformance-tests:depsClasses
> Task :jspecify:conformance-tests:depsJar
> Task :checker-framework:framework:compileJava
> Task :jspecify:conformance-tests:distZip
> Task :unzipConformanceTestSuite
> Task :checker-framework:checker:compileJava
> Task :compileJava
> Task :classes
> Task :checker-framework:framework-test:compileJava
> Task :checker-framework:framework-test:processResources NO-SOURCE
> Task :checker-framework:framework-test:classes
> Task :checker-framework:framework-test:jar
> Task :checker-framework:checker-qual:processResources NO-SOURCE
> Task :checker-framework:checker-qual:classes UP-TO-DATE
> Task :checker-framework:checker-qual:jar
> Task :checker-framework:checker-util:processResources NO-SOURCE
> Task :checker-framework:checker-util:classes
> Task :checker-framework:checker-util:jar
> Task :checker-framework:javacutil:processResources NO-SOURCE
> Task :checker-framework:javacutil:classes UP-TO-DATE
> Task :checker-framework:javacutil:jar
> Task :checker-framework:dataflow:processResources NO-SOURCE
> Task :checker-framework:dataflow:classes UP-TO-DATE
> Task :checker-framework:dataflow:jar
> Task :checker-framework:framework:cloneAnnotatedJdk

> Task :compileTestJava FAILED
/tmp/tmp.lTJt3OVSmR/jspecify-reference-checker/src/test/java/tests/ConformanceTest.java:35: error: package org.checkerframework.framework.test does not exist
import org.checkerframework.framework.test.TestConfiguration;
                                          ^
...