I followed Udi's suggestion for disabling the annotations (
https://github.com/apache/beam/pull/12944) and filed a JIRA to revert it (
https://issues.apache.org/jira/browse/BEAM-10977) once the issue is
resolved.

On Thu, Sep 24, 2020 at 11:15 AM Robert Bradshaw <rober...@google.com>
wrote:

> I have found the code coverage to be useful when it pertains to the diff
> in question, but often it seems to be based on something else (which is
> also where it gets really noisy). Perhaps it would make sense to hide them
> by default until this is resolved.
>
> On Thu, Sep 24, 2020 at 11:11 AM Udi Meiri <eh...@google.com> wrote:
>
>> I was hoping to use code coverage as a tool in reviews, to tell me if an
>> important or significant amount of code is not tested.
>> As for reviewer requirements, we should probably discuss that here.
>>
>> On Thu, Sep 24, 2020 at 10:25 AM Ahmet Altay <al...@google.com> wrote:
>>
>>>
>>>
>>> On Wed, Sep 23, 2020 at 5:49 PM Udi Meiri <eh...@google.com> wrote:
>>>
>>>> You can hide annotations in the UI when looking at the diff (under the
>>>> ... menu).
>>>>
>>>> https://docs.codecov.io/docs/github-checks-beta#hiding-annotations-in-the-files-view
>>>>
>>>
>>> Thank you. If it is just me, and if this is a one time thing I am happy
>>> to do this. This raises a question, if we are allowed to hide annotations,
>>> can we also ignore their messages during a review?
>>>
>>>
>>>>
>>>>
>>>> There is an option to disable annotations (I'm not opposed to it):
>>>> https://docs.codecov.io/docs/codecovyml-reference#github_checks-github-users-only
>>>>
>>>
>>> What do others think? Can we improve codecov settings to be more
>>> specific as an alternative? How much room we have for improvement?
>>>
>>>
>>>>
>>>>
>>>> On Wed, Sep 23, 2020 at 3:07 PM Ahmet Altay <al...@google.com> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> Thank you for adding this.
>>>>>
>>>>> I have a few questions. codecov reports are crowding the PR reviews
>>>>> quite a bit. Is it possible that there is a misconfiguration? Could we
>>>>> limit the annotations to files in review? Would it make sense/possible to
>>>>> disable the annotations by default?
>>>>>
>>>>> /cc @Yifan Mai <yifan...@google.com> - had similar questions.
>>>>>
>>>>> Thank you,
>>>>> Ahmet
>>>>>
>>>>>
>>>>> On Mon, Jul 6, 2020 at 4:08 PM Udi Meiri <eh...@google.com> wrote:
>>>>>
>>>>>> The idea was to add coverage to one of the already run precommit tox
>>>>>> tasks. This should keep the additional overhead to a minimum.
>>>>>> py37-cloud is the current candidate, since it contains the most
>>>>>> dependencies so fewer tests are skipped.
>>>>>> Saavan, do you have an estimate for the overhead?
>>>>>>
>>>>>> Once coverage information is available, we could make use of it for
>>>>>> review purposes.
>>>>>>
>>>>>>
>>>>>> On Mon, Jul 6, 2020 at 3:06 PM Mikhail Gryzykhin <
>>>>>> gryzykhin.mikh...@gmail.com> wrote:
>>>>>>
>>>>>>> I wouldn't consider build time as a blocker to add report. Even if
>>>>>>> build time is rather slower, we can run coverage report periodically as 
>>>>>>> a
>>>>>>> separate job and still get use of it.
>>>>>>>
>>>>>>> On Mon, Jul 6, 2020, 2:38 PM Robert Bradshaw <rober...@google.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> This sounds useful to me, and as it's purely informational would be
>>>>>>>> a
>>>>>>>> low cost to try out. The one question is how it would impact build
>>>>>>>> runtimes--do you have an estimate for what the cost is here?
>>>>>>>>
>>>>>>>> On Sun, Jul 5, 2020 at 1:14 PM Saavan Nanavati <saa...@google.com>
>>>>>>>> wrote:
>>>>>>>> >
>>>>>>>> > Hey everyone,
>>>>>>>> >
>>>>>>>> > Currently, during the Jenkins build process, we don't generate
>>>>>>>> any code coverage reports for the Python SDK. This email includes a
>>>>>>>> proposal to generate python coverage reports during the pre-commit 
>>>>>>>> build,
>>>>>>>> upload them to codecov.io for analysis and visualization, and
>>>>>>>> automatically post the resulting stats back to GitHub PRs to help
>>>>>>>> developers decide whether their tests need revision.
>>>>>>>> >
>>>>>>>> > You can view/comment on the proposal here, or the full text of
>>>>>>>> the proposal at the end of this email. Let me know what you think, or 
>>>>>>>> if
>>>>>>>> there are any suggestions for improvements. Thanks!
>>>>>>>> >
>>>>>>>> > Python Coverage Reports For CI/CD
>>>>>>>> >
>>>>>>>> > Author: Saavan Nanavati (saa...@google.com)
>>>>>>>> >
>>>>>>>> > Reviewer: Udi Meiri (eh...@google.com)
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Overview
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > This is a proposal for generating code coverage reports for the
>>>>>>>> Python SDK during Jenkins’ pre-commit phase, and uploading them to
>>>>>>>> codecov.io for analysis, with integration back into GitHub using
>>>>>>>> the service’s sister app.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > This would extend the pre-commit build time but provide valuable
>>>>>>>> information for developers to revise and improve their tests before 
>>>>>>>> their
>>>>>>>> PR is merged, rather than after when it’s less likely developers will 
>>>>>>>> go
>>>>>>>> back to improve their coverage numbers.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > This particular 3rd party service has a litany of awesome
>>>>>>>> benefits:
>>>>>>>> >
>>>>>>>> > It’s free for open-source projects
>>>>>>>> >
>>>>>>>> > It seamlessly integrates into GitHub via a comment-bot (example
>>>>>>>> here)
>>>>>>>> >
>>>>>>>> > It overlays coverage report information directly onto GitHub code
>>>>>>>> using Sourcegraph
>>>>>>>> >
>>>>>>>> > It requires no changes to Jenkins, thereby reducing the risk of
>>>>>>>> breaking the live test-infra
>>>>>>>> >
>>>>>>>> > It’s extensible and can later be used for the Java & Go SDKs if
>>>>>>>> it proves to be awesome
>>>>>>>> >
>>>>>>>> > It has an extremely responsive support team that’s happy to help
>>>>>>>> open-source projects
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > A proof-of-concept can be seen here and here.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Goals
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Provide coverage stats for the Python SDK that update with every
>>>>>>>> pre-commit run
>>>>>>>> >
>>>>>>>> > Integrate these reports into GitHub so developers can take
>>>>>>>> advantage of the information
>>>>>>>> >
>>>>>>>> > Open a discussion for how these coverage results can be utilized
>>>>>>>> in code reviews
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Non-Goals
>>>>>>>> >
>>>>>>>> > Calculate coverage statistics using external tests located
>>>>>>>> outside of the Python SDK
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > This is ideal, but would require not only merging multiple
>>>>>>>> coverage reports together but, more importantly, waiting for these 
>>>>>>>> tests to
>>>>>>>> be triggered in the first place. The main advantage of calculating 
>>>>>>>> coverage
>>>>>>>> during pre-commit is that developers can revise their PRs before 
>>>>>>>> merging,
>>>>>>>> which is not guaranteed if this is a goal.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > However, it could be something to explore for the future.
>>>>>>>> >
>>>>>>>> > Background
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Providing code coverage for the Python SDK has been a problem
>>>>>>>> since at least 2017 (BEAM-2762) with the previous solution being to
>>>>>>>> calculate coverage in post-commit with coverage.py, and then sending 
>>>>>>>> the
>>>>>>>> report to coveralls.io which would post to GitHub. At some point,
>>>>>>>> this solution broke and the Tox environment used to compute coverage,
>>>>>>>> cover, was turned off but still remains in the codebase.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > There have been 4 main barriers, in the past, to re-implementing
>>>>>>>> coverage that will be addressed here.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > It’s difficult to unify coverage for some integration tests,
>>>>>>>> especially ones that rely on 3rd party dependencies like GCP since 
>>>>>>>> it’s not
>>>>>>>> possible to calculate coverage for the dependencies.
>>>>>>>> >
>>>>>>>> > As stated earlier, this is a non-goal for the proposal.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > The test reporter outputs results in the same directory which
>>>>>>>> sometimes causes previous results to be overwritten. This occurs when 
>>>>>>>> using
>>>>>>>> different parameters for the same test (e.g. running a test with 
>>>>>>>> Dataflow
>>>>>>>> vs DirectRunner).
>>>>>>>> >
>>>>>>>> > This was mainly a post-commit problem but it does require
>>>>>>>> exploration since it could be an issue for pre-commit. However, even 
>>>>>>>> in the
>>>>>>>> worst case, the coverage numbers would still be valuable since you can
>>>>>>>> still see how coverage changed relatively between commits even if the
>>>>>>>> absolute numbers are slightly inaccurate.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > It’s time-consuming and non-trivial to modify and test changes to
>>>>>>>> Jenkins
>>>>>>>> >
>>>>>>>> > We don’t need to - this proposal integrates directly with
>>>>>>>> codecov.io, making Jenkins an irrelevant part of the testing
>>>>>>>> infrastructure with regards to code coverage - it’s not just easier, 
>>>>>>>> it’s
>>>>>>>> better because it provides many benefits (mentioned in the Overview
>>>>>>>> section) that a Jenkins-based solution like Cobertura doesn’t have. 
>>>>>>>> Lastly,
>>>>>>>> using codecov.io would place less strain and maintenance on
>>>>>>>> Jenkins (less jobs to run, no need for storing the reports, etc.).
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > coveralls.io isn’t the best to work with (email thread)
>>>>>>>> >
>>>>>>>> > codecov.io ;)
>>>>>>>> >
>>>>>>>> > Design Details
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > To utilize codecov.io, the existing Tox environment cover needs
>>>>>>>> to be added to the list of toxTasks that Gradle will run in 
>>>>>>>> pre-commit. To
>>>>>>>> reduce strain (and more-or-less duplicate information), coverage only 
>>>>>>>> needs
>>>>>>>> to be calculated for one Python version (say 3.7, with cloud 
>>>>>>>> dependencies)
>>>>>>>> rather than all of them.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > To be compatible with Jenkins and codecov.io, the Tox
>>>>>>>> environment should be configured as follows:
>>>>>>>> >
>>>>>>>> > passenv = GIT_* BUILD_* ghprb* CHANGE_ID BRANCH_NAME JENKINS_*
>>>>>>>> CODECOV_*
>>>>>>>> >
>>>>>>>> > deps =
>>>>>>>> >
>>>>>>>> > ...
>>>>>>>> >
>>>>>>>> > codecov
>>>>>>>> >
>>>>>>>> > commands =
>>>>>>>> >
>>>>>>>> > ...
>>>>>>>> >
>>>>>>>> > codecov -t CODECOV_TOKEN
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > There are two options for what goes into the ellipsis (...)
>>>>>>>> First, we can use coverage.py to compute coverage (which is how it’s
>>>>>>>> currently set up) but that uses the old nose test runner. 
>>>>>>>> Alternatively, we
>>>>>>>> can switch to computing coverage with pytest and pytest-cov, which 
>>>>>>>> would
>>>>>>>> give more accurate numbers, and is the preferred solution.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Additionally, the CODECOV_TOKEN, which can be retrieved here,
>>>>>>>> should be added as an environment variable in Jenkins.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > Finally, a YAML file should be added so codecov.io can resolve
>>>>>>>> file path errors. This can also be used to define success thresholds 
>>>>>>>> and
>>>>>>>> more (for example, here) though, ideally, this coverage task should 
>>>>>>>> never
>>>>>>>> fail a Jenkins build due to the risk of false-negatives.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > A proof-of-concept for this design can be seen here and here
>>>>>>>> (this is code coverage for my fork).
>>>>>>>> >
>>>>>>>> >
>>>>>>>>
>>>>>>>

Reply via email to