From 8065c1717f2028c020cf57f40682986ab2a1404f Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Tue, 30 Dec 2025 20:57:21 +0100 Subject: [PATCH 1/3] Add support for flattening --- README.md | 3 +++ breaking/action.yml | 5 +++++ breaking/entrypoint.sh | 8 ++++++-- changelog/action.yml | 5 +++++ changelog/entrypoint.sh | 16 ++++++++++------ diff/action.yml | 5 +++++ diff/entrypoint.sh | 8 ++++++-- 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c9d40a4..919dfb9 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ This action supports additional arguments. Most are converted to parameters for | --exclude-elements | exclude-elements | '' | | --filter-extension | filter-extension | '' | | --composed | composed | false | +| --flatten-allof | flatten-allof | false | | N/A | output-to-file | '' | ### Check for breaking API changes, and fail if any are found @@ -50,6 +51,7 @@ Additional arguments: | --exclude-elements | exclude-elements | '' | | --filter-extension | filter-extension | '' | | --composed | composed | false | +| --flatten-allof | flatten-allof | false | | N/A | output-to-file | '' | This action delivers a summary of breaking changes, accessible as a GitHub step output named `breaking`. @@ -72,6 +74,7 @@ Additional arguments: | --exclude-elements | exclude-elements | '' | | --filter-extension | filter-extension | '' | | --composed | composed | false | +| --flatten-allof | flatten-allof | false | | --prefix-base | prefix-base | '' | | --prefix-revision | prefix-revision | '' | | --case-insensitive-headers | case-insensitive-headers | false | diff --git a/breaking/action.yml b/breaking/action.yml index 9cdc217..7db6239 100644 --- a/breaking/action.yml +++ b/breaking/action.yml @@ -36,6 +36,10 @@ inputs: description: 'Run in composed mode' required: false default: 'false' + flatten-allof: + description: 'Merge allOf subschemas into a single schema before diff' + required: false + default: 'false' output-to-file: description: 'Output to a file at the given path' required: false @@ -57,4 +61,5 @@ runs: - ${{ inputs.exclude-elements }} - ${{ inputs.filter-extension }} - ${{ inputs.composed }} + - ${{ inputs.flatten-allof }} - ${{ inputs.output-to-file }} diff --git a/breaking/entrypoint.sh b/breaking/entrypoint.sh index e8af227..a75823e 100755 --- a/breaking/entrypoint.sh +++ b/breaking/entrypoint.sh @@ -11,7 +11,8 @@ readonly deprecation_days_stable="$7" readonly exclude_elements="$8" readonly filter_extension="$9" readonly composed="${10}" -readonly output_to_file="${11}" +readonly flatten_allof="${11}" +readonly output_to_file="${12}" write_output () { _write_output_output="$1" @@ -33,7 +34,7 @@ write_output () { echo "$_write_output_output" >>"$GITHUB_OUTPUT" } -echo "running oasdiff breaking... base: $base, revision: $revision, fail_on: $fail_on, include_checks: $include_checks, include_path_params: $include_path_params, deprecation_days_beta: $deprecation_days_beta, deprecation_days_stable: $deprecation_days_stable, exclude_elements: $exclude_elements, filter_extension: $filter_extension, composed: $composed, output_to_file: $output_to_file" +echo "running oasdiff breaking... base: $base, revision: $revision, fail_on: $fail_on, include_checks: $include_checks, include_path_params: $include_path_params, deprecation_days_beta: $deprecation_days_beta, deprecation_days_stable: $deprecation_days_stable, exclude_elements: $exclude_elements, filter_extension: $filter_extension, composed: $composed, flatten_allof: $flatten_allof, output_to_file: $output_to_file" # Build flags to pass in command flags="" @@ -58,6 +59,9 @@ fi if [ "$composed" = "true" ]; then flags="$flags -c" fi +if [ "$flatten_allof" = "true" ]; then + flags="$flags --flatten-allof" +fi echo "flags: $flags" # Check for breaking changes diff --git a/changelog/action.yml b/changelog/action.yml index a404e48..a771fe0 100644 --- a/changelog/action.yml +++ b/changelog/action.yml @@ -23,6 +23,10 @@ inputs: description: 'Run in composed mode' required: false default: 'false' + flatten-allof: + description: 'Merge allOf subschemas into a single schema before diff' + required: false + default: 'false' output-to-file: description: 'Output to a file at the given path' required: false @@ -56,6 +60,7 @@ runs: - ${{ inputs.exclude-elements }} - ${{ inputs.filter-extension }} - ${{ inputs.composed }} + - ${{ inputs.flatten-allof }} - ${{ inputs.output-to-file }} - ${{ inputs.prefix-base }} - ${{ inputs.prefix-revision }} diff --git a/changelog/entrypoint.sh b/changelog/entrypoint.sh index 9c29db6..722ed48 100755 --- a/changelog/entrypoint.sh +++ b/changelog/entrypoint.sh @@ -26,13 +26,14 @@ readonly include_path_params="$3" readonly exclude_elements="$4" readonly filter_extension="$5" readonly composed="$6" -readonly output_to_file="$7" -readonly prefix_base="$8" -readonly prefix_revision="$9" -readonly case_insensitive_headers="${10}" -readonly format="${11}" +readonly flatten_allof="$7" +readonly output_to_file="$8" +readonly prefix_base="$9" +readonly prefix_revision="${10}" +readonly case_insensitive_headers="${11}" +readonly format="${12}" -echo "running oasdiff changelog base: $base, revision: $revision, include_path_params: $include_path_params, exclude_elements: $exclude_elements, filter_extension: $filter_extension, composed: $composed, output_to_file: $output_to_file, prefix_base: $prefix_base, prefix_revision: $prefix_revision, case_insensitive_headers: $case_insensitive_headers, format: $format" +echo "running oasdiff changelog base: $base, revision: $revision, include_path_params: $include_path_params, exclude_elements: $exclude_elements, filter_extension: $filter_extension, composed: $composed, flatten_allof: $flatten_allof, output_to_file: $output_to_file, prefix_base: $prefix_base, prefix_revision: $prefix_revision, case_insensitive_headers: $case_insensitive_headers, format: $format" # Build flags to pass in command flags="" @@ -48,6 +49,9 @@ fi if [ "$composed" = "true" ]; then flags="$flags -c" fi +if [ "$flatten_allof" = "true" ]; then + flags="$flags --flatten-allof" +fi if [ -n "$prefix_base" ]; then flags="$flags --prefix-base $prefix_base" fi diff --git a/diff/action.yml b/diff/action.yml index 1aa1904..847b152 100644 --- a/diff/action.yml +++ b/diff/action.yml @@ -31,6 +31,10 @@ inputs: description: 'Run in composed mode' required: false default: 'false' + flatten-allof: + description: 'Merge allOf subschemas into a single schema before diff' + required: false + default: 'false' output-to-file: description: 'Output to a file at the given path' required: false @@ -50,4 +54,5 @@ runs: - ${{ inputs.exclude-elements }} - ${{ inputs.filter-extension }} - ${{ inputs.composed }} + - ${{ inputs.flatten-allof }} - ${{ inputs.output-to-file }} diff --git a/diff/entrypoint.sh b/diff/entrypoint.sh index dab4d0d..c2bfca7 100755 --- a/diff/entrypoint.sh +++ b/diff/entrypoint.sh @@ -28,9 +28,10 @@ readonly include_path_params="$5" readonly exclude_elements="$6" readonly filter_extension="$7" readonly composed="$8" -readonly output_to_file="$9" +readonly flatten_allof="$9" +readonly output_to_file="${10}" -echo "running oasdiff diff base: $base, revision: $revision, format: $format, fail_on_diff: $fail_on_diff, include_path_params: $include_path_params, exclude_elements: $exclude_elements, filter_extension: $filter_extension, composed: $composed, output_to_file: $output_to_file" +echo "running oasdiff diff base: $base, revision: $revision, format: $format, fail_on_diff: $fail_on_diff, include_path_params: $include_path_params, exclude_elements: $exclude_elements, filter_extension: $filter_extension, composed: $composed, flatten_allof: $flatten_allof, output_to_file: $output_to_file" # Build flags to pass in command flags="" @@ -52,6 +53,9 @@ fi if [ "$composed" = "true" ]; then flags="$flags -c" fi +if [ "$flatten_allof" = "true" ]; then + flags="$flags --flatten-allof" +fi echo "flags: $flags" # *** github action step output *** From 0d05bc9c8ae39d630996600179c008dc59a85efc Mon Sep 17 00:00:00 2001 From: Reuven Harrison Date: Sat, 21 Mar 2026 15:15:27 +0200 Subject: [PATCH 2/3] feat: add flatten-allof test and update README - Add specs/base-allof.yaml and specs/revision-allof.yaml fixtures - Add oasdiff_breaking_flatten_allof test to test.yaml - Replace README with restructured version (from docs/readme-fixes) including flatten-allof rows in all three input tables Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/test.yaml | 26 +++++ README.md | 213 +++++++++++++++++++++++++----------- specs/base-allof.yaml | 45 ++++++++ specs/revision-allof.yaml | 47 ++++++++ 4 files changed, 266 insertions(+), 65 deletions(-) create mode 100644 specs/base-allof.yaml create mode 100644 specs/revision-allof.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index a8d600e..8250b77 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -276,3 +276,29 @@ jobs: echo "Expected '1 changes: 1 error, 0 warning, 0 info', instead got '$output'" >&2 exit 1 fi + oasdiff_breaking_flatten_allof: + runs-on: ubuntu-latest + name: Test breaking action with flatten-allof option + env: + OASDIFF_ACTION_TEST_EXPECTED_OUTPUT: "1 changes: 1 error, 0 warning, 0 info" + steps: + - name: checkout + uses: actions/checkout@v4 + - name: Running breaking action with flatten-allof option + id: test_breaking_flatten_allof + uses: ./breaking + with: + base: 'specs/base-allof.yaml' + revision: 'specs/revision-allof.yaml' + flatten-allof: true + - name: Test breaking action output + run: | + delimiter=$(cat /proc/sys/kernel/random/uuid | tr -d '-') + output=$(cat <<-$delimiter + ${{ steps.test_breaking_flatten_allof.outputs.breaking }} + $delimiter + ) + if [ "$output" != "$OASDIFF_ACTION_TEST_EXPECTED_OUTPUT" ]; then + echo "Expected output '$OASDIFF_ACTION_TEST_EXPECTED_OUTPUT' but got '$output'" >&2 + exit 1 + fi diff --git a/README.md b/README.md index 919dfb9..6123792 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,165 @@ # oasdiff-action [![CI](https://github.com/oasdiff/oasdiff-action/actions/workflows/test.yaml/badge.svg)](https://github.com/oasdiff/oasdiff-action/actions) -GitHub actions for comparing OpenAPI specs and detect breaking changes, based on [oasdiff](https://github.com/oasdiff/oasdiff) tool +GitHub Actions for comparing OpenAPI specs and detecting breaking changes, based on [oasdiff](https://github.com/oasdiff/oasdiff). -## How to use? -Depending on your use case, refer below for instructions on generating reports for differences, breaking changes and changelog. +## Free actions -### Generate a diff report -Copy and paste the following snippet into your build .yml file: +The following actions run the oasdiff CLI directly in your GitHub runner — no account or token required. + +### Check for breaking changes + +Detects breaking changes and writes inline GitHub annotations (`::error::`) to the Actions summary. Does not fail the workflow by default — set `fail-on` to `ERR` or `WARN` to fail on changes. + +```yaml +jobs: + oasdiff: + runs-on: ubuntu-latest + steps: + - uses: oasdiff/oasdiff-action/breaking@v0.0.34 + with: + base: 'specs/base.yaml' + revision: 'specs/revision.yaml' ``` -- name: Running OpenAPI Spec diff action - uses: oasdiff/oasdiff-action/diff@main - with: - base: 'specs/base.yaml' - revision: 'specs/revision.yaml' + +| Input | Default | Description | Accepted values | +|---|---|---|---| +| `base` | — (required) | Path to the base (old) OpenAPI spec | file path, URL, git ref | +| `revision` | — (required) | Path to the revised (new) OpenAPI spec | file path, URL, git ref | +| `fail-on` | `''` | Fail with exit code 1 if changes are found at or above this severity | `ERR`, `WARN` | +| `include-path-params` | `false` | Include path parameter names in endpoint matching | `true`, `false` | +| `deprecation-days-beta` | `31` | Minimum sunset period (days) for deprecation of beta API endpoints | integer | +| `deprecation-days-stable` | `180` | Minimum sunset period (days) for deprecation of stable API endpoints | integer | +| `exclude-elements` | `''` | Exclude certain kinds of changes from the output | `endpoints`, `request`, `response` (comma-separated) | +| `filter-extension` | `''` | Exclude paths and operations with an OpenAPI Extension matching this expression | regex | +| `composed` | `false` | Run in composed mode | `true`, `false` | +| `flatten-allof` | `false` | Merge allOf subschemas into a single schema before diff | `true`, `false` | +| `output-to-file` | `''` | Write output to this file path instead of stdout | file path | + +### Generate a changelog + +Outputs all changes (breaking and non-breaking) between two specs. + +```yaml +jobs: + oasdiff: + runs-on: ubuntu-latest + steps: + - uses: oasdiff/oasdiff-action/changelog@v0.0.34 + with: + base: 'specs/base.yaml' + revision: 'specs/revision.yaml' ``` -This action supports additional arguments. Most are converted to parameters for the `oasdiff` CLI. - -| CLI | Action input | Default | -| --------------------- | ------------------- | ------- | -| --fail-on-diff | fail-on-diff | false | -| --format | format | yaml | -| --include-path-params | include-path-params | false | -| --exclude-elements | exclude-elements | '' | -| --filter-extension | filter-extension | '' | -| --composed | composed | false | -| --flatten-allof | flatten-allof | false | -| N/A | output-to-file | '' | - -### Check for breaking API changes, and fail if any are found -Copy and paste the following snippet into your build .yml file: +| Input | Default | Description | Accepted values | +|---|---|---|---| +| `base` | — (required) | Path to the base (old) OpenAPI spec | file path, URL, git ref | +| `revision` | — (required) | Path to the revised (new) OpenAPI spec | file path, URL, git ref | +| `format` | `''` | Output format | `text`, `json`, `yaml`, `markdown`, `html` | +| `level` | `''` | Minimum severity level to include in output | `INFO`, `WARN`, `ERR` | +| `include-path-params` | `false` | Include path parameter names in endpoint matching | `true`, `false` | +| `exclude-elements` | `''` | Exclude certain kinds of changes from the output | `endpoints`, `request`, `response` (comma-separated) | +| `filter-extension` | `''` | Exclude paths and operations with an OpenAPI Extension matching this expression | regex | +| `composed` | `false` | Run in composed mode | `true`, `false` | +| `flatten-allof` | `false` | Merge allOf subschemas into a single schema before diff | `true`, `false` | +| `prefix-base` | `''` | Prefix to add to all paths in the base spec | string | +| `prefix-revision` | `''` | Prefix to add to all paths in the revised spec | string | +| `case-insensitive-headers` | `false` | Compare headers case-insensitively | `true`, `false` | +| `template` | `''` | Custom Go template for output formatting | Go template string | +| `output-to-file` | `''` | Write output to this file path instead of stdout | file path | + +### Generate a diff report + +Outputs the raw structural diff between two specs. + +```yaml +jobs: + oasdiff: + runs-on: ubuntu-latest + steps: + - uses: oasdiff/oasdiff-action/diff@v0.0.34 + with: + base: 'specs/base.yaml' + revision: 'specs/revision.yaml' ``` -- name: Running OpenAPI Spec diff action - uses: oasdiff/oasdiff-action/breaking@main + +| Input | Default | Description | Accepted values | +|---|---|---|---| +| `base` | — (required) | Path to the base (old) OpenAPI spec | file path, URL, git ref | +| `revision` | — (required) | Path to the revised (new) OpenAPI spec | file path, URL, git ref | +| `fail-on-diff` | `false` | Fail with exit code 1 if any difference is found | `true`, `false` | +| `format` | `yaml` | Output format | `yaml`, `json`, `text` | +| `include-path-params` | `false` | Include path parameter names in endpoint matching | `true`, `false` | +| `exclude-elements` | `''` | Exclude certain kinds of changes from the output | `endpoints`, `request`, `response` (comma-separated) | +| `filter-extension` | `''` | Exclude paths and operations with an OpenAPI Extension matching this expression | regex | +| `composed` | `false` | Run in composed mode | `true`, `false` | +| `flatten-allof` | `false` | Merge allOf subschemas into a single schema before diff | `true`, `false` | +| `output-to-file` | `''` | Write output to this file path instead of stdout | file path | + +--- + +## Spec paths + +The `base` and `revision` inputs accept: + +| Format | Example | +|---|---| +| Local file path | `specs/base.yaml` | +| http/s URL | `https://example.com/openapi.yaml` | +| Git ref | `origin/${{ github.base_ref }}:openapi.yaml` | + +File paths and git refs require the repository to be checked out first: + +```yaml +- uses: actions/checkout@v6 +- run: git fetch --depth=1 origin ${{ github.base_ref }} +- uses: oasdiff/oasdiff-action/breaking@v0.0.34 with: - base: https://raw.githubusercontent.com/oasdiff/oasdiff/main/data/openapi-test1.yaml - revision: https://raw.githubusercontent.com/oasdiff/oasdiff/main/data/openapi-test3.yaml + base: 'origin/${{ github.base_ref }}:openapi.yaml' + revision: 'HEAD:openapi.yaml' ``` -Additional arguments: +> A targeted `git fetch` is needed so that `origin/${{ github.base_ref }}` is available. `fetch-depth: 0` is not required — fetching only the base branch is sufficient. -| CLI | Action input | Default | -| ------------------------- | ----------------------- | ------- | -| --fail-on | fail-on | empty | -| --include-checks | include-checks | csv | -| --include-path-params | include-path-params | false | -| --deprecation-days-beta | deprecation-days-beta | 31 | -| --deprecation-days-stable | deprecation-days-stable | 180 | -| --exclude-elements | exclude-elements | '' | -| --filter-extension | filter-extension | '' | -| --composed | composed | false | -| --flatten-allof | flatten-allof | false | -| N/A | output-to-file | '' | +--- -This action delivers a summary of breaking changes, accessible as a GitHub step output named `breaking`. +## Pro: Rich PR comment -### Generate a changelog -Copy and paste the following snippet into your build .yml file: -``` -- name: Running OpenAPI Spec diff action - uses: oasdiff/oasdiff-action/changelog@main - with: - base: https://raw.githubusercontent.com/oasdiff/oasdiff/main/data/openapi-test1.yaml - revision: https://raw.githubusercontent.com/oasdiff/oasdiff/main/data/openapi-test3.yaml +`oasdiff/oasdiff-action/pr-comment@v0.0.34` posts a single auto-updating comment on every PR that touches your API spec. + +```yaml +jobs: + oasdiff: + runs-on: ubuntu-latest + permissions: + pull-requests: write + statuses: write + steps: + - uses: oasdiff/oasdiff-action/pr-comment@v0.0.34 + with: + base: 'specs/base.yaml' + revision: 'specs/revision.yaml' + oasdiff-token: ${{ secrets.OASDIFF_TOKEN }} ``` -Additional arguments: - -| CLI | Action input | Default | -| -------------------------- | ------------------------ | ------- | -| --include-path-params | include-path-params | false | -| --exclude-elements | exclude-elements | '' | -| --filter-extension | filter-extension | '' | -| --composed | composed | false | -| --flatten-allof | flatten-allof | false | -| --prefix-base | prefix-base | '' | -| --prefix-revision | prefix-revision | '' | -| --case-insensitive-headers | case-insensitive-headers | false | -| --format | format | '' | -| N/A | output-to-file | '' | +The comment shows a table of all changes, grouped by severity, with a **Review** link for each breaking change: + +| Severity | Change | Path | Review | +|---|---|---|---| +| 🔴 | response-property-removed | `GET /users` | ✅ [Approved by @alice](https://oasdiff.com/review/…) | +| 🔴 | request-parameter-type-changed | `GET /products` | ⏳ [Review](https://oasdiff.com/review/…) | +| 🟡 | response-optional-property-removed | `POST /orders` | ⏳ [Review](https://oasdiff.com/review/…) | + +Each **Review** link opens a hosted page with a side-by-side spec diff and **Approve / Reject** buttons. Approvals are tied to the change fingerprint and carry forward automatically when the branch is updated. A commit status check blocks the merge until every breaking change has been reviewed. + +| Input | Default | Description | Accepted values | +|---|---|---|---| +| `base` | — (required) | Path to the base (old) OpenAPI spec | file path, URL, git ref | +| `revision` | — (required) | Path to the revised (new) OpenAPI spec | file path, URL, git ref | +| `oasdiff-token` | — (required) | oasdiff API token — [sign up at oasdiff.com](https://oasdiff.com) | — | +| `github-token` | `${{ github.token }}` | GitHub token for posting the PR comment; requires `pull-requests: write`, `statuses: write` | — | +| `include-path-params` | `false` | Include path parameter names in endpoint matching | `true`, `false` | +| `exclude-elements` | `''` | Exclude certain kinds of changes from the output | `endpoints`, `request`, `response` (comma-separated) | +| `composed` | `false` | Run in composed mode | `true`, `false` | + +An `OASDIFF_TOKEN` is issued per GitHub organization. [See pricing →](https://www.oasdiff.com/pricing) diff --git a/specs/base-allof.yaml b/specs/base-allof.yaml new file mode 100644 index 0000000..36d1386 --- /dev/null +++ b/specs/base-allof.yaml @@ -0,0 +1,45 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Petstore allOf +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + parameters: + - name: petId + in: path + required: true + schema: + type: string + responses: + '200': + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/schemas/Pet" +components: + schemas: + BaseEntity: + type: object + required: + - id + properties: + id: + type: integer + format: int64 + PetFields: + type: object + properties: + name: + type: string + tag: + type: string + Pet: + allOf: + - $ref: "#/components/schemas/BaseEntity" + - $ref: "#/components/schemas/PetFields" diff --git a/specs/revision-allof.yaml b/specs/revision-allof.yaml new file mode 100644 index 0000000..6ff4caf --- /dev/null +++ b/specs/revision-allof.yaml @@ -0,0 +1,47 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Petstore allOf +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + parameters: + - name: petId + in: path + required: true + schema: + type: string + responses: + '200': + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/schemas/Pet" +components: + schemas: + BaseEntity: + type: object + required: + - id + properties: + id: + type: integer + format: int64 + PetFields: + type: object + required: + - name + properties: + name: + type: string + tag: + type: string + Pet: + allOf: + - $ref: "#/components/schemas/BaseEntity" + - $ref: "#/components/schemas/PetFields" From 81f7549ad3ae9f4794a2276aafcd8e4ed86685fd Mon Sep 17 00:00:00 2001 From: Reuven Harrison Date: Sat, 21 Mar 2026 15:17:18 +0200 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20correct=20allOf=20test=20fixtures=20?= =?UTF-8?q?=E2=80=94=20base=20requires=20name,=20revision=20makes=20it=20o?= =?UTF-8?q?ptional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit response-required-property-became-optional is a breaking change (ERR). Previously had it backwards: adding required to response is not breaking. Co-Authored-By: Claude Sonnet 4.6 --- specs/base-allof.yaml | 2 ++ specs/revision-allof.yaml | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/specs/base-allof.yaml b/specs/base-allof.yaml index 36d1386..6ff4caf 100644 --- a/specs/base-allof.yaml +++ b/specs/base-allof.yaml @@ -34,6 +34,8 @@ components: format: int64 PetFields: type: object + required: + - name properties: name: type: string diff --git a/specs/revision-allof.yaml b/specs/revision-allof.yaml index 6ff4caf..36d1386 100644 --- a/specs/revision-allof.yaml +++ b/specs/revision-allof.yaml @@ -34,8 +34,6 @@ components: format: int64 PetFields: type: object - required: - - name properties: name: type: string