-
Notifications
You must be signed in to change notification settings - Fork 529
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
enhancement(billing): ensure typescript & esm syntax #2687
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -31,7 +31,6 @@ export const createPrTask = task({ | |||||||||||||||||||||||||||||||||||||||
if (existing?.githubPrUrl && onCacheHit === "stale") { | ||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||
entry: existing, | ||||||||||||||||||||||||||||||||||||||||
message: `Found existing PR for ${input}.mdx`, | ||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
@@ -76,6 +75,13 @@ export const createPrTask = task({ | |||||||||||||||||||||||||||||||||||||||
slug: slugger.slug(entry.inputTerm), | ||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||
sortKeys: (a, b) => { | ||||||||||||||||||||||||||||||||||||||||
// Ensure that 'question' always comes first | ||||||||||||||||||||||||||||||||||||||||
if (a === "question" || b === "question") { | ||||||||||||||||||||||||||||||||||||||||
return a === "question" ? -1 : 1; | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
return 0; | ||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||
lineWidth: -1, | ||||||||||||||||||||||||||||||||||||||||
noRefs: true, | ||||||||||||||||||||||||||||||||||||||||
quotingType: '"', | ||||||||||||||||||||||||||||||||||||||||
|
@@ -101,44 +107,97 @@ export const createPrTask = task({ | |||||||||||||||||||||||||||||||||||||||
auth: process.env.GITHUB_PERSONAL_ACCESS_TOKEN, | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
const owner = "p6l-richard"; | ||||||||||||||||||||||||||||||||||||||||
const owner = "unkeyed"; | ||||||||||||||||||||||||||||||||||||||||
const repo = "unkey"; | ||||||||||||||||||||||||||||||||||||||||
const branch = `richard/add-${input.replace(/\s+/g, "-").toLowerCase()}`; | ||||||||||||||||||||||||||||||||||||||||
const path = `apps/www/content/glossary/${input.replace(/\s+/g, "-").toLowerCase()}.mdx`; | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+110
to
113
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use consistent slug generation to prevent potential issues To ensure consistency and handle special characters safely, consider using the existing Apply this diff to use const owner = "unkeyed";
const repo = "unkey";
-const branch = `richard/add-${input.replace(/\s+/g, "-").toLowerCase()}`;
-const path = `apps/www/content/glossary/${input.replace(/\s+/g, "-").toLowerCase()}.mdx`;
+const slug = slugger.slug(input);
+const branch = `richard/add-${slug}`;
+const path = `apps/www/content/glossary/${slug}.mdx`;
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
// Create a new branch | ||||||||||||||||||||||||||||||||||||||||
const mainRef = await octokit.git.getRef({ | ||||||||||||||||||||||||||||||||||||||||
const existingPr = await octokit.rest.pulls.list({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
ref: "heads/main", | ||||||||||||||||||||||||||||||||||||||||
base: "main", | ||||||||||||||||||||||||||||||||||||||||
head: `${owner}:${branch}`, | ||||||||||||||||||||||||||||||||||||||||
state: "open", | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info(`2.1 'main' branch found. Should branch off of: ${mainRef.data.object.sha}`); | ||||||||||||||||||||||||||||||||||||||||
if (existingPr?.data?.length > 0) { | ||||||||||||||||||||||||||||||||||||||||
console.info("2.1 ⏩︎ Pending (open) PR found. Updating the content of the file directly..."); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info(`this is for debugging, check if the file actually exists or not in the github ui: ${existingPr.data[0].head.ref} | ||||||||||||||||||||||||||||||||||||||||
URL: https://github.com/unkeyed/unkey/pull/${existingPr.data[0].number}`); | ||||||||||||||||||||||||||||||||||||||||
// get the blob sha of the file being replaced: | ||||||||||||||||||||||||||||||||||||||||
const existingFile = await octokit.repos.getContent({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
ref: existingPr.data[0].head.ref, | ||||||||||||||||||||||||||||||||||||||||
path, | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+129
to
+134
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Handle missing files when retrieving content When using Apply this diff to add error handling: -let existingFile = await octokit.repos.getContent({
+let existingFile;
+try {
+ existingFile = await octokit.repos.getContent({
owner,
repo,
ref: existingPr.data[0].head.ref,
path,
-});
+ });
+} catch (error) {
+ if (error.status === 404) {
+ existingFile = null;
+ } else {
+ throw error;
+ }
+} Adjust the subsequent code to handle ...("sha" in existingFile.data && { sha: existingFile.data.sha }),
+...(existingFile && "sha" in existingFile.data && { sha: existingFile.data.sha }),
|
||||||||||||||||||||||||||||||||||||||||
// if an open PR exists, update the content of the file directly | ||||||||||||||||||||||||||||||||||||||||
await octokit.repos.createOrUpdateFileContents({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
path, | ||||||||||||||||||||||||||||||||||||||||
message: `feat(glossary): Update ${input}.mdx`, | ||||||||||||||||||||||||||||||||||||||||
content: Buffer.from(await file.arrayBuffer()).toString("base64"), | ||||||||||||||||||||||||||||||||||||||||
branch, | ||||||||||||||||||||||||||||||||||||||||
committer: { | ||||||||||||||||||||||||||||||||||||||||
name: "Richard Poelderl", | ||||||||||||||||||||||||||||||||||||||||
email: "richard.poelderl@gmail.com", | ||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||
...("sha" in existingFile.data && { sha: existingFile.data.sha }), | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info("2.2 💽 PR updated. Storing the URL..."); | ||||||||||||||||||||||||||||||||||||||||
// update the entry in the database with the PR URL | ||||||||||||||||||||||||||||||||||||||||
await db | ||||||||||||||||||||||||||||||||||||||||
.update(entries) | ||||||||||||||||||||||||||||||||||||||||
.set({ githubPrUrl: existingPr.data[0].html_url }) | ||||||||||||||||||||||||||||||||||||||||
.where(eq(entries.inputTerm, input)); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
const updated = await db.query.entries.findFirst({ | ||||||||||||||||||||||||||||||||||||||||
columns: { | ||||||||||||||||||||||||||||||||||||||||
id: true, | ||||||||||||||||||||||||||||||||||||||||
inputTerm: true, | ||||||||||||||||||||||||||||||||||||||||
githubPrUrl: true, | ||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||
where: eq(entries.inputTerm, input), | ||||||||||||||||||||||||||||||||||||||||
orderBy: (entries, { desc }) => [desc(entries.createdAt)], | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info("2.3 🎉 PR updated. Returning the entry..."); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||
entry: updated, | ||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
// if there's no open PR, we have to handle the merged PR case: | ||||||||||||||||||||||||||||||||||||||||
const existingMergedPr = await octokit.rest.pulls.list({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
base: "main", | ||||||||||||||||||||||||||||||||||||||||
head: `${owner}:${branch}`, | ||||||||||||||||||||||||||||||||||||||||
state: "closed", | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info("2.2 Handling possible duplicate branches"); | ||||||||||||||||||||||||||||||||||||||||
const branchExists = await octokit.git | ||||||||||||||||||||||||||||||||||||||||
.listMatchingRefs({ | ||||||||||||||||||||||||||||||||||||||||
if (existingMergedPr?.data?.length > 0) { | ||||||||||||||||||||||||||||||||||||||||
console.info("2.1 ⚠️ Merged PR found. Deleting the stale branch..."); | ||||||||||||||||||||||||||||||||||||||||
// if a merged PR exists, we can delete the branch to create a new one & commit the file | ||||||||||||||||||||||||||||||||||||||||
await octokit.git.deleteRef({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
ref: `heads/${branch}`, | ||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||
.then((response) => response.data.length > 0); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if (branchExists) { | ||||||||||||||||||||||||||||||||||||||||
console.info("2.2.1 ⚠️ Duplicate branch found, deleting it"); | ||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||
await octokit.git.deleteRef({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
ref: `heads/${branch}`, | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
console.info("2.2.2 ⌫ Branch deleted"); | ||||||||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||||||||
console.error(`2.2.3 ❌ Error deleting branch: ${error}`); | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info("2.4 🛣️ Creating the new branch"); | ||||||||||||||||||||||||||||||||||||||||
console.info("2.2 🛣️ Creating the new branch"); | ||||||||||||||||||||||||||||||||||||||||
// create a new branch off of main | ||||||||||||||||||||||||||||||||||||||||
const mainRef = await octokit.git.getRef({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
ref: "heads/main", | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
// create a new branch off of main | ||||||||||||||||||||||||||||||||||||||||
await octokit.git.createRef({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
|
@@ -147,17 +206,24 @@ export const createPrTask = task({ | |||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
// Commit the MDX file to the new branch | ||||||||||||||||||||||||||||||||||||||||
console.info(`2.5 📦 Committing the MDX file to the new branch "${branch}"`); | ||||||||||||||||||||||||||||||||||||||||
console.info(`2.3 📦 Committing the MDX file to the new branch "${branch}"`); | ||||||||||||||||||||||||||||||||||||||||
// get the existing file's sha (if exists): | ||||||||||||||||||||||||||||||||||||||||
const existingFile = await octokit.repos.getContent({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
path, | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+211
to
+215
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for Similar to the previous instance, when committing to the new branch, the file might not exist, leading to an error. Please wrap the Apply this diff to handle the potential error: -let existingFile = await octokit.repos.getContent({
+let existingFile;
+try {
+ existingFile = await octokit.repos.getContent({
owner,
repo,
path,
-});
+ });
+} catch (error) {
+ if (error.status === 404) {
+ existingFile = null;
+ } else {
+ throw error;
+ }
+} And adjust the subsequent code accordingly: ...("sha" in existingFile.data && { sha: existingFile.data.sha }),
+...(existingFile && "sha" in existingFile.data && { sha: existingFile.data.sha }), 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
await octokit.repos.createOrUpdateFileContents({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
repo, | ||||||||||||||||||||||||||||||||||||||||
path, | ||||||||||||||||||||||||||||||||||||||||
message: `feat(glossary): Add ${input}.mdx to glossary`, | ||||||||||||||||||||||||||||||||||||||||
content: Buffer.from(await file.arrayBuffer()).toString("base64"), | ||||||||||||||||||||||||||||||||||||||||
branch, | ||||||||||||||||||||||||||||||||||||||||
...("sha" in existingFile.data && { sha: existingFile.data.sha }), | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info("2.6 📝 Creating the pull request"); | ||||||||||||||||||||||||||||||||||||||||
console.info("2.4 📝 Creating the pull request"); | ||||||||||||||||||||||||||||||||||||||||
// Create a pull request | ||||||||||||||||||||||||||||||||||||||||
const pr = await octokit.pulls.create({ | ||||||||||||||||||||||||||||||||||||||||
owner, | ||||||||||||||||||||||||||||||||||||||||
|
@@ -168,7 +234,7 @@ export const createPrTask = task({ | |||||||||||||||||||||||||||||||||||||||
body: `This PR adds the ${input}.mdx file to the API documentation.`, | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info("2.7 💽 PR created. Storing the URL..."); | ||||||||||||||||||||||||||||||||||||||||
console.info("2.5 💽 PR created. Storing the URL..."); | ||||||||||||||||||||||||||||||||||||||||
// Update the entry in the database with the PR URL | ||||||||||||||||||||||||||||||||||||||||
await db | ||||||||||||||||||||||||||||||||||||||||
.update(entries) | ||||||||||||||||||||||||||||||||||||||||
|
@@ -185,9 +251,10 @@ export const createPrTask = task({ | |||||||||||||||||||||||||||||||||||||||
orderBy: (entries, { asc }) => [asc(entries.createdAt)], | ||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
console.info("2.6 🎉 PR created. Returning the entry..."); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||
entry: updated, | ||||||||||||||||||||||||||||||||||||||||
message: `feat(glossary): Add ${input}.mdx to glossary`, | ||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Ensure 'sortKeys' function is effective
The
sortKeys
function aims to position the'question'
key first in the YAML output. However, the provided data does not have a top-level'question'
key, so this sorting logic may not have the intended effect. Please verify the data structure and adjust the sorting function accordingly.