python-jsonschema / python-jsonschema/check-jsonschema

`check-gitlab-ci` fails to parse multi-document `.gitlab-ci.yml`

Open
#561 1 comment 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
341
Forks
71
Avg merge
15d 20h
Merged PRs (30d)
4

Description

GitLab recently added the spec:inputs CI/CD YAML keyword which makes use of multi-document YAML files. The following example is taken straight from their docs:

spec:
  inputs:
    job-stage:
      default: test
    environment:
      default: production
---
scan-website:
  stage: $[[ inputs.job-stage ]]
  script: ./scan-website $[[ inputs.environment ]]

However, check-jsonschema refuses to parse such a file and errors out:

> check-jsonschema.exe --verbose --schemafile https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json .\.gitlab-ci.yml
Several files failed to parse.
  FailedFileLoadError: Failed to parse .\.gitlab-ci.yml
    in "C:\Users\username\pipx\venvs\check-jsonschema\Lib\site-packages\check_jsonschema\instance_loader.py", line 50
    >>> data: t.Any = self._parsers.parse_data_with_path(

    caused by

    ComposerError: expected a single document in the stream
      in "<byte string>", line 2, column 1:
        spec:
        ^ (line: 2)
    but found another document
      in "<byte string>", line 10, column 1:
        ---
        ^ (line: 10)
      in "C:\Users\username\pipx\venvs\check-jsonschema\Lib\site-packages\check_jsonschema\parsers\__init__.py", line 102
      >>> return loadfunc(data)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the failure with the multi-document .gitlab-ci.yml example and inspect instance_loader.py around line 50 and parsers/init.py around line 102. Update parsing behavior so this GitLab CI input is accepted, then verify that the check-jsonschema command validates the example without the single-document ComposerError.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, yaml
Domain
cli, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.