From e00c0d95b4026bf2a8b06e840f22c70d5b9d4bf1 Mon Sep 17 00:00:00 2001 From: Jen Gilbert Date: Fri, 17 Jul 2026 14:11:43 -0500 Subject: [PATCH] Make external API mount POC --- .gitignore | 2 ++ {hugo/data => data}/api/v1/CodeExamples.json | 0 {hugo/data => data}/api/v1/full_spec.yaml | 0 {hugo/data => data}/api/v1/translate_actions.es.json | 0 {hugo/data => data}/api/v1/translate_actions.fr.json | 0 {hugo/data => data}/api/v1/translate_actions.ja.json | 0 {hugo/data => data}/api/v1/translate_actions.json | 0 {hugo/data => data}/api/v1/translate_tags.es.json | 0 {hugo/data => data}/api/v1/translate_tags.fr.json | 0 {hugo/data => data}/api/v1/translate_tags.ja.json | 0 {hugo/data => data}/api/v1/translate_tags.json | 0 {hugo/data => data}/api/v1/translate_tags.ko.json | 0 {hugo/data => data}/api/v2/CodeExamples.json | 0 {hugo/data => data}/api/v2/full_spec.yaml | 0 {hugo/data => data}/api/v2/translate_actions.es.json | 0 {hugo/data => data}/api/v2/translate_actions.fr.json | 0 {hugo/data => data}/api/v2/translate_actions.ja.json | 0 {hugo/data => data}/api/v2/translate_actions.json | 0 {hugo/data => data}/api/v2/translate_actions.kr.json | 0 {hugo/data => data}/api/v2/translate_tags.es.json | 0 {hugo/data => data}/api/v2/translate_tags.fr.json | 0 {hugo/data => data}/api/v2/translate_tags.ja.json | 0 {hugo/data => data}/api/v2/translate_tags.json | 0 {hugo/data => data}/api/v2/translate_tags.ko.json | 0 hugo/.gitignore | 3 +-- hugo/assets/scripts/build-api-derefs.js | 4 ++-- hugo/assets/scripts/build-api-pages.js | 10 +++++----- hugo/assets/scripts/build-reference-pages.js | 10 +++++----- hugo/config/_default/config.yaml | 3 +++ 29 files changed, 18 insertions(+), 14 deletions(-) rename {hugo/data => data}/api/v1/CodeExamples.json (100%) rename {hugo/data => data}/api/v1/full_spec.yaml (100%) rename {hugo/data => data}/api/v1/translate_actions.es.json (100%) rename {hugo/data => data}/api/v1/translate_actions.fr.json (100%) rename {hugo/data => data}/api/v1/translate_actions.ja.json (100%) rename {hugo/data => data}/api/v1/translate_actions.json (100%) rename {hugo/data => data}/api/v1/translate_tags.es.json (100%) rename {hugo/data => data}/api/v1/translate_tags.fr.json (100%) rename {hugo/data => data}/api/v1/translate_tags.ja.json (100%) rename {hugo/data => data}/api/v1/translate_tags.json (100%) rename {hugo/data => data}/api/v1/translate_tags.ko.json (100%) rename {hugo/data => data}/api/v2/CodeExamples.json (100%) rename {hugo/data => data}/api/v2/full_spec.yaml (100%) rename {hugo/data => data}/api/v2/translate_actions.es.json (100%) rename {hugo/data => data}/api/v2/translate_actions.fr.json (100%) rename {hugo/data => data}/api/v2/translate_actions.ja.json (100%) rename {hugo/data => data}/api/v2/translate_actions.json (100%) rename {hugo/data => data}/api/v2/translate_actions.kr.json (100%) rename {hugo/data => data}/api/v2/translate_tags.es.json (100%) rename {hugo/data => data}/api/v2/translate_tags.fr.json (100%) rename {hugo/data => data}/api/v2/translate_tags.ja.json (100%) rename {hugo/data => data}/api/v2/translate_tags.json (100%) rename {hugo/data => data}/api/v2/translate_tags.ko.json (100%) diff --git a/.gitignore b/.gitignore index 00925d7d965..0936d281cf3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,8 @@ tmp # Ignore generated examples # ignore full spec deref, generate during build instead +data/api/v1/full_spec_deref.json +data/api/v2/full_spec_deref.json # Ignoring all automated content temp diff --git a/hugo/data/api/v1/CodeExamples.json b/data/api/v1/CodeExamples.json similarity index 100% rename from hugo/data/api/v1/CodeExamples.json rename to data/api/v1/CodeExamples.json diff --git a/hugo/data/api/v1/full_spec.yaml b/data/api/v1/full_spec.yaml similarity index 100% rename from hugo/data/api/v1/full_spec.yaml rename to data/api/v1/full_spec.yaml diff --git a/hugo/data/api/v1/translate_actions.es.json b/data/api/v1/translate_actions.es.json similarity index 100% rename from hugo/data/api/v1/translate_actions.es.json rename to data/api/v1/translate_actions.es.json diff --git a/hugo/data/api/v1/translate_actions.fr.json b/data/api/v1/translate_actions.fr.json similarity index 100% rename from hugo/data/api/v1/translate_actions.fr.json rename to data/api/v1/translate_actions.fr.json diff --git a/hugo/data/api/v1/translate_actions.ja.json b/data/api/v1/translate_actions.ja.json similarity index 100% rename from hugo/data/api/v1/translate_actions.ja.json rename to data/api/v1/translate_actions.ja.json diff --git a/hugo/data/api/v1/translate_actions.json b/data/api/v1/translate_actions.json similarity index 100% rename from hugo/data/api/v1/translate_actions.json rename to data/api/v1/translate_actions.json diff --git a/hugo/data/api/v1/translate_tags.es.json b/data/api/v1/translate_tags.es.json similarity index 100% rename from hugo/data/api/v1/translate_tags.es.json rename to data/api/v1/translate_tags.es.json diff --git a/hugo/data/api/v1/translate_tags.fr.json b/data/api/v1/translate_tags.fr.json similarity index 100% rename from hugo/data/api/v1/translate_tags.fr.json rename to data/api/v1/translate_tags.fr.json diff --git a/hugo/data/api/v1/translate_tags.ja.json b/data/api/v1/translate_tags.ja.json similarity index 100% rename from hugo/data/api/v1/translate_tags.ja.json rename to data/api/v1/translate_tags.ja.json diff --git a/hugo/data/api/v1/translate_tags.json b/data/api/v1/translate_tags.json similarity index 100% rename from hugo/data/api/v1/translate_tags.json rename to data/api/v1/translate_tags.json diff --git a/hugo/data/api/v1/translate_tags.ko.json b/data/api/v1/translate_tags.ko.json similarity index 100% rename from hugo/data/api/v1/translate_tags.ko.json rename to data/api/v1/translate_tags.ko.json diff --git a/hugo/data/api/v2/CodeExamples.json b/data/api/v2/CodeExamples.json similarity index 100% rename from hugo/data/api/v2/CodeExamples.json rename to data/api/v2/CodeExamples.json diff --git a/hugo/data/api/v2/full_spec.yaml b/data/api/v2/full_spec.yaml similarity index 100% rename from hugo/data/api/v2/full_spec.yaml rename to data/api/v2/full_spec.yaml diff --git a/hugo/data/api/v2/translate_actions.es.json b/data/api/v2/translate_actions.es.json similarity index 100% rename from hugo/data/api/v2/translate_actions.es.json rename to data/api/v2/translate_actions.es.json diff --git a/hugo/data/api/v2/translate_actions.fr.json b/data/api/v2/translate_actions.fr.json similarity index 100% rename from hugo/data/api/v2/translate_actions.fr.json rename to data/api/v2/translate_actions.fr.json diff --git a/hugo/data/api/v2/translate_actions.ja.json b/data/api/v2/translate_actions.ja.json similarity index 100% rename from hugo/data/api/v2/translate_actions.ja.json rename to data/api/v2/translate_actions.ja.json diff --git a/hugo/data/api/v2/translate_actions.json b/data/api/v2/translate_actions.json similarity index 100% rename from hugo/data/api/v2/translate_actions.json rename to data/api/v2/translate_actions.json diff --git a/hugo/data/api/v2/translate_actions.kr.json b/data/api/v2/translate_actions.kr.json similarity index 100% rename from hugo/data/api/v2/translate_actions.kr.json rename to data/api/v2/translate_actions.kr.json diff --git a/hugo/data/api/v2/translate_tags.es.json b/data/api/v2/translate_tags.es.json similarity index 100% rename from hugo/data/api/v2/translate_tags.es.json rename to data/api/v2/translate_tags.es.json diff --git a/hugo/data/api/v2/translate_tags.fr.json b/data/api/v2/translate_tags.fr.json similarity index 100% rename from hugo/data/api/v2/translate_tags.fr.json rename to data/api/v2/translate_tags.fr.json diff --git a/hugo/data/api/v2/translate_tags.ja.json b/data/api/v2/translate_tags.ja.json similarity index 100% rename from hugo/data/api/v2/translate_tags.ja.json rename to data/api/v2/translate_tags.ja.json diff --git a/hugo/data/api/v2/translate_tags.json b/data/api/v2/translate_tags.json similarity index 100% rename from hugo/data/api/v2/translate_tags.json rename to data/api/v2/translate_tags.json diff --git a/hugo/data/api/v2/translate_tags.ko.json b/data/api/v2/translate_tags.ko.json similarity index 100% rename from hugo/data/api/v2/translate_tags.ko.json rename to data/api/v2/translate_tags.ko.json diff --git a/hugo/.gitignore b/hugo/.gitignore index 73ba217f14b..29b27f219dd 100644 --- a/hugo/.gitignore +++ b/hugo/.gitignore @@ -23,8 +23,7 @@ content/en/api/**/*.rs content/en/api/tsconfig.json # ignore full spec deref, generate during build instead -data/api/v1/full_spec_deref.json -data/api/v2/full_spec_deref.json +# note: data/api moved to the repo root; see the root .gitignore for its deref entries static/resources/json/full_spec_v1.json static/resources/json/full_spec_v2.json diff --git a/hugo/assets/scripts/build-api-derefs.js b/hugo/assets/scripts/build-api-derefs.js index ee87314075b..4c45458d7ef 100644 --- a/hugo/assets/scripts/build-api-derefs.js +++ b/hugo/assets/scripts/build-api-derefs.js @@ -14,7 +14,7 @@ const findSpecFiles = () => { versions.forEach(version => { const assetsPath = `./assets/api/${version}/full_spec.yaml`; - const dataPath = `./data/api/${version}/full_spec.yaml`; + const dataPath = `../data/api/${version}/full_spec.yaml`; // Try assets first, fallback to data if (fs.existsSync(assetsPath)) { @@ -62,7 +62,7 @@ const processSpec = async (specPath) => { if (jsonString === "null" || jsonString === '""' || jsonString.length < 5) { throw new Error(`Aborting write: generated JSON for ${version} is suspiciously small or null.`); } - const pathToJson = `./data/api/${version}/full_spec_deref.json`; + const pathToJson = `../data/api/${version}/full_spec_deref.json`; fs.writeFileSync(pathToJson, jsonString, 'utf8'); console.log(`Written dereferenced spec to: ${pathToJson}`); diff --git a/hugo/assets/scripts/build-api-pages.js b/hugo/assets/scripts/build-api-pages.js index c5b218fcfdd..f8f1b591d65 100644 --- a/hugo/assets/scripts/build-api-pages.js +++ b/hugo/assets/scripts/build-api-pages.js @@ -1021,7 +1021,7 @@ const createTranslations = (apiYaml, deref, apiVersion) => { return {[name]: {"name": tag.name, "description": tag.description}}; }).reduce((obj, item) => ({...obj, ...item}) ,{}); - const tagsFilePath = `./data/api/${apiVersion}/translate_tags.json`; + const tagsFilePath = `../data/api/${apiVersion}/translate_tags.json`; fs.writeFileSync(tagsFilePath, safeJsonStringify(tags, null, 2), 'utf8'); const actions = {}; @@ -1062,14 +1062,14 @@ const createTranslations = (apiYaml, deref, apiVersion) => { actions[action.operationId] = item; }); }); - const actionsFilePath = `./data/api/${apiVersion}/translate_actions.json`; + const actionsFilePath = `../data/api/${apiVersion}/translate_actions.json`; fs.writeFileSync(actionsFilePath, safeJsonStringify(actions, null, 2), 'utf8'); }; /** * Takes an array of spec file paths and processes them - * @param {array} specs - array of strings with path to spec e.g ['./data/api/v2/full_spec.yaml'] + * @param {array} specs - array of strings with path to spec e.g ['../data/api/v2/full_spec.yaml'] */ const processSpecs = (specs) => { specs @@ -1079,7 +1079,7 @@ const processSpecs = (specs) => { .then((deref) => { const version = spec.split('/')[3]; const jsonString = safeJsonStringify(deref, null, 2); - const pathToJson = `./data/api/${version}/full_spec_deref.json`; + const pathToJson = `../data/api/${version}/full_spec_deref.json`; // we do not write the full spec here anymore to avoid committing to repo, see build-api-derefs.js // fs.writeFileSync(pathToJson, jsonString, 'utf8'); @@ -1132,7 +1132,7 @@ const findSpecFiles = () => { versions.forEach(version => { const assetsPath = `./assets/api/${version}/full_spec.yaml`; - const dataPath = `./data/api/${version}/full_spec.yaml`; + const dataPath = `../data/api/${version}/full_spec.yaml`; // Try assets first, fallback to data if (fs.existsSync(assetsPath)) { diff --git a/hugo/assets/scripts/build-reference-pages.js b/hugo/assets/scripts/build-reference-pages.js index 2151c1e24fa..e8d92e94388 100644 --- a/hugo/assets/scripts/build-reference-pages.js +++ b/hugo/assets/scripts/build-reference-pages.js @@ -1078,7 +1078,7 @@ const createTranslations = (apiYaml, deref, apiVersion) => { return {[name]: {"name": tag.name, "description": tag.description}}; }).reduce((obj, item) => ({...obj, ...item}) ,{}); - const tagsFilePath = `./data/api/${apiVersion}/translate_tags.json`; + const tagsFilePath = `../data/api/${apiVersion}/translate_tags.json`; fs.writeFileSync(tagsFilePath, safeJsonStringify(tags, null, 2), 'utf8'); const actions = {}; @@ -1113,14 +1113,14 @@ const createTranslations = (apiYaml, deref, apiVersion) => { actions[action.operationId] = item; }); }); - const actionsFilePath = `./data/api/${apiVersion}/translate_actions.json`; + const actionsFilePath = `../data/api/${apiVersion}/translate_actions.json`; fs.writeFileSync(actionsFilePath, safeJsonStringify(actions, null, 2), 'utf8'); }; /** * Takes an array of spec file paths and processes them - * @param {array} specs - array of strings with path to spec e.g ['./data/api/v2/full_spec.yaml'] + * @param {array} specs - array of strings with path to spec e.g ['../data/api/v2/full_spec.yaml'] */ const processSpecs = (specs) => { specs @@ -1130,7 +1130,7 @@ const processSpecs = (specs) => { .then((deref) => { const version = spec.split('/')[3]; const jsonString = safeJsonStringify(deref, null, 2); - const pathToJson = `./data/api/${version}/full_spec_deref.json`; + const pathToJson = `../data/api/${version}/full_spec_deref.json`; fs.writeFileSync(pathToJson, jsonString, 'utf8'); // create translation ready datafiles @@ -1174,7 +1174,7 @@ const processSpecs = (specs) => { const init = () => { - const specs = ['./data/api/v1/full_spec.yaml', './data/api/v2/full_spec.yaml']; + const specs = ['../data/api/v1/full_spec.yaml', '../data/api/v2/full_spec.yaml']; processSpecs(specs); }; diff --git a/hugo/config/_default/config.yaml b/hugo/config/_default/config.yaml index d769844efce..416c93e90e9 100644 --- a/hugo/config/_default/config.yaml +++ b/hugo/config/_default/config.yaml @@ -142,6 +142,9 @@ module: - 'shortcodes/mdoc/*' - source: data target: data + # api data lives at the repo root so non-Hugo consumers (e.g. astro) can read it too + - source: ../data/api + target: data/api - source: static target: assets - source: assets