-
Notifications
You must be signed in to change notification settings - Fork 53
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
feat: Multiple schema file support in schema add #3352
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #3352 +/- ##
===========================================
- Coverage 78.46% 78.45% -0.01%
===========================================
Files 392 392
Lines 35688 35707 +19
===========================================
+ Hits 28001 28013 +12
- Misses 6054 6059 +5
- Partials 1633 1635 +2
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 13 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
|
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.
question: Why is this a draft PR?
todo: Please add some tests.
@@ -36,40 +36,56 @@ Example: add from an argument string: | |||
Example: add from file: | |||
defradb client schema add -f schema.graphql | |||
|
|||
Example: add from multiple files: | |||
defradb client schema add -f schema1.graphql -f schema2.graphql |
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.
thought: IMO it would be nice to standardise this, so that all file-based inputs can be expected to work the same way.
Example: add from stdin: | ||
cat schema.graphql | defradb client schema add - | ||
|
||
Learn more about the DefraDB GraphQL Schema Language on https://docs.source.network.`, | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
store := mustGetContextStore(cmd) | ||
|
||
var schema string | ||
var combinedSchema string |
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.
praise: This is a nice and simple way of ensure the whole operation takes place in a single txn.
thought: This does introduce a difference between the 3 clients - it might be nicer for users if instead we changed the other 2 to accept multiple strings. You would then be able to test this using integration tests instead of CLI specific stuff.
I think there is also an argument to be had that without changing the other 2 clients, the CLI should not have this feature, and instead users can just use cat
/type
in their terminal.
cli/schema_add.go
Outdated
for _, schemaFile := range schemaFiles { | ||
data, err := os.ReadFile(schemaFile) | ||
if err != nil { | ||
return fmt.Errorf("failed to read file %s: %w", schemaFile, err) |
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.
todo: please move the errors to the cli/errors.go
file.
cli/schema_add.go
Outdated
data, err := io.ReadAll(cmd.InOrStdin()) | ||
if err != nil { | ||
return err | ||
return fmt.Errorf("failed to read schema from stdin: %w", err) |
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.
todo: please move the errors to the cli/errors.go
file.
cli/schema_add.go
Outdated
if err != nil { | ||
return fmt.Errorf("failed to add schema: %w", err) |
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.
todo: please move the errors to the cli/errors.go
file.
@@ -29,8 +32,8 @@ defradb client schema add [schema] [flags] | |||
### Options | |||
|
|||
``` | |||
-f, --file string File to load a schema from | |||
-h, --help help for add | |||
-f, --file strings File(s) to load schema from |
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.
thought: saying strings
over string
kind of signals to me that this is valid:
defradb client schema add -f "schema1.graphql" "schema2.graphql"
rather than:
defradb client schema add -f "schema1.graphql" -f "schema2.graphql"
non-blocking: because maybe it might just be me
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 prefer your suggestion, but I have a vague memory of the team having this discussion and deciding on the multiple -f
s. I hope I am wrong though :)
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 an opinion on this, but not a strong one. Happy to go with the team consensus (or majority opinion.)
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 don't have a strong prefer at all on the approach we take. My thought was only on the changed documentation in this PR, I think it should say string
instead of strings
if we are going with the approach introduced in this PR (2.
above).
Happy with strings
terminology if we are switching to 1.
above.
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.
Oh, I see where you are coming from now. Hmm... I think I agree. I will be changing that to the singular as you suggest.
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.
Sorry commented on the main PR thread, can continue here if you like: #3352 (comment)
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, thanks Chris!
Approving now, on condition that:
- Shahzad is happy with the
f
flag docs - You have manually tested this with multiple SDLs
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.
Thanks for taking care of this, don't forget to change to string
as I still see it as strings
still.
Also please do make an issue to do a similar change for other file arguments in other cli commands (like Andy suggested) if they won't be done in this PR.
func NewErrFailedToReadSchemaFile(schemaFile string, inner error) error { | ||
return errors.Wrap(fmt.Sprintf("failed to read file %s", schemaFile), inner) | ||
} | ||
|
||
func NewErrFailedToReadSchemaFromStdin(inner error) error { | ||
return errors.Wrap("failed to read schema from stdin", inner) | ||
} | ||
|
||
func NewErrFailedToAddSchema(inner error) error { | ||
return errors.Wrap("failed to add schema", inner) | ||
} |
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.
praise: Thanks for doing this suggestion :)
thought/question: Looking at the way I have a hunch that both the I haven't tested, but I suspect that: defradb client schema add -f="schema1.graphql,schema2.graphql" -f="schema3.graphql" Will result in all 3 files being loaded? Meaning that this: defradb client schema add -f="schema1.graphql,schema2.graphql" Also works? Have you tested this? (so Sorry for the bother if this assumption of mine is incorrect. Got the hunch after reading this: https://github.com/spf13/pflag/blob/v1.0.5/string_slice.go#L120 |
This is correct. I did test it. In other words: separating by a comma on a single -f flag does work. And if both work, maybe the plural of strings is desired(?) |
Ok perfect. Then in that case please add an example of this case in the cli command documentation demonstrating both these cases. And |
Relevant issue(s)
Resolves #1248
Description
Previously, a single schema file could be added by calling
defradb schema add -f filename
. Now we can add multiple new schemas from different files in the following way:defradb schema add -f file_one -f file_two -f file_three
This PR also adjusts some import statements that were using the incorrect
error
import.Tasks
How has this been tested?
Specify the platform(s) on which this was tested: