Skip to content

Commit 2871238

Browse files
authored
chore: full sha support (#287)
1 parent caa576b commit 2871238

File tree

5 files changed

+4406
-3505
lines changed

5 files changed

+4406
-3505
lines changed

packages/backend/server/routes/[owner]/[repo]/[packageAndRefOrSha].get.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,46 @@ type Params = Omit<WorkflowData, "sha" | "ref"> & {
77

88
export default eventHandler(async (event) => {
99
const params = getRouterParams(event) as Params;
10-
let [encodedPackageName, refOrSha] = params.packageAndRefOrSha.split("@");
10+
let [encodedPackageName, longerRefOrSha] = params.packageAndRefOrSha.split("@");
1111
const packageName = decodeURIComponent(encodedPackageName);
12-
refOrSha = refOrSha.split('.tgz')[0] // yarn support
12+
longerRefOrSha = longerRefOrSha.split('.tgz')[0] // yarn support
13+
const isSha = isValidGitHash(longerRefOrSha);
14+
const refOrSha = isSha ? abbreviateCommitHash(longerRefOrSha) : longerRefOrSha;
1315

14-
if (isValidGitHash(refOrSha)) {
15-
refOrSha = abbreviateCommitHash(refOrSha);
16-
}
16+
let base = `${params.owner}:${params.repo}:${refOrSha}`;
17+
let packageKey = `${base}:${packageName}`;
1718

18-
const base = `${params.owner}:${params.repo}:${refOrSha}`
19-
const packageKey = `${base}:${packageName}`;
2019
const cursorKey = base;
2120

2221
const packagesBucket = usePackagesBucket(event);
2322
const downloadedAtBucket = useDownloadedAtBucket(event);
2423
const cursorBucket = useCursorsBucket(event);
2524

25+
if (await cursorBucket.hasItem(cursorKey)) {
26+
const currentCursor = (await cursorBucket.getItem(cursorKey))!;
27+
28+
sendRedirect(
29+
event,
30+
`/${params.owner}/${params.repo}/${packageName}@${currentCursor.sha}`,
31+
);
32+
return;
33+
}
34+
35+
// longer sha support with precision
36+
const binding = useBinding(event);
37+
const { objects } = await binding.list({ prefix: `${usePackagesBucket.base}:${base}` })
38+
for (const { key } of objects) {
39+
// bucket:package:stackblitz-labs:pkg.pr.new:ded05e838c418096e5dd77a29101c8af9e73daea:playground-b
40+
const trimmedKey = key.slice(usePackagesBucket.base.length + 1);
41+
const [keySha, keyPackageName] = trimmedKey.split(":").slice(2);
42+
if (keyPackageName !== packageName) continue;
43+
44+
if (keySha.startsWith(longerRefOrSha)) {
45+
packageKey = trimmedKey;
46+
break;
47+
}
48+
}
49+
2650
if (await packagesBucket.hasItem(packageKey)) {
2751
const stream = await getItemStream(
2852
event,
@@ -41,14 +65,6 @@ export default eventHandler(async (event) => {
4165
setResponseHeader(event, "content-type", "application/tar+gzip");
4266
// TODO: add HTTP caching
4367
return stream;
44-
} else if (await cursorBucket.hasItem(cursorKey)) {
45-
const currentCursor = (await cursorBucket.getItem(cursorKey))!;
46-
47-
sendRedirect(
48-
event,
49-
`/${params.owner}/${params.repo}/${packageName}@${currentCursor.sha}`,
50-
);
51-
return;
5268
}
5369

5470
throw createError({

packages/backend/server/routes/multipart/create.post.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { joinKeys } from "unstorage";
2-
import { abbreviateCommitHash, isWhitelisted } from "@pkg-pr-new/utils";
2+
import { isWhitelisted } from "@pkg-pr-new/utils";
33

44
export default eventHandler(async (event) => {
55
const { "sb-key": workflowKey, "sb-name": packageName } = getHeaders(event);
@@ -37,8 +37,7 @@ export default eventHandler(async (event) => {
3737

3838
const binding = useBinding(event);
3939

40-
const abbreviatedSha = abbreviateCommitHash(workflowData.sha);
41-
const base = `${workflowData.owner}:${workflowData.repo}:${abbreviatedSha}`
40+
const base = `${workflowData.owner}:${workflowData.repo}:${workflowData.sha}`
4241
const packageKey = `${base}:${packageName}`;
4342

4443
const key = joinKeys(usePackagesBucket.base, packageKey);

packages/backend/server/routes/publish.post.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {
22
Comment,
3-
abbreviateCommitHash,
43
isPullRequest,
54
isWhitelisted,
65
} from "@pkg-pr-new/utils";
@@ -89,7 +88,6 @@ export default eventHandler(async (event) => {
8988
});
9089
}
9190

92-
const abbreviatedSha = abbreviateCommitHash(workflowData.sha);
9391
const baseKey = `${workflowData.owner}:${workflowData.repo}`;
9492

9593
const cursorKey = `${baseKey}:${workflowData.ref}`;
@@ -99,7 +97,7 @@ export default eventHandler(async (event) => {
9997
await Promise.all(
10098
packages.map(async (packageNameWithPrefix) => {
10199
const packageName = packageNameWithPrefix.slice("package:".length);
102-
const packageKey = `${baseKey}:${abbreviatedSha}:${packageName}`;
100+
const packageKey = `${baseKey}:${workflowData.sha}:${packageName}`;
103101

104102
const file = formData.get(packageNameWithPrefix)!;
105103
if (file instanceof File) {
@@ -158,7 +156,7 @@ export default eventHandler(async (event) => {
158156

159157
if (!currentCursor || currentCursor.timestamp < runId) {
160158
await cursorBucket.setItem(cursorKey, {
161-
sha: abbreviatedSha,
159+
sha: workflowData.sha,
162160
timestamp: runId,
163161
});
164162
}

packages/cli/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ const main = defineCommand({
155155
}
156156

157157
const { sha } = await checkResponse.json();
158-
const abbreviatedSha = abbreviateCommitHash(sha);
159158

160159
const deps: Map<string, string> = new Map(); // pkg.pr.new versions of the package
161160
const realDeps: Map<string, string> | null = isPeerDepsEnabled
@@ -189,7 +188,7 @@ const main = defineCommand({
189188
}
190189

191190
const depUrl = new URL(
192-
`/${owner}/${repo}/${pJson.name}@${abbreviatedSha}`,
191+
`/${owner}/${repo}/${pJson.name}@${sha}`,
193192
apiUrl,
194193
).href;
195194
deps.set(pJson.name, depUrl);
@@ -198,7 +197,7 @@ const main = defineCommand({
198197
const resource = await fetch(depUrl);
199198
if (resource.ok) {
200199
console.warn(
201-
`${pJson.name}@${abbreviatedSha} was already published on ${depUrl}`,
200+
`${pJson.name}@${abbreviateCommitHash(sha)} was already published on ${depUrl}`,
202201
);
203202
}
204203

0 commit comments

Comments
 (0)