Hello,

On 2025-01-01 19:03, gregor herrmann wrote:
Control: tag -1 + confirmed

On Wed, 01 Jan 2025 17:23:13 +0200, Wouter Verhelst wrote:

Running 'strace -ff -o foo <application>; grep Validator.cache foo*' outputs:

foo.146500:newfstatat(AT_FDCWD, 
"/usr/share/perl5/JSON/Validator/cache/a516498b60c53096b2ce2cd83ebe0abc", 
0x56545a8b14b8, 0) = -1 ENOENT (No such file or directory)

Creating a symlink with that name to
'../../../../openapi-specificaction/schemas/v3.0/schema.yaml' resolves the
issue.

Presumably a symlink for v1.2 and v3.1 should be created too, but I
didn't immediately find out how the hash is computed, so I don't know
which ones to use.

Hm, indeed, there's only a symlink for v2.0.


The symlinks should be created in d/rules:

execute_after_dh_install:
        find /usr/share/openapi-specification/schemas -name schema.json \
                | while read SCHEMA; \
                  do jq '.["id"]' $${SCHEMA} | tr -d '"' \
                        | perl -pe 's/#?\n$$//' | md5sum | cut -d ' ' -f 1 \
                        | xargs -i ln -s $${SCHEMA} 
debian/libjson-validator-perl/usr/share/perl5/JSON/Validator/cache/{}; \


In pratice this does not end so well because:

# find /usr/share/openapi-specification/schemas -name schema.json
/usr/share/openapi-specification/schemas/v2.0/schema.json


v3.0 and v3.1 have a schema.yml:

# find /usr/share/openapi-specification/ -name schema.yaml
/usr/share/openapi-specification/schemas/v3.1/schema.yaml
/usr/share/openapi-specification/schemas/v3.0/schema.yaml


For v1.2 probably
/usr/share/openapi-specification/schemas/v1.2/apiDeclaration.json
is the closest thing …


Cc'ing Andrius, who also maintains the openapi-specification package.

Hash of a516498b60c53096b2ce2cd83ebe0abc matches schema URL https://spec.openapis.org/oas/3.0/schema/2019-04-02 which seems to be a pre-release snapshot for v3.0. Wouter's observation that YAML schema of v3.0 passes instead of JSON is news to me, but this is really good given that openapi-specification has switched to releasing their schemas in YAML. Thus libjson-validator-perl should probably create cache symlinks for schema.yaml files as well.

Now about solving the issue affecting sreview-web. I see the following options:

1. Patch sreview-web to use v3.0 schema instead of its pre-release snapshot and include cache symlink for schemas/v3.0/schema.yaml in libjson-validator-perl.

2. Stop excluding original cached schemas from libjson-validator-perl. Unrepacked upstream tarball has JSON schema for https://spec.openapis.org/oas/3.0/schema/2019-04-02.

I like the Option 1 better, but I agree that patching sreview-web is not nice. Option 2 is painful as well, as we would have to collect the licenses of all the cached schemas in the upstream tarball.

What do you think?

Best,
Andrius

Reply via email to