Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add $schema to cgmanifest.json #1035

Merged
merged 2 commits into from
Sep 6, 2022
Merged

Add $schema to cgmanifest.json #1035

merged 2 commits into from
Sep 6, 2022

Conversation

JamieMagee
Copy link
Member

This pull request adds the JSON schema for cgmanifest.json.

FAQ

Why?

A JSON schema helps you to ensure that your cgmanifest.json file is valid.
JSON schema validation is a build-in feature in most modern IDEs like Visual Studio and Visual Studio Code.
Most modern IDEs also provide code-completion for JSON schemas.

How can I validate my cgmanifest.json file?

Most modern IDEs like Visual Studio and Visual Studio Code have a built-in feature to validate JSON files.
You can also use this small script to validate your cgmanifest.json file.

Why does it suggest camel case for the properties?

Component Detection is able to read camel case and pascal case properties.
However, the JSON schema doesn't have a case-insensitive mode.
We therefore suggest camel case as it's the most common format for JSON.

Why is the diff so large?

To deserialize the cgmanifest.json file, we use JSON.parse().
However, to serialize the JSON again we use prettier.
We found that, in general, it gave smaller diffs than the default JSON.stringify() function.

@jonpryor
Copy link
Member

jonpryor commented Sep 6, 2022

What's "interesting" about this PR is that it's "not quite right"; see also: dotnet/android#7342

In particular, if we take the new contents at https://github.com/xamarin/java.interop/blob/c39a8b1509da69827f6a1321d26069c0bc40915d/tools/java-source-utils/CGManifest.json and use https://www.jsonschemavalidator.net/, it doesn't validate:

❌ Found 1 error(s)

Message: Required properties are missing from object: registrations, version.
Schema path: #/definitions/CGManifest/required

If we add the required "version": 1 property, it still fails, because the file is still using PascalCase names when it needs to be using camelCase names, e.g. registrations instead of Registrations.

This is doubly odd since the PR message itself mentions using "camel case for the properties", yet the PR didn't change the casing at all.

@jonpryor
Copy link
Member

jonpryor commented Sep 6, 2022

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@jonpryor jonpryor merged commit fcc33ce into dotnet:main Sep 6, 2022
@github-actions github-actions bot locked and limited conversation to collaborators Apr 12, 2024
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants