diff --git a/.github/workflows/convert-examples-to-json.yaml b/.github/workflows/convert-examples-to-json.yaml new file mode 100644 index 0000000000..2ed4ca865e --- /dev/null +++ b/.github/workflows/convert-examples-to-json.yaml @@ -0,0 +1,50 @@ +name: convert-examples-to-json + +# author: @MikeRalphson / @cebe +# issue: https://github.com/OAI/OpenAPI-Specification/issues/1385 + +# +# This workflow updates the *.json files in the examples/v3.x directories, +# when the corresponding *.yaml files change. +# JSON example files are automatically generated from the YAML example files. +# Only the YAML files should be adjusted manually. +# + +# run this on push to master +on: + push: + branches: + - master + +jobs: + yaml2json: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 # checkout repo content + + - name: Install dependencies + run: npm i + + - name: convert YAML examples to JSON + run: find examples/v3* -type f -name "*.yaml" | xargs node scripts/yaml2json/yaml2json.js + + - name: git diff + run: | + git add examples/**/*.json + git --no-pager -c color.diff=always diff --staged + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch-suffix: none + branch: update-json-examples + title: Update JSON example files + commit-message: Update JSON example files + body: | + This pull request is automatically triggered by GitHub action `convert-examples-to-json`. + + The examples/v3.* YAML files have changed, so the JSON files are automatically being recreated. + diff --git a/.gitignore b/.gitignore index 88e134ab28..aa8e47b4c6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ target atlassian-ide-plugin.xml node_modules/ +package-lock.json Gemfile.lock diff --git a/package.json b/package.json index 4a08fdf38c..01be1c8d5c 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,10 @@ "schemas/*" ], "dependencies": {}, - "devDependencies": {}, + "devDependencies": { + "mdv": "^1.0.7", + "yaml": "^1.8.3" + }, "keywords": [ "OpenAPI", "OAS", diff --git a/scripts/yaml2json/yaml2json.js b/scripts/yaml2json/yaml2json.js new file mode 100755 index 0000000000..f69145ad36 --- /dev/null +++ b/scripts/yaml2json/yaml2json.js @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +'use strict'; + +const fs = require('fs'); +const yaml = require('yaml'); + +function convert(filename) { + console.log(filename); + const s = fs.readFileSync(filename,'utf8'); + let obj; + try { + obj = yaml.parse(s, {prettyErrors: true}); + fs.writeFileSync(filename.replace('.yaml','.json'),JSON.stringify(obj,null,2),'utf8'); + } + catch (ex) { + console.warn(' ',ex.message); + process.exitCode = 1; + } +} + +if (process.argv.length<3) { + console.warn('Usage: yaml2json {infiles}'); +} +else { + for (let i=2;i