-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release 1.0 Refactoring #858
Draft
lacasseio
wants to merge
579
commits into
master
Choose a base branch
from
lacasseio/release-1.0-development
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Display name should be available on all ModelElement. Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
The wrapper simply wrap the generic type into a Component or Variant. At the moment those wrapper types are hand implemented. The reason for being so strict on the types is because we want to embrace as much as possible compile time checking. Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
It's not our job to solve fundamental issues with Gradle and IntelliJ. Complains to them instead. Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
This helps standardize the configuration. Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
We should have a specific API for this use case, but for now, this solution is good enough. Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
We will circle back to those project later. Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Signed-off-by: Daniel Lacasse <daniel@nokee.dev>
Is there something users can do to help? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is a cumulation of changes that will make up the relaunch of Nokee into version 1.0. The main focus of this PR is to reduce the divergence between the Nokee codebase and Gradle direction.
How did we get here?
TL;DR: By working around numerous Gradle issues, we painted ourselves in a corner.
When we first started Nokee, we focused on getting things out quickly, like how the newer core native plugins were developed. When we expanded toward more "different" types of domain objects, we fell prey to the significant lack of support for complex domains in Gradle. Just like the software model, we tried to solve it... but in a more pragmatic way. We asked ourselves, "What's the essence of Gradle?" in other words, "where should Gradle evolve if it wants to support complex software domains like the native ecosystem?" Our original direction wasn't wrong; it's still a valid interpretation of how Gradle could have evolved. We speak in the past tense here because reality shows a different story of how Gradle evolved. Unfortunately, our road was littered with Gradle issues. What started as one workaround soon became a magnitude that is unmanageable in the long term. While working on the Xcode build adapter, we identified more than 70 issues that we worked around, one way or another. Then, Gradle took a different turn. Things that we expected to be stable and future-proof started changing, which caused many headaches regarding support. The Gradle team does a great job pushing the tool forward, but little is done for plugin authors. On top of the Gradle issues, we also had our design issues, mainly the composition of the Nokee plugins (and domain objects), to solve more complicated build setups. Let's not forget to mention the long-overdue support for Conan and Vcpkg.
What's next?
TL;DR: We refactored the universal model into the thinnest layer over vanilla Gradle with the least amount of workaround with a focus on composability for all native domain objects.
This PR started as another experiment (we did too many to count at this point) to see how little we need to solve just the native domain. Anything that is Gradle-specific is not our problem anymore; take it to the Gradle team. The work is done in two pillars: the universal model and the composibility of the native domain. We use the term "universal model" as a reference to the infrastructure that allows us to deal with the configuration requirement of the native domain. In this PR, we slimed the entire infrastructure to the thinnest layer possible over vanilla Gradle. We removed all our internal API usage and strictly focused on the contract of this universal model (meaning it could be implemented in many different ways; ours is just one way to do it). We also focus hard on making the universal model "optional" (up to a point). From the user's perspective, the universal model is invisible; the users deal with domain objects like any other vanilla plugin.
The second aspect is the composability of our native domain objects to achieve a more complex build configuration. We are unsure if we will get to the final design by the 1.0 release, but we have made much good progress. Notable changes are:
CLibrary
,CppApplication
, etc.) in favour of composing the language directly into native componentsapplication.cSources
,library.publicHeaders
.Why no v0.5 release?
TL;DR: We decided on pushing some breaking changes that make the Nokee much better, so we will jump straight to 1.0 and a life-at-head release cadence.
Our v0.5 was the forever release due to figuring out the age-old question: how do we deal with the variant explosion of the native ecosystem? One of the most critical requirements for the refactoring was to solve the discovery processes. For those unfamiliar with those problems, here's a quick rundown:
*DomainObjectContainer.register
); how do we know which domain object to realize to access our requested tasks?How will release 1.0 affect my build?
Raise your hand (send us an email), and we will help you go over any required migration steps. In most cases, it should make your build simpler.