Skip to content

Commit

Permalink
Merge pull request #4162 from ralfhandl/main-schema-publish
Browse files Browse the repository at this point in the history
Schema Publish workflow
  • Loading branch information
ralfhandl authored Nov 7, 2024
2 parents b980078 + 6d04eeb commit 7e96988
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 1 deletion.
57 changes: 57 additions & 0 deletions .github/workflows/schema-publish.yaml
Original file line number Diff line number Diff line change
@@ -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.
File renamed without changes.
File renamed without changes.
54 changes: 54 additions & 0 deletions scripts/schema-publish.sh
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion scripts/yaml2json/yaml2json.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 7e96988

Please sign in to comment.