Webhook for Github

Hello,

I'm trying to set up a webhook that will trigger a github action. The github action builds and deploys my side. I've followed the instructions in these two posts:

-Using webhooks to fire Github action - #6 by Fares
-Setting Authorization Header in Webhooks

Still getting a 404 or 422 error. I noticed that the payload comes from prismic with event type rather than event_type, is that what is causing it?

Just pulling my hair out trying to get this to work. If anyone has done it before and might no where I am going wrong, I would really appreciate the help. I'm trying to follow the steps in the two articles above but keep getting that error when I test out the webhook.

Thanks,
-Conner

Hey Conner,

What did you set the 'key' and 'value' for your headers in Primsic as?

Thanks.

I've also just been playing with this same workflow. Unfortunately it looks like the prismic payload isn't compatible with the current Github dispatch endpoint :frowning:

It's not just the mismatch between type and event_type, github also won't accept secret, and other extra fields…

Welcome to the community, Daniel.

Thanks for the extra info, I'm going to report this to the team as a Request For Change, if/when we have any updates we'll let you know here.

2 Likes

This is an issue that I was tracking for around 1.5years in Prismic. I saw many requests on this topic from various users. I send the same in feedback email as well. I still don't see any solutions.

Is it something Prismic planning to do? Is there any realistic timeline?

Thanks,
Subin

Hi @subin01,

We are tracking this in our backlog, but due to other high-priority tasks, we cannot get to it just yet. We will of course provide you with an update as soon as possible.

Thanks.

2 Likes

@Phil Any update on this issue?

Hi @nishuarora.nishant,

This is still being tracked as a feature request, but there has been no movement in terms of priority.

Thanks.

@Phil what about now? There are threads going back 3 years at least asking about custom bodies for webhooks — a necessary feature to trigger GitHub actions.

Any chance this sees the light of day in 2023?

Hello @wyatt and others,

Thanks a lot for your suggestions for enhancements. While we don't have immediate plans to incorporate this feature, many of our users have found a viable alternative.

With the growing trend towards serverless architecture, you can achieve payload customization using a proxy function. Below is a sample code snippet that demonstrates how to accomplish this with a serverless function in Vercel.

import type { VercelRequest, VercelResponse } from "@vercel/node";

const OWNER = "owner";
const REPO = "repo";
const WORKFLOW_ID = "workflowID";

export default async function handler(request: VercelRequest, response: VercelResponse) {
  if (request.body.secret !== process.env.GITHUB_WEBHOOK_SECRET) {
    return response.status(401).send({ error: "Unauthorized access" });
  }

  const res = await fetch(
    `https://api.github.com/repos/${OWNER}/${REPO}/actions/workflows/${WORKFLOW_ID}/dispatches`,
    {
      method: "POST",
      body: JSON.stringify({
        ref: "master",
        inputs: {
          body: request.body,
        },
      }),
      headers: {
        Accept: "application/vnd.github+json",
        Authorization: `Bearer ${process.env.GITHUB_ACCESS_TOKEN}`,
        "X-GitHub-Api-Version": "2022-11-28",
      },
    }
  );

  if (res.ok) {
    return response.status(204).send({ success: true });
  } else {
    return response.status(400).send({ error: "Webhook forwarding failed" });
  }
}

I hope that you'll find this workaround useful.

Cheers,

Thanks @renaud, the sample implementation is useful — but I will say that expecting users to run, maintain, and pay for additional infrastructure just to make webhooks work with an extremely common CI provider is preeeeeeetttty lame from a product standpoint.

1 Like