From f5af871bf04a9d1539c81fcc0bd15dcfe1a13021 Mon Sep 17 00:00:00 2001 From: JYC Date: Wed, 17 May 2023 09:13:41 +0200 Subject: [PATCH] add site webhook (#1086) --- site/.env.example | 7 ++++- site/src/handles/webhookHandle.js | 32 +++++++++++++++++++++ site/src/hooks.server.js | 4 +++ site/src/routes/_sponsors/+page.server.js | 6 ++++ site/src/routes/_sponsors/+page.svelte | 34 +++++++++++++++++++++++ site/tsconfig.json | 8 +++++- 6 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 site/src/handles/webhookHandle.js create mode 100644 site/src/routes/_sponsors/+page.server.js create mode 100644 site/src/routes/_sponsors/+page.svelte diff --git a/site/.env.example b/site/.env.example index b7080b49e..0596880e9 100644 --- a/site/.env.example +++ b/site/.env.example @@ -1 +1,6 @@ -VITE_SESSION_SECRET=MY_SUPER_VALUE \ No newline at end of file +VITE_SESSION_SECRET=MY_SUPER_VALUE + +# Requires the `repo` scope. +GITHUB_TOKEN_TRIGGER_SPONSORS=MY_SUPER_VALUE + +WEBHOOK_PATH="/webhook/something" \ No newline at end of file diff --git a/site/src/handles/webhookHandle.js b/site/src/handles/webhookHandle.js new file mode 100644 index 000000000..4eab99564 --- /dev/null +++ b/site/src/handles/webhookHandle.js @@ -0,0 +1,32 @@ +import { GITHUB_TOKEN_TRIGGER_SPONSORS, WEBHOOK_PATH } from '$env/static/private' +import { json } from '@sveltejs/kit' + +/** @type {import('@sveltejs/kit').Handle} */ +export const webhookHandle = async ({ event, resolve }) => { + // if WEBHOOK_PATH is defined and the request match, let's go + if (WEBHOOK_PATH && event.url.pathname === WEBHOOK_PATH) { + // trigger the CI + const result = await event.fetch( + `https://api.github.com/repos/HoudiniGraphql/sponsors/actions/workflows/generate.yml/dispatches`, + { + method: 'POST', + headers: { + Accept: 'application/vnd.github+json', + Authorization: `Bearer ${GITHUB_TOKEN_TRIGGER_SPONSORS}`, + 'X-GitHub-Api-Version': '2022-11-28' + }, + body: JSON.stringify({ ref: 'main' }) + } + ) + + let data = null + try { + data = await result.json() + } catch (error) {} + + return json({ status: result.status, statusText: result.statusText, data }) + } + + const response = await resolve(event) + return response +} diff --git a/site/src/hooks.server.js b/site/src/hooks.server.js index b99d78365..941646700 100644 --- a/site/src/hooks.server.js +++ b/site/src/hooks.server.js @@ -1,4 +1,8 @@ import { redirect } from '@sveltejs/kit' +import { sequence } from '@sveltejs/kit/hooks' +import { webhookHandle } from './handles/webhookHandle' + +export const handle = sequence(webhookHandle) /** @type {import('@sveltejs/kit').HandleServerError} */ export function handleError({ error, event }) { diff --git a/site/src/routes/_sponsors/+page.server.js b/site/src/routes/_sponsors/+page.server.js new file mode 100644 index 000000000..dd259a3e1 --- /dev/null +++ b/site/src/routes/_sponsors/+page.server.js @@ -0,0 +1,6 @@ +export const load = async (event) => { + const result = await event.fetch( + 'https://raw.githubusercontent.com/HoudiniGraphql/sponsors/main/generated/sponsors.svg' + ) + return { svg: await result.text() } +} diff --git a/site/src/routes/_sponsors/+page.svelte b/site/src/routes/_sponsors/+page.svelte new file mode 100644 index 000000000..be0d7185b --- /dev/null +++ b/site/src/routes/_sponsors/+page.svelte @@ -0,0 +1,34 @@ + + + +
+
+ + Houdini +
+
+
+ +{@html data.svg} + + diff --git a/site/tsconfig.json b/site/tsconfig.json index f34a7bef7..5efb51ebc 100644 --- a/site/tsconfig.json +++ b/site/tsconfig.json @@ -32,5 +32,11 @@ "~/*": ["src/*"] } }, - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts", "src/**/*.svelte"] + "include": [ + "src/**/*.d.ts", + "src/**/*.js", + "src/**/*.ts", + "src/**/*.svelte", + ".svelte-kit/ambient.d.ts" + ] }