Hello,

What about adding observability to the building process? In this way we can
have information about the root causes of the issues during the building
time.

A OSS suggestion:

https://github.com/craigatk/opentelemetry-gradle-plugin

Regards

Victor

El dom, 1 sept 2024 a las 10:06, James Dailey (<jamespdai...@gmail.com>)
escribió:

> +1  agree
> How do we tackle this ?
>
> On Sun, Sep 1, 2024 at 7:49 AM Avik Ganguly <a...@fynarfin.io> wrote:
>
>> Still, when eg. 2 tests fail out of the 1100+ on a Github build, it's a
>>> horror to find out which ones failed, and our best bet is to text-search
>>> for "FAILED" in the 17000+ lines of output.
>>
>> +1
>>
>> Items like this should be high priority in CI improvements epic. The
>> overall failed test history, flaky test history, log tracing problem
>> (actual result is often not sufficient to quickly debug and linking logs to
>> a failed test case is important) were historically connected to getting PRs
>> merged in time. CircleCI has helped us with the first two parts of this
>> problem.
>>
>> just by splitting up the code as is and moving some classes to different
>>> project modules is not really taking into account the interdependencies...
>>> if we don't address those then the project modules are not really helpful
>>> (actually it's adds more work to the Gradle builds)
>>
>> I had overestimated what Fineract modularization design efforts have
>> achieved. Would be interesting to know more about the design here as
>> "splitting up the code as is" can be helped with more clarity.
>>
>>
>> On Thu, Aug 8, 2024 at 8:02 PM Aleksandar Vidakovic <
>> chee...@monkeysintown.com> wrote:
>>
>>> Kristof,
>>>
>>> ... great overview, so first: thanks for that. Some notes...
>>>
>>> Repeatable builds: we should consider this as a major bug and not just
>>> "gloss over" it by executing the build multiple times... stuff like this
>>> should halt all current development on other features and everyone (or at
>>> least one person) should focus on fixing this as soon as possible. I would
>>> consider this also a show stopper for a release.
>>>
>>> Dirty checks: we were actually at one point (2+ years?) not too bad
>>> here, but it seems that this is now actually worse than before... my bet is
>>> that we introduced some performance hogs by splitting up the code base into
>>> separate project modules; this didn't really fix the main problem of the
>>> source code (too many interdependencies between packages aka "modules");
>>> just by splitting up the code as is and moving some classes to different
>>> project modules is not really taking into account the interdependencies...
>>> if we don't address those then the project modules are not really helpful
>>> (actually it's adds more work to the Gradle builds), neither for publishing
>>> them on Maven central nor chopping up the code into smaller pieces and
>>> taking full advantage of caching.
>>>
>>> Caching: disabling caching is just not such a good idea... at all...
>>> again: I would consider this a major bug and halt all machines until it's
>>> fixed; also: consider this a show stopper for releases.
>>>
>>> Console readability: we've talked about this already on occasions (there
>>> might be even a mailing list message)... on every upgrade of the
>>> dependencies (including the quality assurance tools like Errorprone etc.)
>>> the screws get tightened (read: rules get stricter); I remember that after
>>> one upgrade (maybe last year, maybe longer ago) I had to disable some rule
>>> enforcements, because the reported style and quality checks literally
>>> exploded; holding back on Errorprone (and similar) upgrades is obviously
>>> not a solution; I tried to be conservative (just disabled those that
>>> brought the build to a halt aka that were reported as errors), but as we
>>> can see there are enough warnings left to drive everyone crazy; btw:
>>> disabling the rules with certain annotations is neither a solution, that's
>>> also avoiding to fix the quality issues.
>>>
>>> Suggestions:
>>>
>>>    - let's make an effort to reduce the interdependencies between
>>>    packages aka "modules" before we rip the code apart and move it to 
>>> separate
>>>    project modules; if we can't do that (backwards compatibility, not 
>>> allowed
>>>    to "break eggs" etc.) then let's leave the code in one place as is... I 
>>> see
>>>    no added value of having classes in different jar files when it hurts 
>>> build
>>>    performance
>>>    - let's spend time and fix those style and quality issues, not just
>>>    pile feature on feature on feature... I am pretty sure that everyone can
>>>    grab a handful of those warnings and fix them as part of their PRs (even 
>>> if
>>>    it's not one that is explicitly dedicated to quality assurance), in other
>>>    words: everyone look a bit left and right to see what ELSE you can 
>>> fix/add
>>>    in addition to your tasks (chores vs cherry picking)... fixing everything
>>>    in one PR is obviously not practical; we'll have a thousand files
>>>    changed... this will interrupt everyone else quite significantly and is a
>>>    nightmare to review
>>>    - there might be less than a handful of Gradle build constraints
>>>    that are again too paranoid and mess up the build; I think it's worth
>>>    looking at the OpenAPI yaml build... that one had issues in the past with
>>>    proper dirty checks, but there might be other/new constraints that are
>>>    equally unhelpful
>>>
>>> My 2 cents
>>>
>>> Aleks
>>>
>>>
>>>
>>> On Thu, Aug 8, 2024 at 3:47 PM Kristof Jozsa <kristof.jo...@gmail.com>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> After working with Fineract for some months now, I collected several
>>>> issues related to the Gradle build system we have in place. I categorized
>>>> my pain points, and would like to initiate a discussion on the topic with
>>>> the community. My usage scenarios include building locally with
>>>> IntelliJ+Gradle wrapper, building locally from CLI and using the Github
>>>> build from the web UI.
>>>>
>>>> The problems I gathered fall into the following categories:
>>>>
>>>> - *REPEATABLE BUILDS:* starting Fineract from IntelliJ always fails
>>>> for the first time with:
>>>> Caused by: java.lang.IllegalArgumentException: Couldn't bind
>>>> FineractProperties to the 'fineract' property
>>>> and simply trying it again always makes it wor0k.
>>>>
>>>> - *DIRTY CHECKS*: modifying a single file (eg. put a newline character
>>>> into the Loan class) and restarting Fineract makes it "build" for 17-18
>>>> seconds (checking all modules to be up-to-date) before starting it again.
>>>> This happens on my 16 core Intel i7 HQ CPU with 64Gb of RAM, eating up to
>>>> 800% CPU and spinning up all the vents in my rig while doing so.
>>>>
>>>> - *INTEGRATION TESTS*: the same dirty check problem happens when
>>>> working with tests as well. Adding a blank line to an existing test class
>>>> and re-running the test again happens after a ~20 seconds "rebuild"
>>>> process. This leads to painfully slow code-test cycles at local
>>>> development.
>>>>
>>>> - *RESOURCE REQUIREMENTS*: local team reports that in cases the Gradle
>>>> daemon repeatedly grows up to 8Gb memory usage. That causes issues with dev
>>>> boxes having 16Gb or even less RAM.. Even using my high-spec dev box, I
>>>> needed to add GRADLE_OPTS="-Dorg.gradle.workers.max=12
>>>> -Dorg.gradle.priority=low" to keep my desktop responsible during local
>>>> builds.
>>>>
>>>> - *CACHING*: I see many team members and mailing list members
>>>> recommending `--no-build-cache --no-daemon` settings when invoking
>>>> gradle, to avoid issues with our build. This kind of denies even any
>>>> potential adventages of using Gradle over more stable build tools. Note,
>>>> that I do not use these settings (so my issues are definetely not caused by
>>>> this), but I keep getting this recommendation for a reason.
>>>>
>>>> - *CONSOLE READABILITY*: I also see many fellow devs suggesting
>>>> running gradle with `--console=plain` to get some chance to read the
>>>> logs in a sensible way. Still, when eg. 2 tests fail out of the 1100+ on a
>>>> Github build, it's a horror to find out which ones failed, and our best bet
>>>> is to text-search for "FAILED" in the 17000+ lines of output.
>>>>
>>>> - *REPORTING COMPILE ERRORS*: related to the previous point, check
>>>> https://github.com/kjozsa/fineract/actions/runs/10302318345/job/28515733682
>>>> for a perfect example. Here at line 1489 Gradle shows
>>>> > Task :fineract-loan:compileJava FAILED
>>>> and shows a couple of warnings below, but the actual error is shown at
>>>> line 1393 which appears to be part of
>>>> > Task :fineract-document:modernizer
>>>> which is clearly misleading, and your best bet to find the actual error
>>>> on Github is to search for "error: ", but NOT using Ctrl+F, but the
>>>> search box at the top right corner. That's ridiculous - a sensible build
>>>> tool should communicate build errors in a straightforward way.
>>>>
>>>> I'd like to ask you to share your experiences and pain points with the
>>>> current build that we have and use every day. Once we have a clearer
>>>> understanding of the areas that need improvement, we can discuss potential
>>>> strategies to revise our build system and ensure it meets basic
>>>> requirements.To be fair, please also make sure you share any recent
>>>> positive experiences related to Fineract builds, if you have any.
>>>>
>>>> Thanks,
>>>> Kristof
>>>>
>>>>

Reply via email to