Hmm, I'll try to refine it then next time we work with Ismael but can be a
setup issue or a human (bad command) issue at the end. Thanks for the help,
will make next iteration way easier probably :)


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau>

2018-01-24 23:05 GMT+01:00 Lukasz Cwik <lc...@google.com>:

> Tasks always run any dependencies that are required. So if you ask to run
> test it shouldn't run javadoc/checkstyle/... but should compile the code
> and compile the code of all dependencies. test should never have a
> dependency on checkstyle or javadoc or similar 'check' like tasks as they
> shouldn't be needed.
>
> I set up the gradle build so that everytime you run a command in gradle,
> it generates a task dependency tree dot file (look for visteg.dot inside
> build/reports). I uploaded this one to imgur[1] for the
> ':sdks:java:core:build' task to show what tasks are required. Note that
> 'sdks:java:core:test' doesn't depend on checkstyle or spotless.
>
> 1: https://imgur.com/a/ZvYUX
>
> On Wed, Jan 24, 2018 at 12:50 PM, Romain Manni-Bucau <
> rmannibu...@gmail.com> wrote:
>
>> Hmm, do I miss something or it only works for iterative runs when trying
>> to identify an issue and not for the case you rebuild due to code changes
>> (where you would need like 5-6 tasks at least - generate, compile, test,
>> ...)?
>>
>> In case it is unclear: there are 2 needs: direct execution/task ->
>> fulfilled and clarified now (just a doc issue I think), fast cycle skipping
>> not mandatory tasks like style related ones
>>
>>
>> Romain Manni-Bucau
>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> <https://rmannibucau.metawerx.net/> | Old Blog
>> <http://rmannibucau.wordpress.com> | Github
>> <https://github.com/rmannibucau> | LinkedIn
>> <https://www.linkedin.com/in/rmannibucau>
>>
>> 2018-01-24 19:50 GMT+01:00 Lukasz Cwik <lc...@google.com>:
>>
>>> Gradle already has each task explicitly broken out. Kenn is pointing out
>>> that you your development use case shouldn't use the './gradlew
>>> :sdks:java:core:build' task since it is really an aggregator that
>>> represents do everything within that project. This is the current list of
>>> tasks available for :sdks:java:core:
>>> :sdks:java:core:assemble  - Assembles the outputs of this project.
>>> :sdks:java:core:build  - Assembles and tests this project.
>>> :sdks:java:core:buildDependents  - Assembles and tests this project and
>>> all projects that depend on it.
>>> :sdks:java:core:buildEnvironment  - Displays all buildscript
>>> dependencies declared in project :sdks:java:core.
>>> :sdks:java:core:buildNeeded  - Assembles and tests this project and all
>>> projects it depends on.
>>> :sdks:java:core:check  - Runs all checks.
>>> :sdks:java:core:checkstyleMain  - Run Checkstyle analysis for main
>>> classes
>>> :sdks:java:core:checkstyleTest  - Run Checkstyle analysis for test
>>> classes
>>> :sdks:java:core:classes  - Assembles main classes.
>>> :sdks:java:core:clean  - Deletes the build directory.
>>> :sdks:java:core:compileJava  - Compiles main Java source.
>>> :sdks:java:core:compileTestJava  - Compiles test Java source.
>>> :sdks:java:core:components  - Displays the components produced by
>>> project :sdks:java:core. [incubating]
>>> :sdks:java:core:dependencies  - Displays all dependencies declared in
>>> project :sdks:java:core.
>>> :sdks:java:core:dependencyInsight  - Displays the insight into a
>>> specific dependency in project :sdks:java:core.
>>> :sdks:java:core:dependencyReport  - Generates a report about your
>>> library dependencies.
>>> :sdks:java:core:dependentComponents  - Displays the dependent
>>> components of components in project :sdks:java:core. [incubating]
>>> :sdks:java:core:findbugsMain  - Run FindBugs analysis for main classes
>>> :sdks:java:core:findbugsTest  - Run FindBugs analysis for test classes
>>> :sdks:java:core:generateAvroJava  - Generates main Avro Java source
>>> files from schema/protocol definition files.
>>> :sdks:java:core:generateAvroProtocol  - Generates main Avro protocol
>>> definition files from IDL files.
>>> :sdks:java:core:generateTestAvroJava  - Generates test Avro Java source
>>> files from schema/protocol definition files.
>>> :sdks:java:core:generateTestAvroProtocol  - Generates test Avro
>>> protocol definition files from IDL files.
>>> :sdks:java:core:help  - Displays a help message.
>>> :sdks:java:core:htmlDependencyReport  - Generates an HTML report about
>>> your library dependencies.
>>> :sdks:java:core:install  - Installs the archives artifacts into the
>>> local Maven repository.
>>> :sdks:java:core:jacocoTestCoverageVerification  - Verifies code
>>> coverage metrics based on specified rules for the test task.
>>> :sdks:java:core:jacocoTestReport  - Generates code coverage report for
>>> the test task.
>>> :sdks:java:core:jar  - Assembles a jar archive containing the main
>>> classes.
>>> :sdks:java:core:javadoc  - Generates Javadoc API documentation for the
>>> main source code.
>>> :sdks:java:core:knows  - Do you know who knows?
>>> :sdks:java:core:model  - Displays the configuration model of project
>>> :sdks:java:core. [incubating]
>>> :sdks:java:core:packageTests  -
>>> :sdks:java:core:processResources  - Processes main resources.
>>> :sdks:java:core:processTestResources  - Processes test resources.
>>> :sdks:java:core:projectReport  - Generates a report about your project.
>>> :sdks:java:core:projects  - Displays the sub-projects of project
>>> :sdks:java:core.
>>> :sdks:java:core:properties  - Displays the properties of project
>>> :sdks:java:core.
>>> :sdks:java:core:propertyReport  - Generates a report about your
>>> properties.
>>> :sdks:java:core:shadowJar  - Create a combined JAR of project and
>>> runtime dependencies
>>> :sdks:java:core:shadowTestJar  -
>>> :sdks:java:core:spotlessApply  - Applies code formatting steps to
>>> sourcecode in-place.
>>> :sdks:java:core:spotlessCheck  - Checks that sourcecode satisfies
>>> formatting steps.
>>> :sdks:java:core:spotlessJava  -
>>> :sdks:java:core:spotlessJavaApply  -
>>> :sdks:java:core:spotlessJavaCheck  -
>>> :sdks:java:core:taskReport  - Generates a report about your tasks.
>>> :sdks:java:core:tasks  - Displays the tasks runnable from project
>>> :sdks:java:core.
>>> :sdks:java:core:testClasses  - Assembles test classes.
>>> :sdks:java:core:test  - Runs the unit tests.
>>> :sdks:java:core:updateOfflineRepository  -
>>>
>>> So if you specify the ':sdks:java:core:test' task then only the tests
>>> run (and any dependent tasks which are not up to date), while 
>>> ':sdks:java:core:check'
>>> runs the suite of all checks. If your working on two modules and want to
>>> run the tests for both you really want to specify each explicit end goal
>>> that you want like ':sdks:java:core:test' and ':sdks:java:harness:test'.
>>> Unfortunately incremental builds (https://issues.apache.org/jir
>>> a/browse/BEAM-3253) are unreliable in a few of the modules (like sql
>>> and python) so you may find that you need to specify --rerun-tasks to make
>>> sure that all tasks are rerun even if Gradle thinks they are up to date.
>>>
>>> On Tue, Jan 23, 2018 at 3:38 PM, Romain Manni-Bucau <
>>> rmannibu...@gmail.com> wrote:
>>>
>>>> Can have mischecked gradle setup but I don't think we are here yet, if
>>>> you are not bound in a module and work accross 2 modules and iterate
>>>> between working on both and one, you will likely not bypass the "checks"
>>>> in  a satisfying way without a long -x command, is there a magic flag I
>>>> missed?
>>>> Also not sure about the last point and how gradle helps here - it is
>>>> rather the opposite due to the way it loads it model IMHO - so not sure
>>>> what would be the consequence in terms of action(s) but can have missed the
>>>> point.
>>>>
>>>>
>>>>
>>>> Romain Manni-Bucau
>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>>> <http://rmannibucau.wordpress.com> | Github
>>>> <https://github.com/rmannibucau> | LinkedIn
>>>> <https://www.linkedin.com/in/rmannibucau>
>>>>
>>>> 2018-01-24 0:20 GMT+01:00 Kenneth Knowles <k...@google.com>:
>>>>
>>>>> On Tue, Jan 23, 2018 at 2:51 PM, Romain Manni-Bucau <
>>>>> rmannibu...@gmail.com> wrote:
>>>>>
>>>>> Hmm, did you read it right Kenn? I think the idea was to skip all
>>>>>> validation/sanity checks tasks at once (gradle xxxx -Pfast) instead of
>>>>>> doing it manually (gradle -x findbugs -x checkstyle etc...)
>>>>>>
>>>>>
>>>>> Yes, I read it right. We all want the same thing - not doing a bunch
>>>>> of extra useless unrequested stuff when developing. The concept of 
>>>>> skipping
>>>>> is backwards. We don't need configs that skip things, because in a correct
>>>>> dependency-driven build they are already not running.
>>>>>
>>>>> So since I don't want to pretend to know gradle's invocations yet I
>>>>> will call it $TOOL. Here's a collection of imaginary commands:
>>>>>
>>>>>     $TOOL :sdks:java:core:unittest  # or $TOOL test :sdks:java:core or
>>>>> whatever
>>>>>     $TOOL :sdks:java:core:findbugs
>>>>>     $TOOL :sdks:java:core:checkstyle
>>>>>     $TOOL :sdks:java:core:javadoc
>>>>>
>>>>> None of these causes any of the others to run. Anything else is a bug.
>>>>> The `findbugs` and `test` cause a build of the needed jars and nothing 
>>>>> else.
>>>>>
>>>>> Another example:
>>>>>
>>>>>     $TOOL :runners:core-java:unittest
>>>>>
>>>>> This builds the model, the core SDK, and the runners-core module, then
>>>>> runs the unit tests of the runners-core module. It does not test SDK core,
>>>>> or run any javadoc, findbugs, or checkstyle on any module. Anything else 
>>>>> is
>>>>> a bug.
>>>>>
>>>>> Now, to build a precommit that is easy to reproduce on one line, you
>>>>> could build a compound task
>>>>>
>>>>>     $TOOL :sdks:java:core:precommit  # runs a selection of targets
>>>>> that we define
>>>>>
>>>>> At this point you might want to skip things from the :verify task
>>>>> here. But really, you probably just want to run the things you are
>>>>> interested in and you don't need custom hooks in the aggregated task.
>>>>>
>>>>> My understanding is that gradle can support all of this, if we are
>>>>> disciplined. Getting to this point is the main/only reason I supported
>>>>> gradle.
>>>>>
>>>>> Kenn
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>> Kenn
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> >>
>>>>>>>> >> diff --git a/examples/java/build.gradle
>>>>>>>> b/examples/java/build.gradle
>>>>>>>> >> index 0fc0b17df..001bd8b38 100644
>>>>>>>> >> --- a/examples/java/build.gradle
>>>>>>>> >> +++ b/examples/java/build.gradle
>>>>>>>> >> @@ -130,7 +130,7 @@ def preCommitAdditionalFlags = [
>>>>>>>> >>    dataflowStreamingRunner: [ "--streaming=true" ],
>>>>>>>> >>  ]
>>>>>>>> >>  for (String runner : preCommitRunners) {
>>>>>>>> >> -  tasks.create(name: runner + "PreCommit", type: Test) {
>>>>>>>> >> +  tasks.create(name: runner + "PreCommit", type: Test,
>>>>>>>> description: "Run tests
>>>>>>>> >> for runner ${runner.replace('Runner', '')}") {
>>>>>>>> >>      def preCommitBeamTestPipelineOptions = [
>>>>>>>> >>         "--project=apache-beam-testing",
>>>>>>>> >>         "--tempRoot=gs://temp-storage-for-end-to-end-tests",
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >> Romain Manni-Bucau
>>>>>>>> >> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>>>>>> >> <https://rmannibucau.metawerx.net/> | Old Blog
>>>>>>>> >> <http://rmannibucau.wordpress.com> | Github <
>>>>>>>> https://github.com/rmannibucau> |
>>>>>>>> >> LinkedIn <https://www.linkedin.com/in/rmannibucau>
>>>>>>>> >>
>>>>>>>> >> 2018-01-23 8:45 GMT+01:00 Jean-Baptiste Onofré <j...@nanthrax.net
>>>>>>>> >> <mailto:j...@nanthrax.net>>:
>>>>>>>> >>
>>>>>>>> >>     Hi Romain,
>>>>>>>> >>
>>>>>>>> >>     I think we are pretty close: agree to add some explicit
>>>>>>>> tasks & projects names.
>>>>>>>> >>
>>>>>>>> >>     We can add additional tasks like skipAudit, for instance.
>>>>>>>> >>
>>>>>>>> >>     As reminder, gradle tasks provides the list of tasks and
>>>>>>>> gradle projects
>>>>>>>> >>     provides the list of projects/modules.
>>>>>>>> >>
>>>>>>>> >>     Regards
>>>>>>>> >>     JB
>>>>>>>> >>
>>>>>>>> >>     On 01/23/2018 08:12 AM, Romain Manni-Bucau wrote:
>>>>>>>> >>     > Hmm, I have to admit docs dont have my favor cause they
>>>>>>>> are easily outdated and
>>>>>>>> >>     > hard to search but you hit a good point. Starting by
>>>>>>>> renaming properly the tasks
>>>>>>>> >>     > and maybe writing what is done in build files - since it
>>>>>>>> is code and even "api
>>>>>>>> >>     > for dev", it requires as much comments than the main api -
>>>>>>>> can be better to start.
>>>>>>>> >>     >
>>>>>>>> >>     > Also a big switch flag to bypass checkstyle/findbugs/...
>>>>>>>> can be good while in
>>>>>>>> >>     > dev since these phases cost a looot for nothing while you
>>>>>>>> validates your code in
>>>>>>>> >>     > runners modules for instance.
>>>>>>>> >>     >
>>>>>>>> >>     > Le 23 janv. 2018 07:15, "Kenneth Knowles" <k...@google.com
>>>>>>>> <mailto:k...@google.com>
>>>>>>>> >>     > <mailto:k...@google.com <mailto:k...@google.com>>> a écrit :
>>>>>>>> >>     >
>>>>>>>> >>     >     On Mon, Jan 22, 2018 at 10:03 PM, Romain Manni-Bucau <
>>>>>>>> rmannibu...@gmail.com <mailto:rmannibu...@gmail.com>
>>>>>>>> >>     >     <mailto:rmannibu...@gmail.com <mailto:
>>>>>>>> rmannibu...@gmail.com>>> wrote:
>>>>>>>> >>     >
>>>>>>>> >>     >         @Kenneth: why not dropping the doc for a script
>>>>>>>> with comments in the
>>>>>>>> >>     >         project? A "RUNME.sh" ;).
>>>>>>>> >>     >
>>>>>>>> >>     >
>>>>>>>> >>     >     That's cool, too, but also any shell one liner can be
>>>>>>>> a gradle one
>>>>>>>> >>     liner or
>>>>>>>> >>     >     mvn two/three liner :-). it is just trading one
>>>>>>>> command that you cannot
>>>>>>>> >>     >     guess easily for a different one that you still can't
>>>>>>>> guess easily.
>>>>>>>> >>     >
>>>>>>>> >>     >     For example, are the SparkRunner ValidatesRunner tests
>>>>>>>> in the
>>>>>>>> >>     SparkRunner or
>>>>>>>> >>     >     the core SDK or a third module that integrates the
>>>>>>>> two? And why would you
>>>>>>>> >>     >     know that the example ITs are called
>>>>>>>> "sparkRunnerPreCommit"? It
>>>>>>>> >>     doesn't even
>>>>>>>> >>     >     make sense really to have "precommit" or "postcommit"
>>>>>>>> except as aliases to
>>>>>>>> >>     >     make it easy to repro Jenkins' behavior - they have no
>>>>>>>> other intrinsic
>>>>>>>> >>     meaning.
>>>>>>>> >>     >
>>>>>>>> >>     >     So I was proposing a mapping from "full sentence +
>>>>>>>> description" to one
>>>>>>>> >>     liner
>>>>>>>> >>     >     to help people navigate the targets that we set up.
>>>>>>>> Some web page or doc
>>>>>>>> >>     >     that people can just quickly scan to find out to do
>>>>>>>> common things, easier
>>>>>>>> >>     >     than groovy or XML.
>>>>>>>> >>     >
>>>>>>>> >>     >     Kenn
>>>>>>>> >>     >
>>>>>>>> >>     >
>>>>>>>> >>
>>>>>>>> >>     --
>>>>>>>> >>     Jean-Baptiste Onofré
>>>>>>>> >>     jbono...@apache.org <mailto:jbono...@apache.org>
>>>>>>>> >>     http://blog.nanthrax.net
>>>>>>>> >>     Talend - http://www.talend.com
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >
>>>>>>>> > --
>>>>>>>> > Jean-Baptiste Onofré
>>>>>>>> > jbono...@apache.org
>>>>>>>> > http://blog.nanthrax.net
>>>>>>>> > Talend - http://www.talend.com
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to