Skip to content

Commit

Permalink
Upload sourcemaps to sentry for workers-shared workers (#8094)
Browse files Browse the repository at this point in the history
  • Loading branch information
WillTaylorDev authored Feb 11, 2025
1 parent 1fdc88e commit d83dd19
Show file tree
Hide file tree
Showing 7 changed files with 220 additions and 24 deletions.
5 changes: 5 additions & 0 deletions .changeset/cuddly-jeans-check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@cloudflare/workers-shared": minor
---

Provides sentry sourcemap generation and upload on production deploys.
3 changes: 3 additions & 0 deletions .github/workflows/changesets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,7 @@ jobs:
WORKERS_NEW_CLOUDFLARE_ACCOUNT_ID: ${{ secrets.WORKERS_NEW_CLOUDFLARE_ACCOUNT_ID }}
WORKERS_NEW_CLOUDFLARE_API_TOKEN: ${{ secrets.WORKERS_NEW_CLOUDFLARE_API_TOKEN }}
WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN: ${{ secrets.WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN }}
WORKERS_SHARED_SENTRY_ACCESS_ID: ${{ secrets.WORKERS_SHARED_SENTRY_ACCESS_ID }}
WORKERS_SHARED_SENTRY_ACCESS_SECRET: ${{ secrets.WORKERS_SHARED_SENTRY_ACCESS_SECRET }}
WORKERS_SHARED_SENTRY_AUTH_TOKEN: ${{ secrets.WORKERS_SHARED_SENTRY_AUTH_TOKEN }}
VSCE_PAT: ${{ secrets.VSCE_PAT }}
3 changes: 3 additions & 0 deletions .github/workflows/workers-shared-deploy-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,6 @@ jobs:
working-directory: packages/workers-shared
env:
WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN: ${{ secrets.WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN }}
WORKERS_SHARED_SENTRY_ACCESS_ID: ${{ secrets.WORKERS_SHARED_SENTRY_ACCESS_ID }}
WORKERS_SHARED_SENTRY_ACCESS_SECRET: ${{ secrets.WORKERS_SHARED_SENTRY_ACCESS_SECRET }}
WORKERS_SHARED_SENTRY_AUTH_TOKEN: ${{ secrets.WORKERS_SHARED_SENTRY_AUTH_TOKEN }}
15 changes: 11 additions & 4 deletions packages/workers-shared/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,24 @@
"check:type": "pnpm run check:type:tests && tsc",
"check:type:tests": "tsc -p ./asset-worker/tests/tsconfig.json && tsc -p ./router-worker/tests/tsconfig.json",
"clean": "rimraf dist",
"deploy": "pnpm run deploy:router-worker && pnpm run deploy:asset-worker",
"deploy:asset-worker": "CLOUDFLARE_API_TOKEN=$WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN pnpx wrangler versions upload -c asset-worker/wrangler.toml",
"deploy": "pnpm run generate-sourcemaps && pnpm run deploy:router-worker && pnpm run deploy:asset-worker && pnpm run upload-sourcemaps",
"deploy:asset-worker": "CLOUDFLARE_API_TOKEN=$WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN pnpx wrangler versions upload -c asset-worker/wrangler.toml --tag $(node -r esbuild-register ./scripts/get-version-tag.ts)",
"deploy:asset-worker-staging": "CLOUDFLARE_API_TOKEN=$WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN pnpx wrangler deploy -c asset-worker/wrangler.toml -e staging",
"deploy:router-worker": "CLOUDFLARE_API_TOKEN=$WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN pnpx wrangler versions upload -c router-worker/wrangler.toml",
"deploy:router-worker": "CLOUDFLARE_API_TOKEN=$WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN pnpx wrangler versions upload -c router-worker/wrangler.toml --tag $(node -r esbuild-register ./scripts/get-version-tag.ts)",
"deploy:router-worker-staging": "CLOUDFLARE_API_TOKEN=$WORKERS_DEPLOY_AND_CONFIG_CLOUDFLARE_API_TOKEN pnpx wrangler deploy -c router-worker/wrangler.toml -e staging",
"deploy:staging": "pnpm run deploy:router-worker-staging && pnpm run deploy:asset-worker-staging",
"dev": "pnpm run clean && concurrently -n bundle:asset-worker,bundle:router-worker -c blue,magenta \"pnpm run bundle:asset-worker --watch\" \"pnpm run bundle:router-worker --watch\"",
"generate-sourcemaps": "pnpm run generate-sourcemaps:asset-worker && pnpm generate-sourcemaps:router-worker",
"generate-sourcemaps:asset-worker": "npx wrangler versions upload -c asset-worker/wrangler.toml --dry-run --outdir=./dist",
"generate-sourcemaps:router-worker": "npx wrangler versions upload -c router-worker/wrangler.toml --dry-run --outdir=./dist",
"test": "concurrently --group -n router-worker,asset-worker \"pnpm run test:router-worker\" \"pnpm run test:asset-worker\"",
"test:asset-worker": "vitest -c asset-worker/vitest.config.mts --dir asset-worker",
"test:ci": "concurrently --group -n router-worker,asset-worker \"pnpm run test:router-worker --run\" \"pnpm run test:asset-worker --run\"",
"test:router-worker": "vitest -c router-worker/vitest.config.mts --dir router-worker",
"types:emit": "tsc index.ts --declaration --emitDeclarationOnly --declarationDir ./dist"
"types:emit": "tsc index.ts --declaration --emitDeclarationOnly --declarationDir ./dist",
"upload-sourcemaps": "pnpm run upload-sourcemaps:asset-worker && pnpm run upload-sourcemaps:router-worker",
"upload-sourcemaps:asset-worker": "node -r esbuild-register ./scripts/upload-sourcemaps.ts --worker asset-worker --tag $(node -r esbuild-register ./scripts/get-version-tag.ts)",
"upload-sourcemaps:router-worker": "node -r esbuild-register ./scripts/upload-sourcemaps.ts --worker router-worker --tag $(node -r esbuild-register ./scripts/get-version-tag.ts)"
},
"dependencies": {
"mime": "^3.0.0",
Expand All @@ -54,6 +60,7 @@
"@cloudflare/vitest-pool-workers": "^0.5.31",
"@cloudflare/workers-tsconfig": "workspace:*",
"@cloudflare/workers-types": "^4.20250204.0",
"@sentry/cli": "^2.37.0",
"@types/mime": "^3.0.4",
"concurrently": "^8.2.2",
"esbuild": "0.17.19",
Expand Down
10 changes: 10 additions & 0 deletions packages/workers-shared/scripts/get-version-tag.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Generates a version tag which can be used with version upload and associated with sentry releases

import { execSync } from "child_process";

try {
const hash = execSync("git rev-parse --short=10 HEAD").toString().trim();
console.log(hash);
} catch (error) {
console.log("UNKNOWN");
}
73 changes: 73 additions & 0 deletions packages/workers-shared/scripts/upload-sourcemaps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// Creates a sentry release with associated sourcemaps
import SentryCli from "@sentry/cli";

const requireEnvVar = (varName: string): string => {
const varValue = process.env[varName];
if (varValue === undefined || varValue === "") {
throw new Error(`Missing required environment variable: ${varName}`);
}
return varValue;
};

const requireVar = (varName: string): string => {
const args = process.argv.slice(2);

for (let i = 0; i < args.length; i += 2) {
if (args[i].startsWith("--") && args[i].substring(2) === varName) {
return args[i + 1];
}
}
throw new Error(`Missing required variable: ${varName}`);
};

// Vars
const targetWorker = requireVar("worker");
const sentryRelease = requireVar("tag");

// EnvVars
const sentryAuthToken = requireEnvVar("WORKERS_SHARED_SENTRY_AUTH_TOKEN");
const sentryAccessClientID = requireEnvVar("WORKERS_SHARED_SENTRY_ACCESS_ID");
const sentryAccessClientSecret = requireEnvVar(
"WORKERS_SHARED_SENTRY_ACCESS_SECRET"
);

// Add a custom header to get through cf access
const accessHeader = `cf-access-client-id: ${sentryAccessClientID}
cf-access-client-secret: ${sentryAccessClientSecret}`;

async function generateRelease(worker: string, release: string) {
const dir = `./${worker}/dist`;
console.log(`Dir path: ${dir}`);

const sentryCli = new SentryCli(null, {
org: "cloudflare",
project: worker,
url: "https://sentry10.cfdata.org/",
authToken: sentryAuthToken,
customHeader: accessHeader,
});

console.log(`Creating release: ${release}`);
await sentryCli.releases.new(release);

console.log("Finalizing release");
await sentryCli.releases.finalize(release);

console.log("Inject debug ids");
await sentryCli.execute(["sourcemaps", "inject", dir], true);

console.log("Uploading sourcemaps");
await sentryCli.releases.uploadSourceMaps(release, {
include: [dir],
urlPrefix: "/",
});
}

generateRelease(targetWorker, sentryRelease)
.then(() =>
console.log(`Successfully uploaded sourcemaps for ${targetWorker}`)
)
.catch((e) => {
console.error(e);
process.exit(1);
});
Loading

0 comments on commit d83dd19

Please sign in to comment.