forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
OpenAPI tooling updates (github#16320)
- Loading branch information
Showing
30 changed files
with
2,339,953 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
#!/usr/bin/env node | ||
|
||
const fs = require('fs') | ||
const path = require('path') | ||
const { execSync } = require('child_process') | ||
const semver = require('semver') | ||
|
||
/* | ||
* This script performs two checks to prevent shipping development mode OpenAPI schemas: | ||
* - Ensures the `info.version` property is a semantic version. | ||
* In development mode, the `info.version` property is a string | ||
* containing the `github/github` branch name. | ||
* - Ensures the decorated schema matches the dereferenced schema. | ||
* The workflow that calls this script runs `script/rest/update-files.js` | ||
* with the `--decorate-only` switch then checks to see if files changed. | ||
* | ||
*/ | ||
|
||
// Check that the `info.version` property is a semantic version | ||
const dereferencedDir = path.join(process.cwd(), 'lib/rest/static/dereferenced') | ||
const schemas = fs.readdirSync(dereferencedDir) | ||
schemas.forEach(filename => { | ||
const schema = require(path.join(dereferencedDir, filename)) | ||
if (!semver.valid(schema.info.version)) { | ||
console.log(`🚧⚠️ Your branch contains a development mode OpenAPI schema: ${schema.info.version}. This check is a reminder to not 🚢 OpenAPI files in development mode. 🛑`) | ||
process.exit(1) | ||
} | ||
}) | ||
|
||
// Check that the decorated schema matches the dereferenced schema | ||
const changedFiles = execSync('git diff --name-only HEAD').toString() | ||
|
||
if(changedFiles !== '') { | ||
console.log(`These files were changed:\n${changedFiles}`) | ||
console.log(`🚧⚠️ Your decorated and dereferenced schema files don't match. Ensure you're using decorated and dereferenced schemas from the automatically created pull requests by the 'github-openapi-bot' user. For more information, see 'script/rest/README.md'. 🛑`) | ||
process.exit(1) | ||
} | ||
|
||
// All checks pass, ready to ship | ||
console.log('All good 👍') | ||
process.exit(0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
name: OpenAPI generate decorated schema files | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
types: [opened] | ||
|
||
jobs: | ||
generate-decorated-files: | ||
if: github.event.pull_request.user.login == 'github-openapi-bot' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout repository code | ||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f | ||
|
||
- name: Install dependencies | ||
run: npm ci | ||
|
||
- name: Decorate the dereferenced OpenAPI schemas | ||
run: script/rest/update-files.js --decorate-only | ||
|
||
- name: Check in the decorated files | ||
uses: EndBug/add-and-commit@9358097a71ad9fb9e2f9624c6098c89193d83575 | ||
with: | ||
# The arguments for the `git add` command | ||
add: 'lib/rest/static/decorated' | ||
|
||
# The message for the commit | ||
message: 'Add decorated OpenAPI schema files' | ||
|
||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this line unchanged |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
name: OpenAPI dev mode check | ||
|
||
on: | ||
workflow_dispatch: | ||
push: | ||
|
||
jobs: | ||
check-schema-versions: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout repository code | ||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f | ||
|
||
- name: Install dependencies | ||
run: npm ci | ||
|
||
# Differences between decorated and dereferenced files indicates a problem | ||
- name: Generate decorated files to check that there are no differences | ||
run: script/rest/update-files.js --decorate-only | ||
|
||
- name: Check if deref/decorated schemas are dev mode and that they match | ||
run: .github/actions-scripts/openapi-schema-branch.js |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# REST | ||
|
||
## About this directory | ||
|
||
* `lib/rest/index.js` is human-editable. | ||
* `lib/rest/static/*.json` are generated by [scripts](../../script/rest/README.md). | ||
|
||
## Editable files | ||
|
||
* `lib/rest/index.js` consumes the static decorated schema files and exports `categories`, `operations`, and `operationsEnabledForGitHubApps` used by the REST middleware contextualizer. | ||
|
||
## Static files | ||
|
||
Generated by `script/rest/update-files.js`: | ||
|
||
* `lib/rest/static/dereferenced` - dereferenced OpenAPI schema file for each version of GitHub | ||
* `lib/rest/static/decorated` - files generated from the dereferenced OpenAPI schema with the Markdown descriptions rendered in HTML | ||
|
||
## Rendering docs | ||
|
||
When the server starts, `middleware/contextualizers/rest.js` accesses the data exported from the static decorated JSON files, fetches the data for the current version and requested path, and adds it to the `context` object. The added property is: | ||
|
||
* `req.context.currentRestOperations` - all operations with a category matching the current path | ||
|
||
Markdown files in `content/rest/reference` use Liquid to loop over these context properties. The Liquid calls HTML files in the `includes` directory to do most of the rendering. Writers can add content to the Markdown files alongside the Liquid. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
Oops, something went wrong.