Skip to content

Commit 9e5ff6a

Browse files
authored
Adds netlify function for deployment (#8)
* Adds netlify function for deployment * Use the raw event body for signing
1 parent f947dca commit 9e5ff6a

File tree

5 files changed

+511
-6
lines changed

5 files changed

+511
-6
lines changed

eslint.config.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default [
2424
'plugin:prettier/recommended',
2525
),
2626
{
27-
files: ['{src,test}/**/*.ts'],
27+
files: ['{src,test,netlify}/**/*.ts'],
2828
plugins: {
2929
'@typescript-eslint': typescriptEslint,
3030
prettier,

netlify/functions/webhooks.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { createProbot } from 'probot';
2+
import { Handler } from '@netlify/functions';
3+
import type { WebhookEventName } from '@octokit/webhooks-types';
4+
import app from '../../src/index';
5+
6+
const handler: Handler = async event => {
7+
const probot = createProbot();
8+
try {
9+
probot.log.info('loading app');
10+
await probot.load(app);
11+
12+
const deliveryHeader = (event.headers['X-GitHub-Delivery'] ||
13+
event.headers['x-github-delivery']) as string;
14+
const nameHeader = (event.headers['X-GitHub-Event'] ||
15+
event.headers['x-github-event']) as WebhookEventName;
16+
const sigHeader = (event.headers['X-Hub-Signature-256'] ||
17+
event.headers['x-hub-signature-256']) as string;
18+
19+
await probot.webhooks.verifyAndReceive({
20+
id: deliveryHeader,
21+
name: nameHeader,
22+
signature: sigHeader,
23+
payload: event.body ?? '',
24+
});
25+
26+
probot.log.info('webhook verified');
27+
28+
return {
29+
statusCode: 200,
30+
body: '{"ok":true}',
31+
};
32+
} catch (error) {
33+
probot.log.error(error);
34+
return {
35+
statusCode: error.status || error.statusCode || 500,
36+
error: 'Probot error',
37+
};
38+
}
39+
};
40+
41+
export { handler };

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
"devDependencies": {
2525
"@eslint/eslintrc": "^3.1.0",
2626
"@eslint/js": "^8.57.0",
27+
"@netlify/functions": "^2.8.0",
2728
"@octokit/types": "^13.5.0",
29+
"@octokit/webhooks-types": "^7.5.1",
2830
"@types/node": "^20.0.0",
2931
"@typescript-eslint/eslint-plugin": "^7.13.1",
3032
"@typescript-eslint/parser": "^7.13.1",

src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,6 @@ export default (app: Probot) => {
5959
},
6060
);
6161

62+
app.log.info('probot loaded');
6263
Handlers(app);
6364
};

0 commit comments

Comments
 (0)