Skip to content

Commit

Permalink
CR_BUCKET
Browse files Browse the repository at this point in the history
  • Loading branch information
Aslemammad committed Mar 27, 2024
1 parent 035ad46 commit eb30b86
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 33 deletions.
2 changes: 1 addition & 1 deletion packages/backend/nitro.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import ncb from "nitro-cloudflare-dev";

declare module "nitro-cloudflare-dev" {
interface Env {
BUCKET: R2Bucket;
CR_BUCKET: R2Bucket;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export default eventHandler(async (event) => {
const { package: packageName, ...hashPrefixMetadata } = params;
const metadataHash = sha256(objectHash(hashPrefixMetadata));

const cursorBucket = useCursorBucket();
const cursorBucket = useCursorBucket(event);
if (!(await cursorBucket.hasItem(metadataHash))) {
throw createError({
status: 404,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ type Params = WorkflowData & {

export default eventHandler(async (event) => {
const params = getRouterParams(event) as Params;
const packagesBucket = usePackagesBucket();
const packagesBucket = usePackagesBucket(event);

const { sha, package: packageName, ...hashPrefixMetadata } = params;
const metadataHash = sha256(objectHash(hashPrefixMetadata));
Expand Down
6 changes: 3 additions & 3 deletions packages/backend/server/routes/publish.post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ export default eventHandler(async (event) => {
})
}

const workflowsBucket = useWorkflowsBucket();
const packagesBucket = usePackagesBucket();
const cursorBucket = useCursorBucket();
const workflowsBucket = useWorkflowsBucket(event);
const packagesBucket = usePackagesBucket(event);
const cursorBucket = useCursorBucket(event);
if (!(await workflowsBucket.hasItem(key))) {
throw createError({
statusCode: 401,
Expand Down
30 changes: 16 additions & 14 deletions packages/backend/server/routes/webhook.post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ import type { WorkflowData } from "../types";
import { hash } from "ohash";

export default eventHandler(async (event) => {
const app = useOctokitApp(event)
const app = useOctokitApp(event);

const { test } = useRuntimeConfig(event)
const { setItem, removeItem } = useWorkflowsBucket();
const { test } = useRuntimeConfig(event);
const { setItem, removeItem } = useWorkflowsBucket(event);

const workflowHandler: HandlerFunction<"workflow_job", unknown> = async ({
payload,
}) => {
const metadata = {
url: payload.workflow_job.html_url.split('/job/')[0], // run url: (https://github.com/stackblitz-labs/stackblitz-ci/actions/runs/8390507718)/job/23004786296
url: payload.workflow_job.html_url.split("/job/")[0], // run url: (https://github.com/stackblitz-labs/stackblitz-ci/actions/runs/8390507718)/job/23004786296
attempt: payload.workflow_job.run_attempt,
actor: payload.sender.id,
};
Expand All @@ -23,14 +23,14 @@ export default eventHandler(async (event) => {
orgOrAuthor,
repo,
sha: payload.workflow_job.head_sha,
ref: payload.workflow_job.head_branch,
ref: payload.workflow_job.head_branch!,
};

// octokit.request('POST /repos/{owner}/{repo}/pulls/{pull_number}/comments', {
// body: '',
// owner: payload.repository.owner,
// repo: payload.repository.repo

// })
// Publishing is only available throughout the lifetime of a worklow_job
await setItem(key, data);
Expand All @@ -45,12 +45,12 @@ export default eventHandler(async (event) => {
type EmitterWebhookEvent = Parameters<
typeof app.webhooks.receive | typeof app.webhooks.verifyAndReceive
>[0];
const id: EmitterWebhookEvent["id"] = event.headers.get("x-github-delivery");
const id: EmitterWebhookEvent["id"] = event.headers.get("x-github-delivery")!;
const name = event.headers.get(
"x-github-event"
) as EmitterWebhookEvent["name"];
const signature = event.headers.get("x-hub-signature-256") ?? "";
const payload = await readRawBody(event);
const payload = (await readRawBody(event))!;

try {
if (test) {
Expand All @@ -64,13 +64,15 @@ export default eventHandler(async (event) => {
await app.webhooks.verifyAndReceive({ id, name, payload, signature });
}

return {ok: true}
return { ok: true };
} catch (error) {
// app.log.error(error.message);
throw createError({
status: 500,
message: error.message
})
if (error instanceof Error) {
app.log.error(error.message);
throw createError({
status: 500,
message: error?.message,
});
}
} finally {
app.webhooks.removeListener("workflow_job", workflowHandler);
}
Expand Down
32 changes: 19 additions & 13 deletions packages/backend/server/utils/bucket.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
import type { R2Bucket } from "@cloudflare/workers-types";
import { prefixStorage } from "unstorage";
import { prefixStorage, createStorage } from "unstorage";
import cloudflareR2BindingDriver from "unstorage/drivers/cloudflare-r2-binding";
import { WorkflowData, Cursor } from "../types";
import type { H3Event } from "h3";

type Binary = Parameters<R2Bucket["put"]>[1];

export function useBucket() {
return useStorage<Binary>("bucket");
export function useBucket(event: H3Event) {
console.log(event.context.cloudflare.env)
return createStorage<Binary>({
driver: cloudflareR2BindingDriver({
base: "bucket",
// @ts-ignore TODO(upstream): fix type mismatch
binding: event.context.cloudflare.env.CR_BUCKET,
}),
});
}

export function useWorkflowsBucket() {
const storage = useBucket();
return prefixStorage<WorkflowData>(
storage,
"workflows"
);
export function useWorkflowsBucket(event: H3Event) {
const storage = useBucket(event);
return prefixStorage<WorkflowData>(storage, "workflows");
}

export function usePackagesBucket() {
const storage = useBucket();
export function usePackagesBucket(event: H3Event) {
const storage = useBucket(event);
return prefixStorage<ArrayBuffer>(storage, "packages");
}

export function useCursorBucket() {
const storage = useBucket();
export function useCursorBucket(event: H3Event) {
const storage = useBucket(event);
return prefixStorage<Cursor>(storage, "cursor");
}

0 comments on commit eb30b86

Please sign in to comment.