From 8a3b40714816b66074f30065411323304e5bb19b Mon Sep 17 00:00:00 2001 From: kurara_ara Date: Sun, 28 May 2023 18:55:52 +0100 Subject: [PATCH 01/48] Added DummySheet --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 061aa3b..fdda02f 100644 --- a/extensions.json +++ b/extensions.json @@ -11,5 +11,6 @@ "clash": "https://raw.githubusercontent.com/ManuelLovell/clash/main/docs/store.md", "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", - "witchdice": "https://witchdice.com/owlbear_ext/store.md" + "witchdice": "https://witchdice.com/owlbear_ext/store.md", + "dummysheet": "https://www.dummysheet.com/store.md" } From 1ecdbc41e8a05c731bb2cdbe9d6c03d83c1ab72c Mon Sep 17 00:00:00 2001 From: greg-argulla Date: Sun, 2 Jul 2023 14:12:13 +0800 Subject: [PATCH 02/48] Add Last Fable and Ultimate Story Extensions for Fabula Ultima --- extensions.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 82adebb..3393e70 100644 --- a/extensions.json +++ b/extensions.json @@ -12,5 +12,7 @@ "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", "witchdice": "https://witchdice.com/owlbear_ext/store.md", - "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md" + "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md", + "last-fable": "https://fabula-ultima-extension.onrender.com/store.md", + "ultimate-story": "https://fabula-ultima-character-extension.onrender.com/store.md" } From 461e624dac53ed5c599fd3a251277e457ae87710 Mon Sep 17 00:00:00 2001 From: keegberg Date: Sun, 9 Jul 2023 11:41:22 -0500 Subject: [PATCH 03/48] Added condition-markers to extensions --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 82adebb..1a90275 100644 --- a/extensions.json +++ b/extensions.json @@ -12,5 +12,6 @@ "rumble": "https://raw.githubusercontent.com/ManuelLovell/rumble/master/docs/store.md", "ticker": "https://www.battle-system.com/owlbear/ticker-docs/store.md", "witchdice": "https://witchdice.com/owlbear_ext/store.md", - "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md" + "aoe-shapes": "https://owlbear-aoe.davidsev.co.uk/store.md", + "condition-markers": "https://raw.githubusercontent.com/kgbergman/conditionmarkers/main/docs/store.md" } From d590d749a61af5ca4c1dbcd8d90e91c8d8542a21 Mon Sep 17 00:00:00 2001 From: Manuel DeJesus <69539934+ManuelLovell@users.noreply.github.com> Date: Sat, 22 Jul 2023 14:41:13 -0700 Subject: [PATCH 04/48] Push FLIP to OBR store --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 41a3f8b..b3a56f8 100644 --- a/extensions.json +++ b/extensions.json @@ -16,5 +16,6 @@ "pdf-reader": "https://www.battle-system.com/owlbear/pdfd-docs/store.md", "sit": "https://sit.manuelpoell.at/assets/store.md", "marked": "https://www.battle-system.com/owlbear/marked-docs/store.md", - "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md" + "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md", + "flip": "https://www.battle-system.com/owlbear/flip-docs/store.md" } From 5634a84e86f99b0dadfcbf79b78688313bb35d7c Mon Sep 17 00:00:00 2001 From: David Severwright Date: Sun, 23 Jul 2023 17:36:13 +0100 Subject: [PATCH 05/48] Added "token-anonymizer" extention --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 41a3f8b..4bc465e 100644 --- a/extensions.json +++ b/extensions.json @@ -16,5 +16,6 @@ "pdf-reader": "https://www.battle-system.com/owlbear/pdfd-docs/store.md", "sit": "https://sit.manuelpoell.at/assets/store.md", "marked": "https://www.battle-system.com/owlbear/marked-docs/store.md", - "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md" + "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md", + "token-anonymizer": "https://owlbear-token-anonymizer.davidsev.co.uk/store.md" } From 51221a5f811a57a2b4b0c747f6e1366ae68890c3 Mon Sep 17 00:00:00 2001 From: Seamus Finlayson <77430559+SeamusFinlayson@users.noreply.github.com> Date: Sat, 5 Aug 2023 19:37:25 -0700 Subject: [PATCH 06/48] Update extensions.json --- extensions.json | 1 + 1 file changed, 1 insertion(+) diff --git a/extensions.json b/extensions.json index 41a3f8b..87d4292 100644 --- a/extensions.json +++ b/extensions.json @@ -17,4 +17,5 @@ "sit": "https://sit.manuelpoell.at/assets/store.md", "marked": "https://www.battle-system.com/owlbear/marked-docs/store.md", "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md" + "bubble-tracker": "https://raw.githubusercontent.com/SeamusFinlayson/Bubbles-for-Owlbear-Rodeo/master/docs/store.md" } From 5b6312f23e1a91802aae9ed80f34c9b6918093ea Mon Sep 17 00:00:00 2001 From: ismager7878 Date: Sun, 13 Aug 2023 19:01:46 +0200 Subject: [PATCH 07/48] added movement-tracker --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 41a3f8b..88eff91 100644 --- a/extensions.json +++ b/extensions.json @@ -16,5 +16,6 @@ "pdf-reader": "https://www.battle-system.com/owlbear/pdfd-docs/store.md", "sit": "https://sit.manuelpoell.at/assets/store.md", "marked": "https://www.battle-system.com/owlbear/marked-docs/store.md", - "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md" + "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md", + "movement-tracker": "https://movement-tracker.abarbre.com/store.md" } From bd271df4a6e218333197ea9c896c6f1822bea0c3 Mon Sep 17 00:00:00 2001 From: David Severwright Date: Thu, 14 Sep 2023 22:13:57 +0100 Subject: [PATCH 08/48] Added bendy ruler extention --- extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 41a3f8b..fd1e453 100644 --- a/extensions.json +++ b/extensions.json @@ -16,5 +16,6 @@ "pdf-reader": "https://www.battle-system.com/owlbear/pdfd-docs/store.md", "sit": "https://sit.manuelpoell.at/assets/store.md", "marked": "https://www.battle-system.com/owlbear/marked-docs/store.md", - "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md" + "hp-tracker": "https://raw.githubusercontent.com/kamejosh/owlbear-hp-tracker/master/docs/store.md", + "bendy-ruler": "https://owlbear-bendy-ruler.davidsev.co.uk/store.md" } From 9cab66cc6f3cd745433397c199514e1a13edc224 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:21:00 +1000 Subject: [PATCH 09/48] Add validation and verification scripts --- .../workflows/submit-verification-request.yml | 28 + scripts/__tests__/validation.test.js | 79 +++ .../extensionDetails.js | 0 scripts/discord-webhook/webhook.js | 2 +- scripts/package.json | 8 +- scripts/validation/manifest.js | 117 ++++ scripts/verify/index.js | 31 + scripts/yarn.lock | 550 ++++++++++++++++++ 8 files changed, 813 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/submit-verification-request.yml create mode 100644 scripts/__tests__/validation.test.js rename scripts/{discord-webhook => common}/extensionDetails.js (100%) create mode 100644 scripts/validation/manifest.js create mode 100644 scripts/verify/index.js diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml new file mode 100644 index 0000000..44b7064 --- /dev/null +++ b/.github/workflows/submit-verification-request.yml @@ -0,0 +1,28 @@ +name: Submit Verification Request +on: + issue_comment: + types: [created, edited] +jobs: + submit: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Install Node + uses: actions/setup-node@v3 + if: contains(github.event.comment.body, '/verify') + with: + node-version: 16 + - uses: actions/checkout@v3 + - name: Install Packages + run: yarn --cwd ./scripts install --frozen-lockfile + - name: Submit Request to Discord + run: node --no-warnings ./scripts/verify/index.js + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'Verification has been submitted' + }) diff --git a/scripts/__tests__/validation.test.js b/scripts/__tests__/validation.test.js new file mode 100644 index 0000000..31e1062 --- /dev/null +++ b/scripts/__tests__/validation.test.js @@ -0,0 +1,79 @@ +import { expect, test } from "vitest"; +import { validateManifest } from "../validation/manifest"; + +test("successfully validates valid manifest", () => { + const validManifest = { + title: "Example Extension Manifest", + description: "An example manifest for testing", + author: "Extension Tests", + image: "https://example.com/", + icon: "https://example.com/", + tags: ["combat", "tool", "automation"], + manifest: "https://example.com/manifest.json", + "learn-more": "learn-more@email.com", + }; + + const expectedResult = []; + + expect(validateManifest(validManifest)).toStrictEqual(expectedResult); +}); + +test("throws error on invalid tag", () => { + const invalidTagInManifest = { + title: "Example Extension Manifest", + description: "An example manifest for testing", + author: "Extension Tests", + image: "https://example.com/", + icon: "https://example.com/", + tags: ["combat", "tool", "automation", "built-by-owlbear"], + manifest: "https://example.com/manifest.json", + "learn-more": "learn-more@email.com", + }; + + const expectedResult = ['"tags[3]" contains an excluded value']; + + expect(validateManifest(invalidTagInManifest)).toStrictEqual(expectedResult); +}); + +test("should return all validation errors in one message", () => { + const mulitpleValidationIssues = { + description: "An example manifest for testing", + author: "Extension Tests", + icon: "example.com/", + tags: [], + manifest: "https://example.com/manifest.json", + }; + + const expectedResult = [ + '"title" is required', + '"image" is required', + '"icon" failed custom validation because Invalid URL', + '"tags" must contain at least 1 items', + '"learn-more" is required', + ]; + + expect(validateManifest(mulitpleValidationIssues)).toStrictEqual( + expectedResult + ); +}); + +test("should return issue when learn-more is invalid", () => { + const learnMoreInvalidationIssue = { + title: "Example Extension Manifest", + description: "An example manifest for testing", + author: "Extension Tests", + image: "https://example.com/", + icon: "https://example.com/", + tags: ["combat", "tool", "automation"], + manifest: "https://example.com/manifest.json", + "learn-more": "learn-more.com", + }; + + const expectedResult = [ + '"learn-more" does not match any of the allowed types', + ]; + + expect(validateManifest(learnMoreInvalidationIssue)).toStrictEqual( + expectedResult + ); +}); diff --git a/scripts/discord-webhook/extensionDetails.js b/scripts/common/extensionDetails.js similarity index 100% rename from scripts/discord-webhook/extensionDetails.js rename to scripts/common/extensionDetails.js diff --git a/scripts/discord-webhook/webhook.js b/scripts/discord-webhook/webhook.js index 6ba2a97..4f59bac 100644 --- a/scripts/discord-webhook/webhook.js +++ b/scripts/discord-webhook/webhook.js @@ -1,6 +1,6 @@ import fetch from "node-fetch"; -import { getExtensionDetails } from "./extensionDetails.js"; +import { getExtensionDetails } from "../common/extensionDetails.js"; function createDiscordEmbed(id, title, description, url, image, author, tags) { const embed = { diff --git a/scripts/package.json b/scripts/package.json index f50dcc3..8c65c05 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -5,12 +5,18 @@ "type": "module", "license": "MIT", "scripts": { + "test": "vitest", "trigger": "node ./discord-webhook/index.js", - "deploy": "node ./extension-store-deploy/index.js" + "deploy": "node ./extension-store-deploy/index.js", + "verification": "node --no-warnings ./verify/index.js" }, "dependencies": { "fetch": "^1.1.0", "gray-matter": "^4.0.3", + "joi": "^17.10.2", "node-fetch": "^3.3.1" + }, + "devDependencies": { + "vitest": "^0.34.4" } } diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js new file mode 100644 index 0000000..46b4d41 --- /dev/null +++ b/scripts/validation/manifest.js @@ -0,0 +1,117 @@ +import Joi from "joi"; + +import { getExtensionDetails } from "../common/extensionDetails.js"; + +const checkUrl = (value, helpers) => { + new URL(value); + + return value; +}; + +const schema = Joi.object({ + title: Joi.string().required(), + description: Joi.string().required(), + author: Joi.string().required(), + image: Joi.string().custom(checkUrl, "check url is valid format").required(), + icon: Joi.string().custom(checkUrl, "check url is valid format").required(), + tags: Joi.array() + .min(1) + .items( + Joi.string().valid("built-by-owlbear").forbidden(), + Joi.string().valid( + "dice", + "fog", + "tool", + "content-pack", + "drawing", + "audio", + "combat", + "automation", + "other" + ) + ), + manifest: Joi.string() + .custom(checkUrl, "check url is valid format") + .required(), + "learn-more": Joi.alternatives() + .try( + Joi.string().email(), + Joi.string().custom(checkUrl, "check url is valid format") + ) + .required(), +}); + +async function checkExtensionManifest() { + const { id, data } = await getExtensionDetails(); + + if (!data) { + return false; + } + + // const data = { + // description: "An example manifest for testing", + // author: "Extension Tests", + // image: "https://example.com/", + // icon: "https://example.com/", + // manifest: "https://example.com/manifest.json", + // "learn-more": "learn-more.com", + // }; + + const issues = validateManifest(data); + + return issues; +} + +export function validateManifest(data) { + const validationIssues = []; + const { value, error } = schema.validate(data, { abortEarly: false }); + + if (error) { + error.details.forEach((element) => { + validationIssues.push(element.message); + }); + } + + formatConsoleOutput(validationIssues); + + return validationIssues; +} + +/* + * + */ +function formatConsoleOutput(issues) { + let output = "## Manifest Validation Result\n\n"; + + if (Array.isArray(issues)) { + if (issues.length === 0) { + output += "No issues found in manifest type validation."; + console.log(output); + return; + } + + output += "***Issues found in manifest type validation.***\n\n"; + + for (let issue of issues) { + output += `- ${issue}\n`; + } + + output += `\n\n***You must follow the below guidelines on manifest files***\n\n +| NAME | DESCRIPTION | +| :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| title | This is the name of your extension | +| description | This should be a brief description of what your extension is for | +| author | This is your name or alias | +| image | This is an absolute link to a hero image for your extension. The image must be hosted on an external site. | +| icon | This is an absolute link to your extensions icon and must be hosted on an external site | +| tags | To help make your extension more discoverable you can add tags to it. In the extension store, users will be able to find your extension under that tag. You may only use our [supported tags](https://github.com/owlbear-rodeo/extensions/blob/main/tags.json) and only extensions published by Owlbear Rodeo can use the built-by-owlbear tag. | +| manifest | This should have an link to your manifest file. This is what will be copied by other users to install your extension. | +| learn-more | You should link to a site or email that users can go to to find more information about your extension. | + + `; + console.log(output); + return; + } +} + +await checkExtensionManifest(); diff --git a/scripts/verify/index.js b/scripts/verify/index.js new file mode 100644 index 0000000..54e2c1d --- /dev/null +++ b/scripts/verify/index.js @@ -0,0 +1,31 @@ +import fetch from "node-fetch"; + +function createDiscordVerificationPost(id, data) { + const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; + + const post = { + content: text, + }; + + return post; +} + +export async function sendDiscordWebhook() { + const { id, data } = await getExtensionDetails(); + + const embed = createDiscordVerificationPost(id, data); + + const response = await fetch(process.env.DISCORD_VERIFY_WEBHOOK, { + method: "POST", + body: JSON.stringify(embed), + headers: { + "Content-Type": "application/json", + }, + }); + + if (response.ok) { + console.log("Success!!"); + } else { + console.log(JSON.stringify(await response.text(), null, 2)); + } +} diff --git a/scripts/yarn.lock b/scripts/yarn.lock index 54d68e4..d8effb5 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -2,6 +2,237 @@ # yarn lockfile v1 +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.5": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== + +"@types/node@*": + version "20.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" + integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== + +"@vitest/expect@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.34.4.tgz#f857a83268b9e9d4e9410fe168cb206033838102" + integrity sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA== + dependencies: + "@vitest/spy" "0.34.4" + "@vitest/utils" "0.34.4" + chai "^4.3.7" + +"@vitest/runner@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.34.4.tgz#07543915ad22c53d99fb4bb758cb9bd5db3d7f80" + integrity sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w== + dependencies: + "@vitest/utils" "0.34.4" + p-limit "^4.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.34.4.tgz#ee2c732e5978438f96c669aabb9eb66eb7f3ff46" + integrity sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw== + dependencies: + magic-string "^0.30.1" + pathe "^1.1.1" + pretty-format "^29.5.0" + +"@vitest/spy@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.34.4.tgz#181ad9f32ce426ac33eb66ed35b880ee9b457035" + integrity sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g== + dependencies: + tinyspy "^2.1.1" + +"@vitest/utils@0.34.4": + version "0.34.4" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.34.4.tgz#0b6bf5fe07223ebb6ec24cd1edc0137cb301ecfd" + integrity sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^29.5.0" + +acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.10.0, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -9,6 +240,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + biskviit@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/biskviit/-/biskviit-1.0.1.tgz#037a0cd4b71b9e331fd90a1122de17dc49e420a7" @@ -16,11 +252,53 @@ biskviit@1.0.1: dependencies: psl "^1.1.7" +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +chai@^4.3.7: + version "4.3.8" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" + integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + data-uri-to-buffer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +diff-sequences@^29.4.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + encoding@0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -28,6 +306,34 @@ encoding@0.1.12: dependencies: iconv-lite "~0.4.13" +esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + optionalDependencies: + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -63,6 +369,16 @@ formdata-polyfill@^4.0.10: dependencies: fetch-blob "^3.1.2" +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" @@ -85,6 +401,17 @@ is-extendable@^0.1.0: resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== +joi@^17.10.2: + version "17.10.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.2.tgz#4ecc348aa89ede0b48335aad172e0f5591e55b29" + integrity sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -93,11 +420,55 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + +loupe@^2.3.1, loupe@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + +magic-string@^0.30.1: + version "0.30.3" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" + integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +mlly@^1.2.0, mlly@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" + integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== + dependencies: + acorn "^8.10.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.3.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + node-domexception@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" @@ -112,11 +483,72 @@ node-fetch@^3.3.1: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +postcss@^8.4.27: + version "8.4.30" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" + integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +pretty-format@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + psl@^1.1.7: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +rollup@^3.27.1: + version "3.29.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" + integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== + optionalDependencies: + fsevents "~2.3.2" + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -130,17 +562,135 @@ section-matter@^1.0.0: extend-shallow "^2.0.1" kind-of "^6.0.0" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.3.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.4.3.tgz#326f11db518db751c83fd58574f449b7c3060910" + integrity sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== + strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== +strip-literal@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + +tinybench@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" + integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== + +tinypool@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021" + integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww== + +tinyspy@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" + integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +ufo@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.0.tgz#c92f8ac209daff607c57bbd75029e190930a0019" + integrity sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw== + +vite-node@0.34.4: + version "0.34.4" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.34.4.tgz#96d5b4dcc5585e3b289390f4e11ed6450978e30e" + integrity sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.4.0" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0" + +"vite@^3.0.0 || ^4.0.0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0": + version "4.4.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" + integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + +vitest@^0.34.4: + version "0.34.4" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.34.4.tgz#c7f40cf7ca3b590bb333b3272a98f49e85f7b958" + integrity sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.34.4" + "@vitest/runner" "0.34.4" + "@vitest/snapshot" "0.34.4" + "@vitest/spy" "0.34.4" + "@vitest/utils" "0.34.4" + acorn "^8.9.0" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.1" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.3.3" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.7.0" + vite "^3.1.0 || ^4.0.0 || ^5.0.0-0" + vite-node "0.34.4" + why-is-node-running "^2.2.2" + web-streams-polyfill@^3.0.3: version "3.2.1" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 6421d1d2a32c8ad188c9653ac1e06d37cd6be7df Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:23:07 +1000 Subject: [PATCH 10/48] Add automated manifest validation --- .github/workflows/validate-manifest.yml | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/validate-manifest.yml diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml new file mode 100644 index 0000000..32a072a --- /dev/null +++ b/.github/workflows/validate-manifest.yml @@ -0,0 +1,32 @@ +name: Validate Matter +on: + # Trigger the workflow on push or pull request + pull_request: + branches: + - main + paths: + - "extensions.json" +jobs: + comment: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: 16 + - uses: actions/checkout@v3 + - name: Install Packages + run: yarn --cwd ./scripts install --frozen-lockfile + - name: Run Manifest File Validation + id: validation + run: echo "result=$(yarn --cwd ./scripts run trigger)" >> $GITHUB_OUTPUT + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: ${{ steps.validation.outputs.result }} + }) From f84077c89889f727f9501987671f1427591e8280 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:27:56 +1000 Subject: [PATCH 11/48] Patch validation step in validate-manifest --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 32a072a..550bf9c 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -20,7 +20,7 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Run Manifest File Validation id: validation - run: echo "result=$(yarn --cwd ./scripts run trigger)" >> $GITHUB_OUTPUT + run: echo "result=$(node --no-warnings ./validation/manifest.js)" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From 97924c5ceb66b84c0c7da72a4974cb570e99fd9c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:30:34 +1000 Subject: [PATCH 12/48] Fix node execution path on validate-manifest.yml --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 550bf9c..896cc58 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -20,7 +20,7 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Run Manifest File Validation id: validation - run: echo "result=$(node --no-warnings ./validation/manifest.js)" >> $GITHUB_OUTPUT + run: echo "result=$(node --no-warnings ./scripts/validation/manifest.js)" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From 848c2d961a23395941c4b3a698bec3e24428e952 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:41:23 +1000 Subject: [PATCH 13/48] Add support for mulitline result on GITHUB_OUTPUT in vaildate-manifest --- .github/workflows/validate-manifest.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 896cc58..a422bd9 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -20,7 +20,10 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Run Manifest File Validation id: validation - run: echo "result=$(node --no-warnings ./scripts/validation/manifest.js)" >> $GITHUB_OUTPUT + run: | + echo "result<> $GITHUB_OUTPUT + node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From b0685d504bf272d191bac48a2bd173929d9e8412 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:43:15 +1000 Subject: [PATCH 14/48] Add string wrapping around body input for validate-manifest --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index a422bd9..6ccb716 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -31,5 +31,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: ${{ steps.validation.outputs.result }} + body: '${{ steps.validation.outputs.result }}' }) From 3d903525e91e8d8a95543d10df52f3a06507feac Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:49:50 +1000 Subject: [PATCH 15/48] Edit validation-manifest workflow --- .github/workflows/validate-manifest.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 6ccb716..1438798 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -18,12 +18,11 @@ jobs: - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile - - name: Run Manifest File Validation + - uses: actions/github-script@v6 id: validation - run: | - echo "result<> $GITHUB_OUTPUT - node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT + with: + script: node --no-warnings ./scripts/validation/manifest.js + result-encoding: string - uses: actions/github-script@v6 with: script: | @@ -31,5 +30,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: '${{ steps.validation.outputs.result }}' + body: `${{ steps.validation.outputs.result }}` }) From bf52eb13bd42c87f030f796e221e6266fbf285a3 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 14:51:33 +1000 Subject: [PATCH 16/48] Revert use of github-scripts for validation execution on workflow --- .github/workflows/validate-manifest.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 1438798..1df68fc 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -18,11 +18,12 @@ jobs: - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile - - uses: actions/github-script@v6 + - name: Run Manifest File Validation id: validation - with: - script: node --no-warnings ./scripts/validation/manifest.js - result-encoding: string + run: | + echo "result<> $GITHUB_OUTPUT + node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT - uses: actions/github-script@v6 with: script: | From b8119904733744750a07384de8db97ee592717f3 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:01:33 +1000 Subject: [PATCH 17/48] Edit validate manifest to use pull_request_target --- .github/workflows/validate-manifest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 1df68fc..4031727 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -1,14 +1,14 @@ name: Validate Matter on: # Trigger the workflow on push or pull request - pull_request: + pull_request_target: branches: - main paths: - "extensions.json" jobs: comment: - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - name: Install Node From c6e81f90fa58533ced55674162672018a8535a1c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:01:48 +1000 Subject: [PATCH 18/48] Edit manifest output on validation script --- scripts/validation/manifest.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js index 46b4d41..ccddfb5 100644 --- a/scripts/validation/manifest.js +++ b/scripts/validation/manifest.js @@ -106,9 +106,8 @@ function formatConsoleOutput(issues) { | icon | This is an absolute link to your extensions icon and must be hosted on an external site | | tags | To help make your extension more discoverable you can add tags to it. In the extension store, users will be able to find your extension under that tag. You may only use our [supported tags](https://github.com/owlbear-rodeo/extensions/blob/main/tags.json) and only extensions published by Owlbear Rodeo can use the built-by-owlbear tag. | | manifest | This should have an link to your manifest file. This is what will be copied by other users to install your extension. | -| learn-more | You should link to a site or email that users can go to to find more information about your extension. | +| learn-more | You should link to a site or email that users can go to to find more information about your extension. |`; - `; console.log(output); return; } From a42e9caadae22c17571d1b400c8ac6f1677334be Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:10:28 +1000 Subject: [PATCH 19/48] Edit workflow condition for verification --- .github/workflows/submit-verification-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 44b7064..c708768 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -4,7 +4,7 @@ on: types: [created, edited] jobs: submit: - if: github.event_name == 'pull_request' + if: ${{ github.event.issue.pull_request }} runs-on: ubuntu-latest steps: - name: Install Node From 7948aaae967842a5da31b69f8e6e8e44a698e53d Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:17:01 +1000 Subject: [PATCH 20/48] Edit validate-menifest Allow reading forks but only allow additional permissions on the job that posts to the pull request --- .github/workflows/validate-manifest.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 4031727..48e35c7 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -1,15 +1,17 @@ name: Validate Matter on: # Trigger the workflow on push or pull request - pull_request_target: + pull_request: branches: - main paths: - "extensions.json" jobs: - comment: - if: github.event_name == 'pull_request_target' + validate: + if: github.event_name == 'pull_request' runs-on: ubuntu-latest + outputs: + result: ${{ steps.validation.outputs.result }} steps: - name: Install Node uses: actions/setup-node@v3 @@ -24,6 +26,12 @@ jobs: echo "result<> $GITHUB_OUTPUT node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT + comment: + needs: validate + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: - uses: actions/github-script@v6 with: script: | @@ -31,5 +39,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: `${{ steps.validation.outputs.result }}` + body: `${{ needs.validate.outputs.result }}` }) From 3ce787c7e184725cdc256072d9f93e9702c0f840 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:17:22 +1000 Subject: [PATCH 21/48] Remove example manifest in manifest.hs --- scripts/validation/manifest.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js index ccddfb5..ebfb117 100644 --- a/scripts/validation/manifest.js +++ b/scripts/validation/manifest.js @@ -48,15 +48,6 @@ async function checkExtensionManifest() { return false; } - // const data = { - // description: "An example manifest for testing", - // author: "Extension Tests", - // image: "https://example.com/", - // icon: "https://example.com/", - // manifest: "https://example.com/manifest.json", - // "learn-more": "learn-more.com", - // }; - const issues = validateManifest(data); return issues; From a67caf2b31eb4f5d53560ad58be0d22959e705d4 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:19:49 +1000 Subject: [PATCH 22/48] Add env variable to verification submit workflow --- .github/workflows/submit-verification-request.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index c708768..a65beb4 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -17,6 +17,8 @@ jobs: run: yarn --cwd ./scripts install --frozen-lockfile - name: Submit Request to Discord run: node --no-warnings ./scripts/verify/index.js + env: + DISCORD_VERIFY_WEBHOOK: ${{ secrets.DISCORD_VERIFY_WEBHOOK }} - uses: actions/github-script@v6 with: script: | From 031c12644bf157102aa0dd7987b7bb575e632e44 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:29:16 +1000 Subject: [PATCH 23/48] Add call to function in verify script --- scripts/verify/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 54e2c1d..3706bd6 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -1,4 +1,5 @@ import fetch from "node-fetch"; +import { getExtensionDetails } from "../common/extensionDetails.js"; function createDiscordVerificationPost(id, data) { const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; @@ -29,3 +30,5 @@ export async function sendDiscordWebhook() { console.log(JSON.stringify(await response.text(), null, 2)); } } + +await sendDiscordWebhook(); From 906dd2a7618d371617d1c0f3863ba770dabfe8db Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 15:35:39 +1000 Subject: [PATCH 24/48] Edit permission on vaildate-manifest workflow --- .github/workflows/validate-manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 48e35c7..6a62707 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -30,7 +30,7 @@ jobs: needs: validate runs-on: ubuntu-latest permissions: - pull-requests: write + issues: write steps: - uses: actions/github-script@v6 with: From 3e52c1f52bf1e1344adf166f75ffca6411714c67 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 16:35:35 +1000 Subject: [PATCH 25/48] Remove manifest validation This will take more time to do with proper security hardening --- .github/workflows/validate-manifest.yml | 43 ---------- scripts/validation/manifest.js | 107 ------------------------ 2 files changed, 150 deletions(-) delete mode 100644 .github/workflows/validate-manifest.yml delete mode 100644 scripts/validation/manifest.js diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml deleted file mode 100644 index 6a62707..0000000 --- a/.github/workflows/validate-manifest.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Validate Matter -on: - # Trigger the workflow on push or pull request - pull_request: - branches: - - main - paths: - - "extensions.json" -jobs: - validate: - if: github.event_name == 'pull_request' - runs-on: ubuntu-latest - outputs: - result: ${{ steps.validation.outputs.result }} - steps: - - name: Install Node - uses: actions/setup-node@v3 - with: - node-version: 16 - - uses: actions/checkout@v3 - - name: Install Packages - run: yarn --cwd ./scripts install --frozen-lockfile - - name: Run Manifest File Validation - id: validation - run: | - echo "result<> $GITHUB_OUTPUT - node --no-warnings ./scripts/validation/manifest.js >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - comment: - needs: validate - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `${{ needs.validate.outputs.result }}` - }) diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js deleted file mode 100644 index ebfb117..0000000 --- a/scripts/validation/manifest.js +++ /dev/null @@ -1,107 +0,0 @@ -import Joi from "joi"; - -import { getExtensionDetails } from "../common/extensionDetails.js"; - -const checkUrl = (value, helpers) => { - new URL(value); - - return value; -}; - -const schema = Joi.object({ - title: Joi.string().required(), - description: Joi.string().required(), - author: Joi.string().required(), - image: Joi.string().custom(checkUrl, "check url is valid format").required(), - icon: Joi.string().custom(checkUrl, "check url is valid format").required(), - tags: Joi.array() - .min(1) - .items( - Joi.string().valid("built-by-owlbear").forbidden(), - Joi.string().valid( - "dice", - "fog", - "tool", - "content-pack", - "drawing", - "audio", - "combat", - "automation", - "other" - ) - ), - manifest: Joi.string() - .custom(checkUrl, "check url is valid format") - .required(), - "learn-more": Joi.alternatives() - .try( - Joi.string().email(), - Joi.string().custom(checkUrl, "check url is valid format") - ) - .required(), -}); - -async function checkExtensionManifest() { - const { id, data } = await getExtensionDetails(); - - if (!data) { - return false; - } - - const issues = validateManifest(data); - - return issues; -} - -export function validateManifest(data) { - const validationIssues = []; - const { value, error } = schema.validate(data, { abortEarly: false }); - - if (error) { - error.details.forEach((element) => { - validationIssues.push(element.message); - }); - } - - formatConsoleOutput(validationIssues); - - return validationIssues; -} - -/* - * - */ -function formatConsoleOutput(issues) { - let output = "## Manifest Validation Result\n\n"; - - if (Array.isArray(issues)) { - if (issues.length === 0) { - output += "No issues found in manifest type validation."; - console.log(output); - return; - } - - output += "***Issues found in manifest type validation.***\n\n"; - - for (let issue of issues) { - output += `- ${issue}\n`; - } - - output += `\n\n***You must follow the below guidelines on manifest files***\n\n -| NAME | DESCRIPTION | -| :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| title | This is the name of your extension | -| description | This should be a brief description of what your extension is for | -| author | This is your name or alias | -| image | This is an absolute link to a hero image for your extension. The image must be hosted on an external site. | -| icon | This is an absolute link to your extensions icon and must be hosted on an external site | -| tags | To help make your extension more discoverable you can add tags to it. In the extension store, users will be able to find your extension under that tag. You may only use our [supported tags](https://github.com/owlbear-rodeo/extensions/blob/main/tags.json) and only extensions published by Owlbear Rodeo can use the built-by-owlbear tag. | -| manifest | This should have an link to your manifest file. This is what will be copied by other users to install your extension. | -| learn-more | You should link to a site or email that users can go to to find more information about your extension. |`; - - console.log(output); - return; - } -} - -await checkExtensionManifest(); From 482df2f2027e351cc6bd6bdea1cf787abd44d505 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:02:28 +1000 Subject: [PATCH 26/48] Edit verification submission action --- .github/workflows/submit-verification-request.yml | 8 ++++++++ scripts/common/extensionDetails.js | 15 +++++++++++++++ scripts/verify/index.js | 8 ++++---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index a65beb4..2e9c7b1 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -12,6 +12,13 @@ jobs: if: contains(github.event.comment.body, '/verify') with: node-version: 16 + - uses: actions/github-script@v6 + id: process-comment + with: + script: | + const body = github.event.comment.body + const result = body.split[" "][1] + console.log(result) - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile @@ -19,6 +26,7 @@ jobs: run: node --no-warnings ./scripts/verify/index.js env: DISCORD_VERIFY_WEBHOOK: ${{ secrets.DISCORD_VERIFY_WEBHOOK }} + EXTENSION_KEY: ${{ steps.process-comment.outputs.result }} - uses: actions/github-script@v6 with: script: | diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index f186b61..b951f05 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -17,3 +17,18 @@ export async function getExtensionDetails() { return { id, data }; } } + +export async function getExtensionDetailsFromKey(key) { + const item = data[key]; + + console.log(data); + + const result = await fetch(item); + + if (result.ok) { + const markdown = await result.text(); + const data = matter(markdown)["data"]; + + return { key, data }; + } +} diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 3706bd6..c89af16 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -1,5 +1,5 @@ import fetch from "node-fetch"; -import { getExtensionDetails } from "../common/extensionDetails.js"; +import { getExtensionDetailsFromKey } from "../common/extensionDetails.js"; function createDiscordVerificationPost(id, data) { const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; @@ -11,8 +11,8 @@ function createDiscordVerificationPost(id, data) { return post; } -export async function sendDiscordWebhook() { - const { id, data } = await getExtensionDetails(); +export async function sendDiscordWebhook(key) { + const { key: id, data } = await getExtensionDetailsFromKey(key); const embed = createDiscordVerificationPost(id, data); @@ -31,4 +31,4 @@ export async function sendDiscordWebhook() { } } -await sendDiscordWebhook(); +await sendDiscordWebhook(process.env.EXTENSION_KEY); From c6e14a3a784750d9d0bc418bcc9dda48ee0998d3 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:08:33 +1000 Subject: [PATCH 27/48] Edit verification submission action --- .github/workflows/submit-verification-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 2e9c7b1..06c856b 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,7 +16,7 @@ jobs: id: process-comment with: script: | - const body = github.event.comment.body + const body = github.event.issue_comment.comment.body const result = body.split[" "][1] console.log(result) - uses: actions/checkout@v3 From 30949f19597a66fdc199983f59db26e6b83a32ec Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:11:47 +1000 Subject: [PATCH 28/48] Edit verification submission action -> add logs --- .github/workflows/submit-verification-request.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 06c856b..88b8421 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,8 +16,9 @@ jobs: id: process-comment with: script: | - const body = github.event.issue_comment.comment.body + const body = context.issue.comment.body const result = body.split[" "][1] + console.log(context) console.log(result) - uses: actions/checkout@v3 - name: Install Packages From 144117002df767ee3de9df85eba9170d637e1eca Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:13:11 +1000 Subject: [PATCH 29/48] Edit logs on submission verification workflow --- .github/workflows/submit-verification-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 88b8421..696e4a6 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,9 +16,9 @@ jobs: id: process-comment with: script: | + console.log(context) const body = context.issue.comment.body const result = body.split[" "][1] - console.log(context) console.log(result) - uses: actions/checkout@v3 - name: Install Packages From 48fa5c805dfa76455691e28263c7a3f9683e9932 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:15:02 +1000 Subject: [PATCH 30/48] Patch comment on submission workflow --- .github/workflows/submit-verification-request.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 696e4a6..762a50b 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -16,8 +16,7 @@ jobs: id: process-comment with: script: | - console.log(context) - const body = context.issue.comment.body + const body = context.payload.comment.body const result = body.split[" "][1] console.log(result) - uses: actions/checkout@v3 From 120bdd07e609f4e9dfc289377fc1dd73fc2c4934 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:16:16 +1000 Subject: [PATCH 31/48] Edit logs on submission workflow --- .github/workflows/submit-verification-request.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 762a50b..99cbd6e 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -17,7 +17,8 @@ jobs: with: script: | const body = context.payload.comment.body - const result = body.split[" "][1] + console.log(body) + const result = body.split[" "] console.log(result) - uses: actions/checkout@v3 - name: Install Packages From 5507f9cb21d3f734ac2e77d035c7c896b1f4a65c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:26:06 +1000 Subject: [PATCH 32/48] Add data validation to verify script --- .github/workflows/submit-verification-request.yml | 2 -- scripts/verify/index.js | 8 +++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 99cbd6e..657789f 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -18,8 +18,6 @@ jobs: script: | const body = context.payload.comment.body console.log(body) - const result = body.split[" "] - console.log(result) - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile diff --git a/scripts/verify/index.js b/scripts/verify/index.js index c89af16..f8c0fdc 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -11,7 +11,13 @@ function createDiscordVerificationPost(id, data) { return post; } -export async function sendDiscordWebhook(key) { +export async function sendDiscordWebhook(value) { + const values = value.split(" "); + if (values.length !== 2) { + throw Error("invalid submission"); + } + + const key = values[1]; const { key: id, data } = await getExtensionDetailsFromKey(key); const embed = createDiscordVerificationPost(id, data); From 587bc929801c2d9c7ee2976cb16d970361b5de7c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:30:39 +1000 Subject: [PATCH 33/48] Edit submission workflow -> edit step return --- .github/workflows/submit-verification-request.yml | 2 +- scripts/verify/index.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 657789f..0e5d302 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -17,7 +17,7 @@ jobs: with: script: | const body = context.payload.comment.body - console.log(body) + return body - uses: actions/checkout@v3 - name: Install Packages run: yarn --cwd ./scripts install --frozen-lockfile diff --git a/scripts/verify/index.js b/scripts/verify/index.js index f8c0fdc..57b1da2 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -14,6 +14,7 @@ function createDiscordVerificationPost(id, data) { export async function sendDiscordWebhook(value) { const values = value.split(" "); if (values.length !== 2) { + console.log(values); throw Error("invalid submission"); } From 3f20b7466b964789d527c1da7f0944e573fb5987 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:33:31 +1000 Subject: [PATCH 34/48] Add logs to verify script --- scripts/verify/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 57b1da2..676969f 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -38,4 +38,4 @@ export async function sendDiscordWebhook(value) { } } -await sendDiscordWebhook(process.env.EXTENSION_KEY); +await sendDiscordWebhook("/verify dice"); From 4f82524abf4f2f4bf38549ab3aaec282e034708a Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:36:34 +1000 Subject: [PATCH 35/48] Remove console log on extensionDetails --- scripts/common/extensionDetails.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index b951f05..5b7c854 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -21,8 +21,6 @@ export async function getExtensionDetails() { export async function getExtensionDetailsFromKey(key) { const item = data[key]; - console.log(data); - const result = await fetch(item); if (result.ok) { From 90e8cd5f0620e9e4a33784d2e05e7b2a966402d2 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:38:22 +1000 Subject: [PATCH 36/48] Fix hardcoded verification --- scripts/common/extensionDetails.js | 3 +++ scripts/verify/index.js | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index 5b7c854..bc42b0a 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -21,6 +21,9 @@ export async function getExtensionDetails() { export async function getExtensionDetailsFromKey(key) { const item = data[key]; + console.log(key); + console.log(item); + const result = await fetch(item); if (result.ok) { diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 676969f..bdc9fa5 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -18,6 +18,8 @@ export async function sendDiscordWebhook(value) { throw Error("invalid submission"); } + console.log(values); + const key = values[1]; const { key: id, data } = await getExtensionDetailsFromKey(key); @@ -38,4 +40,4 @@ export async function sendDiscordWebhook(value) { } } -await sendDiscordWebhook("/verify dice"); +await sendDiscordWebhook(process.env.EXTENSION_KEY); From cbd7a6ad1df6f914ade50880215529cf6a8c7314 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:39:42 +1000 Subject: [PATCH 37/48] Add string parse to environment var input --- scripts/verify/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index bdc9fa5..46cdab2 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -12,7 +12,7 @@ function createDiscordVerificationPost(id, data) { } export async function sendDiscordWebhook(value) { - const values = value.split(" "); + const values = `${value}`.split(" "); if (values.length !== 2) { console.log(values); throw Error("invalid submission"); From 9e8e48d33a6861cde61c7d2cd98cb63784684d7c Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:42:11 +1000 Subject: [PATCH 38/48] Remove quotes from value --- scripts/verify/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index 46cdab2..c6b9320 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -12,7 +12,7 @@ function createDiscordVerificationPost(id, data) { } export async function sendDiscordWebhook(value) { - const values = `${value}`.split(" "); + const values = value.replaceAll('"', "").split(" "); if (values.length !== 2) { console.log(values); throw Error("invalid submission"); From 156622a35772f120aa6172c484a78fe04180e4c9 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Wed, 20 Sep 2023 17:43:27 +1000 Subject: [PATCH 39/48] Remove console logs --- scripts/common/extensionDetails.js | 3 --- scripts/verify/index.js | 2 -- 2 files changed, 5 deletions(-) diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index bc42b0a..5b7c854 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -21,9 +21,6 @@ export async function getExtensionDetails() { export async function getExtensionDetailsFromKey(key) { const item = data[key]; - console.log(key); - console.log(item); - const result = await fetch(item); if (result.ok) { diff --git a/scripts/verify/index.js b/scripts/verify/index.js index c6b9320..db8eb72 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -18,8 +18,6 @@ export async function sendDiscordWebhook(value) { throw Error("invalid submission"); } - console.log(values); - const key = values[1]; const { key: id, data } = await getExtensionDetailsFromKey(key); From e06644acd845db459afbb5e5db9c012fdb795fea Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 15:23:54 +1000 Subject: [PATCH 40/48] Edit verification message --- scripts/verify/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/verify/index.js b/scripts/verify/index.js index db8eb72..96ffe86 100644 --- a/scripts/verify/index.js +++ b/scripts/verify/index.js @@ -2,9 +2,10 @@ import fetch from "node-fetch"; import { getExtensionDetailsFromKey } from "../common/extensionDetails.js"; function createDiscordVerificationPost(id, data) { - const text = `## Extension Verfication Request\n\n*${data.title}* would like to be verified.\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors\n- Extension design uses accessible font sizes\n- Extension is legible with Owlbear Rodeo’s light and dark theme\n- Extension is fully functional on mobile devices (1)\n- Extension is fully functional across all major browsers (2)\n- Extension requires no other extensions to be installed\n- Extension functions in a private browsing window or with cookies disabled\n- Extension makes proper use of the Owlbear Rodeo APIs (3)\n- Extension functions in all configurations of an Owlbear Rodeo Room (4)\n- Extension provides user support for queries, issues and requests\n- Extension has no known bugs\n- Extension manifest is hosted on a custom domain controlled by the extension developer\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.`; + const text = `## Extension Verfication Request\n\n${data.title} would like to be verified.\n\nIt can be installed via this [store page](https://extensions.owlbear.rodeo/${id}).\n\nTo be verified the extension must meet these criteria:\n\n- Extension design uses accessible colors :art:\n- Extension design uses accessible font sizes :blue_book:\n- Extension is legible with Owlbear Rodeo’s light and dark theme :ghost:\n- Extension is fully functional on mobile devices (1) :mobile_phone:\n- Extension is fully functional across all major browsers (2) :computer:\n- Extension requires no other extensions to be installed :link: \n- Extension functions in a private browsing window or with cookies disabled :lock:\n- Extension makes proper use of the Owlbear Rodeo APIs (3) :jigsaw: \n- Extension functions in all configurations of an Owlbear Rodeo Room (4) :house:\n- Extension provides user support for queries, issues and requests :question:\n- Extension has no known bugs :bug: \n- Extension manifest is hosted on a custom domain controlled by the extension developer :pencil:\n\nNotes:\n\n1) This includes iPhone’s, Android devices as well as tablets such as an iPad.\n\n2) Major browsers include Chrome, Firefox and Safari\n\n3) For example the Scene API is only used to store data that shares the Scene lifecycle\n\n4) Valid configurations include a Room with a Scene open and no Scene open\n\nAlso note that the term “fully functional” above means all extension functionally works correctly whereas the term “functional” means the extension still functions but some features may not be available.\n\n### To help verify this extension react to this message with the criteria that are met! (i.e. react :bug: if it has no known bugs)`; const post = { + thread_name: `${data.title} wants to be verified`, content: text, }; From bdab7b5a9d111642ebfa597c31c08809e3a47aff Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Thu, 21 Sep 2023 15:31:39 +1000 Subject: [PATCH 41/48] Create verified.json --- verified.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 verified.json diff --git a/verified.json b/verified.json new file mode 100644 index 0000000..e017071 --- /dev/null +++ b/verified.json @@ -0,0 +1,5 @@ +{ + "initiative-tracker": true, + "dice": true, + "colored-rings": true +} From ceac3c947280a6cad958a7526856ca2780e1b688 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 15:39:49 +1000 Subject: [PATCH 42/48] Edit update-extension-store.yml --- .github/workflows/update-extension-store.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-extension-store.yml b/.github/workflows/update-extension-store.yml index 108a5ea..440a6a7 100644 --- a/.github/workflows/update-extension-store.yml +++ b/.github/workflows/update-extension-store.yml @@ -1,13 +1,11 @@ name: Update Extention Store -on: +on: push: paths: - "extensions.json" branches: - main workflow_dispatch: - branches: - - main jobs: regenerate: @@ -43,3 +41,18 @@ jobs: run: yarn --cwd ./scripts run trigger env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `Your extension is now available on the Extension Store! 🎉 + + You can now submit your extension for verification. To start the verification process respond to your pull request with the message `/verify ` where `` is the key used in the `extensions.json` file in your pull request. + + Once this has been done a thread will be created on the [Owlbear Rodeo Discord](https://discord.gg/u5RYMkV98s) tracking the status of all the above guidelines. + + Once the community has verified that all the guidelines have been passed the Owlbear Rodeo team will add the verified badge to your extension.` + }) From f4977129370e9b5e4cc8639b281bbea8854d9a4e Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 16:25:34 +1000 Subject: [PATCH 43/48] Add escapes to backticks in pr comment --- .github/workflows/update-extension-store.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-extension-store.yml b/.github/workflows/update-extension-store.yml index 440a6a7..a5dac0d 100644 --- a/.github/workflows/update-extension-store.yml +++ b/.github/workflows/update-extension-store.yml @@ -50,7 +50,7 @@ jobs: repo: context.repo.repo, body: `Your extension is now available on the Extension Store! 🎉 - You can now submit your extension for verification. To start the verification process respond to your pull request with the message `/verify ` where `` is the key used in the `extensions.json` file in your pull request. + You can now submit your extension for verification. To start the verification process respond to your pull request with the message \`/verify \` where \`\` is the key used in the `extensions.json` file in your pull request. Once this has been done a thread will be created on the [Owlbear Rodeo Discord](https://discord.gg/u5RYMkV98s) tracking the status of all the above guidelines. From d8c0dd206067ca89661de91c3d372ba05f92c67b Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 16:31:42 +1000 Subject: [PATCH 44/48] Add validation script for manifest files --- scripts/common/extensionDetails.js | 13 ++++ scripts/validation/manifest.js | 107 +++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 scripts/validation/manifest.js diff --git a/scripts/common/extensionDetails.js b/scripts/common/extensionDetails.js index 5b7c854..e5c68a1 100644 --- a/scripts/common/extensionDetails.js +++ b/scripts/common/extensionDetails.js @@ -30,3 +30,16 @@ export async function getExtensionDetailsFromKey(key) { return { key, data }; } } + +export async function getExtensionDetailsFromUrl(url) { + const result = await fetch(url); + + if (result.ok) { + const markdown = await result.text(); + const data = matter(markdown)["data"]; + + console.log("data", data); + + return data; + } +} diff --git a/scripts/validation/manifest.js b/scripts/validation/manifest.js new file mode 100644 index 0000000..5eed0b0 --- /dev/null +++ b/scripts/validation/manifest.js @@ -0,0 +1,107 @@ +import Joi from "joi"; + +import { getExtensionDetailsFromUrl } from "../common/extensionDetails.js"; + +const checkUrl = (value, helpers) => { + new URL(value); + + return value; +}; + +const schema = Joi.object({ + title: Joi.string().required(), + description: Joi.string().required(), + author: Joi.string().required(), + image: Joi.string().custom(checkUrl, "check url is valid format").required(), + icon: Joi.string().custom(checkUrl, "check url is valid format").required(), + tags: Joi.array() + .min(1) + .items( + Joi.string().valid("built-by-owlbear").forbidden(), + Joi.string().valid( + "dice", + "fog", + "tool", + "content-pack", + "drawing", + "audio", + "combat", + "automation", + "other" + ) + ), + manifest: Joi.string() + .custom(checkUrl, "check url is valid format") + .required(), + "learn-more": Joi.alternatives() + .try( + Joi.string().email(), + Joi.string().custom(checkUrl, "check url is valid format") + ) + .required(), +}); + +async function checkExtensionManifest(url) { + const data = await getExtensionDetailsFromUrl(url); + + if (!data) { + return false; + } + + const issues = validateManifest(data); + + return issues; +} + +export function validateManifest(data) { + const validationIssues = []; + const { value, error } = schema.validate(data, { abortEarly: false }); + + if (error) { + error.details.forEach((element) => { + validationIssues.push(element.message); + }); + } + + formatConsoleOutput(validationIssues); + + return validationIssues; +} + +/* + * + */ +function formatConsoleOutput(issues) { + let output = "## Manifest Validation Result\n\n"; + + if (Array.isArray(issues)) { + if (issues.length === 0) { + output += "No issues found in manifest type validation."; + console.log(output); + return; + } + + output += "***Issues found in manifest type validation.***\n\n"; + + for (let issue of issues) { + output += `- ${issue}\n`; + } + + output += `\n\n***You must follow the below guidelines on manifest files***\n\n +| NAME | DESCRIPTION | +| :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| title | This is the name of your extension | +| description | This should be a brief description of what your extension is for | +| author | This is your name or alias | +| image | This is an absolute link to a hero image for your extension. The image must be hosted on an external site. | +| icon | This is an absolute link to your extensions icon and must be hosted on an external site | +| tags | To help make your extension more discoverable you can add tags to it. In the extension store, users will be able to find your extension under that tag. You may only use our [supported tags](https://github.com/owlbear-rodeo/extensions/blob/main/tags.json) and only extensions published by Owlbear Rodeo can use the built-by-owlbear tag. | +| manifest | This should have an link to your manifest file. This is what will be copied by other users to install your extension. | +| learn-more | You should link to a site or email that users can go to to find more information about your extension. |`; + + console.log(output); + return; + } +} + +await checkExtensionManifest(""); From b268b7be7c8ef85ad13cf5f2ebcf1e278a51a878 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 16:40:29 +1000 Subject: [PATCH 45/48] Add check for verification on every step on submission action --- .github/workflows/submit-verification-request.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/submit-verification-request.yml b/.github/workflows/submit-verification-request.yml index 0e5d302..9248a19 100644 --- a/.github/workflows/submit-verification-request.yml +++ b/.github/workflows/submit-verification-request.yml @@ -14,19 +14,24 @@ jobs: node-version: 16 - uses: actions/github-script@v6 id: process-comment + if: contains(github.event.comment.body, '/verify') with: script: | const body = context.payload.comment.body return body - uses: actions/checkout@v3 + if: contains(github.event.comment.body, '/verify') - name: Install Packages + if: contains(github.event.comment.body, '/verify') run: yarn --cwd ./scripts install --frozen-lockfile - name: Submit Request to Discord + if: contains(github.event.comment.body, '/verify') run: node --no-warnings ./scripts/verify/index.js env: DISCORD_VERIFY_WEBHOOK: ${{ secrets.DISCORD_VERIFY_WEBHOOK }} EXTENSION_KEY: ${{ steps.process-comment.outputs.result }} - uses: actions/github-script@v6 + if: contains(github.event.comment.body, '/verify') with: script: | github.rest.issues.createComment({ From 7b7df1d2a6e5a6f6ec3d5ade3d3cd6f4085dff45 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 16:55:16 +1000 Subject: [PATCH 46/48] Patch missing escapes on backticks for update extension store action --- .github/workflows/update-extension-store.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-extension-store.yml b/.github/workflows/update-extension-store.yml index a5dac0d..6e55ddc 100644 --- a/.github/workflows/update-extension-store.yml +++ b/.github/workflows/update-extension-store.yml @@ -50,7 +50,7 @@ jobs: repo: context.repo.repo, body: `Your extension is now available on the Extension Store! 🎉 - You can now submit your extension for verification. To start the verification process respond to your pull request with the message \`/verify \` where \`\` is the key used in the `extensions.json` file in your pull request. + You can now submit your extension for verification. To start the verification process respond to your pull request with the message \`/verify \` where \`\` is the key used in the \`extensions.json\` file in your pull request. Once this has been done a thread will be created on the [Owlbear Rodeo Discord](https://discord.gg/u5RYMkV98s) tracking the status of all the above guidelines. From a6935cffa220fe0ff367d88e9ea524b08b92d57e Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 17:07:05 +1000 Subject: [PATCH 47/48] Remove comment to pull request --- .github/workflows/update-extension-store.yml | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/.github/workflows/update-extension-store.yml b/.github/workflows/update-extension-store.yml index 6e55ddc..9e1f521 100644 --- a/.github/workflows/update-extension-store.yml +++ b/.github/workflows/update-extension-store.yml @@ -11,6 +11,9 @@ jobs: regenerate: name: Update Extension Store runs-on: ubuntu-latest + outputs: + issue: ${{ context.issue.number }} + output2: ${{ steps.step2.outputs.test }} steps: - name: Install Node uses: actions/setup-node@v3 @@ -41,18 +44,3 @@ jobs: run: yarn --cwd ./scripts run trigger env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `Your extension is now available on the Extension Store! 🎉 - - You can now submit your extension for verification. To start the verification process respond to your pull request with the message \`/verify \` where \`\` is the key used in the \`extensions.json\` file in your pull request. - - Once this has been done a thread will be created on the [Owlbear Rodeo Discord](https://discord.gg/u5RYMkV98s) tracking the status of all the above guidelines. - - Once the community has verified that all the guidelines have been passed the Owlbear Rodeo team will add the verified badge to your extension.` - }) From 9e5cd2523b5befad5597159bfb3b1677ab145861 Mon Sep 17 00:00:00 2001 From: nthouliss Date: Thu, 21 Sep 2023 17:35:16 +1000 Subject: [PATCH 48/48] Update update-extension-store.yml --- .github/workflows/update-extension-store.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/update-extension-store.yml b/.github/workflows/update-extension-store.yml index 9e1f521..9d4e657 100644 --- a/.github/workflows/update-extension-store.yml +++ b/.github/workflows/update-extension-store.yml @@ -11,9 +11,6 @@ jobs: regenerate: name: Update Extension Store runs-on: ubuntu-latest - outputs: - issue: ${{ context.issue.number }} - output2: ${{ steps.step2.outputs.test }} steps: - name: Install Node uses: actions/setup-node@v3