1
0
mirror of synced 2026-01-01 18:05:46 -05:00

refactor openapi scripts (#34803)

This commit is contained in:
Rachael Sewell
2023-02-28 14:24:38 -08:00
committed by GitHub
parent 03c385769a
commit 50210d12e8
48 changed files with 6857 additions and 34943 deletions

73
src/github-apps/scripts/sync.js Executable file
View File

@@ -0,0 +1,73 @@
#!/usr/bin/env node
import { existsSync } from 'fs'
import mkdirp from 'mkdirp'
import { readFile, writeFile } from 'fs/promises'
import path from 'path'
import { slug } from 'github-slugger'
import { getOverrideCategory } from '../../rest/scripts/utils/operation.js'
import { ENABLED_APPS_DIR, ENABLED_APPS_FILENAME } from '../lib/index.js'
// Creates the src/github-apps/data files used for
// https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps
export async function syncGitHubAppsData(sourceDirectory, sourceSchemas) {
for (const schemaName of sourceSchemas) {
const data = JSON.parse(await readFile(path.join(sourceDirectory, schemaName), 'utf8'))
// Because the information used on the apps page doesn't require any
// rendered content we can parse the dereferenced files directly
const enabledForApps = {}
for (const [requestPath, operationsAtPath] of Object.entries(data.paths)) {
for (const [verb, operation] of Object.entries(operationsAtPath)) {
// We only want to process operations that are
// server-to-server GitHub App enabled
if (!operation['x-github'].enabledForGitHubApps) continue
const schemaCategory = operation['x-github'].category
const schemaSubcategory = operation['x-github'].subcategory
const { category, subcategory } = getOverrideCategory(
operation.operationId,
schemaCategory,
schemaSubcategory
)
if (!enabledForApps[category]) {
enabledForApps[category] = []
}
enabledForApps[category].push({
slug: slug(operation.summary),
subcategory,
verb,
requestPath,
})
}
}
if (Object.keys(enabledForApps).length === 0) {
throw new Error(
`Generating GitHub Apps data failed for ${sourceDirectory}/${schemaName}. The generated data file was empty.`
)
}
// Sort the operations by category for readability
const sortedOperations = Object.keys(enabledForApps)
.sort()
.reduce((acc, key) => {
acc[key] = enabledForApps[key]
return acc
}, {})
const versionName = path.basename(schemaName, '.json')
const targetDirectory = path.join(ENABLED_APPS_DIR, versionName)
// When a new version is added, we need to create the directory for it
if (!existsSync(targetDirectory)) {
await mkdirp(targetDirectory)
}
const targetPath = path.join(targetDirectory, ENABLED_APPS_FILENAME)
await writeFile(targetPath, JSON.stringify(sortedOperations, null, 2))
console.log(`✅ Wrote ${targetPath}`)
}
}