-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
Baseline for a Java generator from CRD #3693
Conversation
Can one of the admins verify this patch? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The approach looks sound and covered by tests. Made some comments but there are more about code style than flaws that'd prevent this from getting merged. Some documentation on how to use the generator would help but if it covers your needs, I don't see why it shouldn't be merged.
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java
Outdated
Show resolved
Hide resolved
3ae491d
to
dd271c2
Compare
@metacosm I believe I addressed all of your notes, and improved a little even the checks from Sonar. 😄 ready for next round! |
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Outdated
Show resolved
Hide resolved
1e00e48
to
a5f580c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Hi @andreaTP - maybe this is a silly question, but to be honest I couldn't have a proper look to the sources, yet, so I might be missing something. At a quick glance I noticed a test for a keycloak CRD, which includes descriptions for Is it the desired behavior to have the relevant approval test not expecting for any comment on class or accessors? i.e. would it be reasonable to expect for Javadoc to be generated for getters/setters from properties description as well? BTW - about accessors, has lombok been evaluated for generated sources? |
Hi @fabiobrz , I was actually adding support for Not sure about
Currently the generated classes are annotated with |
Sure, makes sense. I was just wondering whether it is going to be evaluated (and merged once done) as a baseline, e.g.: like a tech preview of a feature that will be completed in the future, or whether this will be considered as a draft, which I assume it shall not, since well... it is not marked as Draft :)
That is ok, meaning that OpenAPI generators would be able to restore the description from the Java model, which is ok. But IIUC, it is not about Javadoc ending up in the generated model.
Sure, thanks. BTW - looking at the sources, Javadoc comments should be supported, e.g. for fields: https://github.com/javaparser/javaparser/blob/master/javaparser-core/src/main/java/com/github/javaparser/ast/body/FieldDeclaration.java#L61 |
The agreed approach is to use this baseline, as you said, as a "tech preview that will be completed in the future". Especially in order to receive proper PR reviews for the upcoming development/bug-fixes/features implementation. |
Yes, it's better to proceed incrementally than keep piling on an already big PR. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @andreaTP - since I looked into the code a bit yesterday, I thought I could provide an additional review.
Basically I dropped just minor comments but feel free to let me know what you think, if you think it could be useful.
<dependency> | ||
<groupId>com.approvaltests</groupId> | ||
<artifactId>approvaltests</artifactId> | ||
<version>12.3.2</version> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What about having properties for all the literal versions that have been used both in here and in the CLI POM?
Maybe even a <dependencyManagment>
section at the parent (i.e. java-generator
) level would do. WDYT?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this sub-module, especially for testing, we are using libraries that are only used here ... I don't have a strong opinion but, I think that this can be fixed as soon as we share more (e.g. with the crd-generator
)
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/WritableCRCompilationUnit.java
Outdated
Show resolved
Hide resolved
cause); | ||
} | ||
} else { | ||
// Warning ??? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At least IMHO it should definitely be logged.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have the code to remove the corresponding if
along with the warning above, this should not happen at all.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As stated previously, it is ok to me if this will be tracked as a future improvement, thanks!
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/JPrimitive.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/JavaNameAndType.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/Keywords.java
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/JArray.java
Outdated
Show resolved
Hide resolved
867a4ab
to
18f64ee
Compare
@fabiobrz I targeted most of your comments, please, bear in mind that this is a "Baseline", I'm trying hard to not pile up more code/changes on this already reviewed PR. I'll be happy to catch up (and/or review contributions ❤️ ) after this one gets in 🙂 . |
Fully agree @andreaTP, I am happy with how you addressed my comments, thanks! |
18f64ee
to
76d4609
Compare
For the little Picocli CLI, What about using Quarkus ?
|
@sunix I have no objections and I see the advantages, but I do believe that the Quarkus integration (along with CI to release the binaries etc. etc.) should be done in a separate PR as this one is already really big. |
@manusa I really need your final review here to, eventually, sign-off this PR 🙏
I'm available and happy to facilitate this review in any possible way (pairing etc. etc.). |
FWIW, I was able to compile and run this against a go-generated CRD we're using, and it looked okay at a glance 👍🏼 Haven't copied over the classes to the actual project, though. |
java-generator/core/src/test/java/io/fabric8/java/generator/ApprovalTest.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java
Outdated
Show resolved
Hide resolved
java-generator/core/src/main/java/io/fabric8/java/generator/CRGeneratorRunner.java
Outdated
Show resolved
Hide resolved
Trying to test now, I'm getting errors with multi-document YAMLs. I understand this feature is not implemented yet. |
A test with cert-manager.crds.yaml.txt produced invalid code. Apparently enums can have spaces 😳 Maybe for this case, things can be simplified when dealing with enums by using |
9004fba
to
220d114
Compare
@manusa thanks for the review!!!
yup, let's implement this on another iteration, should be easy but there is already quite a lot here already.
Not only spaces but also
Should be ready for another round! 🚀 |
220d114
to
4208ded
Compare
4208ded
to
db76f7e
Compare
Kudos, SonarCloud Quality Gate passed! |
Sorry for being so picky, but I understand that the enum behavior is not OK. The code is compilable now, but if used, it will generate invalid resources. I think that it might be better to use enums only if we are able to parse them. For example, for the cert-manager, instead of generating a field Probably this would also "fix" the issue with the numbers. |
As agreed, we merge this so that we can work iteratively on the current known limitations. |
Hello all, I added a PR to create a Docker image from this package! #3821 |
I just noticed that I don't think Go operator type // +kubebuilder:default=1
Replicas int32 `json:"replicaCount,omitempty"` YAML CRD replicaCount:
default: 1
format: int32
type: integer Generated Java @JsonProperty("replicas")
private Integer replicas; |
@OneCricketeer correct, Do you mind to open an issue for this? |
Thanks @OneCricketeer , appreciated! |
Description
As discussed here I prepared a baseline for the development of the feature requested in #3642
If you prefer me to target a branch other than
master
just tell me 🙂This requires some more work to consider it "shippable", but, on top of my previous POC I have added the following:
cc. @metacosm @manusa @rohanKanojia
Type of change
test, version modification, documentation, etc.)
Checklist