diff --git a/apps/canvas/back/src/index.ts b/apps/canvas/back/src/index.ts
index daeded2..a2e8b31 100644
--- a/apps/canvas/back/src/index.ts
+++ b/apps/canvas/back/src/index.ts
@@ -772,38 +772,50 @@
 		resp.status(400).send({ error: "GitHub token not configured" });
 		return;
 	}
-	let deployKey: string | null = project.deployKey;
-	let deployKeyPublic: string | null = project.deployKeyPublic;
-	if (!deployKeyPublic) {
-		[deployKeyPublic, deployKey] = await generateKey(tmp.dirSync().name);
-		await db.project.update({
-			where: { id: projectId },
-			data: {
-				deployKeyPublic: deployKeyPublic,
-				deployKey: deployKey,
-			},
+	let tmpDir: tmp.DirResult | null = null;
+	try {
+		let deployKey: string | null = project.deployKey;
+		let deployKeyPublic: string | null = project.deployKeyPublic;
+		if (!deployKeyPublic) {
+			[deployKeyPublic, deployKey] = await generateKey(tmp.dirSync().name);
+			await db.project.update({
+				where: { id: projectId },
+				data: {
+					deployKeyPublic: deployKeyPublic,
+					deployKey: deployKey,
+				},
+			});
+		}
+		const github = new GithubClient(project.githubToken);
+		const result = analyzeRepoReqSchema.safeParse(req.body);
+		if (!result.success) {
+			resp.status(400).send({ error: "Invalid request data" });
+			return;
+		}
+		const { address } = result.data;
+		tmpDir = tmp.dirSync({
+			unsafeCleanup: true,
 		});
+		await github.addDeployKey(address, deployKeyPublic);
+		await fs.promises.writeFile(path.join(tmpDir.name, "key"), deployKey!, {
+			mode: 0o600,
+		});
+		shell.exec(
+			`GIT_SSH_COMMAND='ssh -i ${tmpDir.name}/key -o IdentitiesOnly=yes' git clone ${address} ${tmpDir.name}/code`,
+		);
+		const fsc = new RealFileSystem(`${tmpDir.name}/code`);
+		const analyzer = new NodeJSAnalyzer();
+		const info = await analyzer.analyze(fsc, "/");
+		resp.status(200).send([info]);
+	} catch (e) {
+		console.error(e);
+		resp.status(500).send({ error: "Failed to analyze repository" });
+	} finally {
+		if (tmpDir) {
+			tmpDir.removeCallback();
+		}
+		resp.end();
 	}
-	const github = new GithubClient(project.githubToken);
-	const result = analyzeRepoReqSchema.safeParse(req.body);
-	if (!result.success) {
-		resp.status(400).send({ error: "Invalid request data" });
-		return;
-	}
-	const { address } = result.data;
-	const tmpDir = tmp.dirSync();
-	await github.addDeployKey(address, deployKeyPublic);
-	await fs.promises.writeFile(path.join(tmpDir.name, "key"), deployKey!, {
-		mode: 0o600,
-	});
-	shell.exec(
-		`GIT_SSH_COMMAND='ssh -i ${tmpDir.name}/key -o IdentitiesOnly=yes' git clone ${address} ${tmpDir.name}/code`,
-	);
-	const fsc = new RealFileSystem(`${tmpDir.name}/code`);
-	const analyzer = new NodeJSAnalyzer();
-	const info = await analyzer.analyze(fsc, "/");
-	console.log(info);
-	resp.status(200).send([info]);
 };
 
 const auth = (req: express.Request, resp: express.Response, next: express.NextFunction) => {
