diff --git a/.github/workflows/schema-publish.yaml b/.github/workflows/schema-publish.yaml new file mode 100644 index 0000000000..4ac83ae88b --- /dev/null +++ b/.github/workflows/schema-publish.yaml @@ -0,0 +1,57 @@ +name: schema-publish + +# author: @ralfhandl +# issue: https://github.com/OAI/OpenAPI-Specification/issues/3715 + +# +# This workflow copies the 3.x schemas to the gh-pages branch +# + +# run this on push to main +on: + push: + branches: + - main + workflow_dispatch: {} + +jobs: + publish: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 # checkout main branch + with: + fetch-depth: 0 + + - uses: actions/setup-node@v4 # setup Node.js + with: + node-version: '20.x' + + - name: Install dependencies + run: npm ci + + - uses: actions/checkout@v4 # checkout gh-pages branch + with: + ref: gh-pages + path: deploy + + - name: run main script + run: scripts/schema-publish.sh + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch: publish-schema-iteration + base: gh-pages + delete-branch: true + path: deploy + labels: Housekeeping,Schema + team-reviewers: OAI/tsc #TODO: check if this works, or if it needs a special access token + title: Publish OpenAPI Metaschema Iterations + commit-message: New OpenAPI metaschema iterations + signoff: true + body: | + This pull request is automatically triggered by GitHub action `schema-publish`. + The `schemas/**/*.yaml` files have changed and JSON files are automatically generated. diff --git a/schemas/v3.1/dialect/base.schema.yaml b/schemas/v3.1/dialect.yaml similarity index 100% rename from schemas/v3.1/dialect/base.schema.yaml rename to schemas/v3.1/dialect.yaml diff --git a/schemas/v3.1/meta/base.schema.yaml b/schemas/v3.1/meta.yaml similarity index 100% rename from schemas/v3.1/meta/base.schema.yaml rename to schemas/v3.1/meta.yaml diff --git a/scripts/schema-publish.sh b/scripts/schema-publish.sh new file mode 100755 index 0000000000..d1a7f822bd --- /dev/null +++ b/scripts/schema-publish.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +# Author: @ralfhandl + +# Run this script from the root of the repo. It is designed to be run by a GitHub workflow. + +for schemaDir in schemas/v3* ; do + vVersion=$(basename "$schemaDir") + version=${vVersion:1} + echo $version + + # list of schemas to process, dependent schemas come first + schemas=(meta.yaml dialect.yaml schema.yaml schema-base.yaml) + + # find the newest commit date for each schema + maxDate="" + declare -A datesHash + for schema in "${schemas[@]}"; do + if [ -f "$schemaDir/$schema" ]; then + newestCommitDate=$(git log -1 --format="%ad" --date=short "$schemaDir/$schema") + + # the newest date across a schema and all its dependencies is its date stamp + if [ "$newestCommitDate" \> "$maxDate" ]; then + maxDate=$newestCommitDate + fi + datesHash["$schema"]=$maxDate + echo $schema changed at $newestCommitDate + fi + done + + # construct sed command + sedCmd=() + for schema in "${!datesHash[@]}"; do + base=$(basename "$schema" .yaml) + sedCmd+=("-e s/$base\/WORK-IN-PROGRESS/$base\/${datesHash[$schema]}/g") + done + + # create the date-stamped schemas + for schema in "${!datesHash[@]}"; do + base=$(basename "$schema" .yaml) + target=deploy/oas/$version/$base/${datesHash[$schema]} + + mkdir -p "deploy/oas/$version/$base" + + sed ${sedCmd[@]} $schemaDir/$schema > $target.yaml + node scripts/yaml2json/yaml2json.js $target.yaml + rm $target.yaml + mv $target.json $target + + mv deploy/oas/$version/$base/*.md $target.md + done + + echo "" +done diff --git a/scripts/yaml2json/yaml2json.js b/scripts/yaml2json/yaml2json.js index f69145ad36..decb075cc7 100755 --- a/scripts/yaml2json/yaml2json.js +++ b/scripts/yaml2json/yaml2json.js @@ -6,7 +6,7 @@ const fs = require('fs'); const yaml = require('yaml'); function convert(filename) { - console.log(filename); + // console.log(filename); const s = fs.readFileSync(filename,'utf8'); let obj; try {