From 6897ec86184262cd73141f8384a0e6dab94f0ae2 Mon Sep 17 00:00:00 2001 From: Abdur-Rahman Fashola Date: Fri, 26 Jan 2024 22:25:42 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20New=20updates=20to=20generating=20m?= =?UTF-8?q?etadata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 63 +++++++++++++++++++++++++++++++++++ package.json | 1 + scripts/generate-metadata.ts | 64 ++++++++++++++++++++++++++++++++---- 3 files changed, 122 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index acd74b7..e9607d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "@epic-web/client-hints": "^1.2.2", "@epic-web/invariant": "^1.0.0", "@headlessui/react": "^1.7.18", + "@octokit/request": "^8.1.6", "@remix-run/node": "^2.5.0", "@remix-run/react": "^2.5.0", "@remix-run/serve": "^2.5.0", @@ -5363,6 +5364,58 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@octokit/endpoint": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", + "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "dependencies": { + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", + "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" + }, + "node_modules/@octokit/request": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.6.tgz", + "integrity": "sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==", + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", + "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "dependencies": { + "@octokit/types": "^12.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz", + "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==", + "dependencies": { + "@octokit/openapi-types": "^19.1.0" + } + }, "node_modules/@one-ini/wasm": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", @@ -12461,6 +12514,11 @@ "node": ">=18" } }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -29801,6 +29859,11 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", diff --git a/package.json b/package.json index 5c6875f..559a32b 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@epic-web/client-hints": "^1.2.2", "@epic-web/invariant": "^1.0.0", "@headlessui/react": "^1.7.18", + "@octokit/request": "^8.1.6", "@remix-run/node": "^2.5.0", "@remix-run/react": "^2.5.0", "@remix-run/serve": "^2.5.0", diff --git a/scripts/generate-metadata.ts b/scripts/generate-metadata.ts index f078266..f3cdf2a 100644 --- a/scripts/generate-metadata.ts +++ b/scripts/generate-metadata.ts @@ -3,10 +3,22 @@ import { readFile, readdir, writeFile } from 'fs/promises' import { existsSync, statSync, readdirSync, readFileSync } from 'fs' import matter from 'gray-matter' import { normalizePath } from 'vite' +import { request } from '@octokit/request' +import 'dotenv/config' console.log('Generating metadata...') -const __dirname = resolve() +const __dirname = + process.env.NODE_ENV === 'production' + ? resolve() + : process.env.GITHUB_WORKSPACE ?? '' + +// const octokit = request.defaults({ +// headers: { +// authorization: `token ${process.env.GITHUB_TOKEN}`, +// }, +// }) + /** * The reserved name for the index file of every doc section * @@ -20,6 +32,7 @@ const versions = await readFile( 'utf-8' ) const tags = JSON.parse(versions).map((v: any) => v.tag) as Array +const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) tags.forEach(async tag => { const currentDirectory = resolve(postDirectory, tag) @@ -124,9 +137,48 @@ tags.forEach(async tag => { metadataObject.sections = sortedSections.map(s => s[0]) metadataObject.meta = _f - await writeFile( - resolve(currentDirectory, 'metadata.json'), - JSON.stringify(metadataObject, null, 2), - 'utf-8' - ) + if (process.env.NODE_ENV === 'development') { + await writeFile( + resolve(currentDirectory, 'metadata.json'), + JSON.stringify(metadataObject, null, 2), + 'utf-8' + ) + } else { + const { data } = await request( + 'GET /repos/{owner}/{repo}/contents/{path}', + { + owner: process.env.GITHUB_OWNER ?? '', + repo: process.env.GITHUB_REPO ?? '', + path: `posts/${tag}/metadata.json`, + } + ) + + // @ts-ignore + const content = Buffer.from(data.content, 'base64').toString('utf-8') + + if (content === JSON.stringify(metadataObject, null, 2)) { + console.log(`No changes observed in ${tag} version. Skipping...`) + await delay(1_000) + return + } + + // @ts-ignore + const sha = data.sha + + await request('PUT /repos/{owner}/{repo}/contents/{path}', { + owner: process.env.GITHUB_OWNER ?? '', + repo: process.env.GITHUB_REPO ?? '', + path: `posts/${tag}/metadata.json`, + message: '📃 Update metadata.json', + content: Buffer.from(JSON.stringify(metadataObject, null, 2)).toString( + 'base64' + ), + sha, + headers: { + authorization: `token ${process.env.GITHUB_TOKEN}`, + }, + }) + + await delay(3_000) + } })