Skip to content

Commit 6a743e9

Browse files
committed
Merge remote-tracking branch 'origin/master' into tx_opt
2 parents 10fd213 + 12f6f81 commit 6a743e9

File tree

1,069 files changed

+79764
-49986
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,069 files changed

+79764
-49986
lines changed
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
const DOCS_SITE_REPO = {
2+
org: "edgedb",
3+
repo: "edgedb.com",
4+
ref: "master",
5+
};
6+
7+
module.exports = async ({ github, context }) => {
8+
const { VERCEL_TOKEN, VERCEL_TEAM_ID } = process.env;
9+
10+
if (!VERCEL_TOKEN || !VERCEL_TEAM_ID) {
11+
throw new Error(
12+
`cannot run docs preview deploy workflow, ` +
13+
`VERCEL_TOKEN or VERCEL_TEAM_ID secrets are missing`
14+
);
15+
}
16+
17+
const prBranch = context.payload.pull_request.head.ref;
18+
const commitSHA = context.payload.pull_request.head.sha;
19+
const shortCommitSHA = commitSHA.slice(0, 8);
20+
21+
const existingComments = (
22+
await github.rest.issues.listComments({
23+
owner: context.repo.owner,
24+
repo: context.repo.repo,
25+
issue_number: context.issue.number,
26+
})
27+
).data;
28+
29+
const commentHeader = `### Docs preview deploy\n`;
30+
let commentMessage = commentHeader;
31+
32+
let updateComment = existingComments.find(
33+
(c) =>
34+
c.performed_via_github_app?.slug === "github-actions" &&
35+
c.body?.startsWith(commentHeader)
36+
);
37+
38+
let deploymentError = null;
39+
let deployment;
40+
try {
41+
deployment = await vercelFetch("https://api.vercel.com/v13/deployments", {
42+
name: "edgedb-docs",
43+
gitSource: {
44+
type: "github",
45+
...DOCS_SITE_REPO,
46+
},
47+
projectSettings: {
48+
buildCommand: `EDGEDB_REPO_BRANCH=${prBranch} EDGEDB_REPO_SHA=${commitSHA} yarn vercel-build`,
49+
},
50+
});
51+
52+
commentMessage += `\n🔄 Deploying docs preview for commit ${shortCommitSHA}:\n\n<https://${deployment.url}>`;
53+
} catch (e) {
54+
deploymentError = e;
55+
commentMessage += `\n❌ Failed to deploy docs preview for commit ${shortCommitSHA}:\n\n\`\`\`\n${e.message}\n\`\`\``;
56+
}
57+
58+
commentMessage += `\n\n(Last updated: ${formatDatetime(new Date())})`;
59+
60+
if (updateComment) {
61+
await github.rest.issues.updateComment({
62+
owner: context.repo.owner,
63+
repo: context.repo.repo,
64+
comment_id: updateComment.id,
65+
body: commentMessage,
66+
});
67+
} else {
68+
updateComment = (
69+
await github.rest.issues.createComment({
70+
owner: context.repo.owner,
71+
repo: context.repo.repo,
72+
issue_number: context.issue.number,
73+
body: commentMessage,
74+
})
75+
).data;
76+
}
77+
78+
if (deploymentError) {
79+
throw new Error(`Docs preview deployment failed: ${e.message}`);
80+
}
81+
82+
let i = 0;
83+
while (i < 40) {
84+
await sleep(15_000);
85+
i++;
86+
87+
const status = (
88+
await vercelFetch(
89+
`https://api.vercel.com/v13/deployments/${deployment.id}`
90+
)
91+
).status;
92+
93+
const latestComment = await github.rest.issues.getComment({
94+
owner: context.repo.owner,
95+
repo: context.repo.repo,
96+
comment_id: updateComment.id,
97+
});
98+
99+
if (!latestComment.data.body.includes(shortCommitSHA)) {
100+
console.log("Skipping further updates, new deployment has started");
101+
return;
102+
}
103+
104+
if (status === "READY" || status === "ERROR" || status === "CANCELED") {
105+
await github.rest.issues.updateComment({
106+
owner: context.repo.owner,
107+
repo: context.repo.repo,
108+
comment_id: updateComment.id,
109+
body: `${commentHeader}${
110+
status === "READY"
111+
? `\n✅ Successfully deployed docs preview for commit ${shortCommitSHA}:`
112+
: `\n❌ Docs preview deployment ${
113+
status === "CANCELED" ? "was canceled" : "failed"
114+
} for commit ${shortCommitSHA}:`
115+
}\n\n<https://${deployment.url}>\n\n(Last updated: ${formatDatetime(
116+
new Date()
117+
)})`,
118+
});
119+
if (status !== "READY") {
120+
throw new Error(
121+
`Docs preview deployment failed with status ${status}: https://${deployment.url}`
122+
);
123+
}
124+
return;
125+
}
126+
}
127+
128+
await github.rest.issues.updateComment({
129+
owner: context.repo.owner,
130+
repo: context.repo.repo,
131+
comment_id: updateComment.id,
132+
body: `${commentHeader}
133+
❌ Timed out waiting for deployment status to succeed or fail for commit ${shortCommitSHA}:\n\n<https://${
134+
deployment.url
135+
}>\n\n(Last updated: ${formatDatetime(new Date())})`,
136+
});
137+
throw new Error("Timed out waiting for deployment status to succeed or fail");
138+
};
139+
140+
async function vercelFetch(url, body) {
141+
const { VERCEL_TOKEN, VERCEL_TEAM_ID } = process.env;
142+
const _url = new URL(url);
143+
url = `${_url.origin}${_url.pathname}?${new URLSearchParams({
144+
teamId: VERCEL_TEAM_ID,
145+
})}`;
146+
147+
let res;
148+
try {
149+
res = await fetch(url, {
150+
body: body ? JSON.stringify(body) : undefined,
151+
headers: {
152+
Authorization: `Bearer ${VERCEL_TOKEN}`,
153+
"Content-Type": body ? "application/json" : undefined,
154+
},
155+
method: body ? "post" : "get",
156+
});
157+
} catch (e) {
158+
throw new Error(`vercel api request failed: ${e}`);
159+
}
160+
161+
if (res.ok) {
162+
return await res.json();
163+
} else {
164+
let body;
165+
try {
166+
body = await res.text();
167+
} catch (e) {
168+
// ignore
169+
}
170+
throw new Error(
171+
`vercel api request failed: ${res.status} ${res.statusText}, ${body}`
172+
);
173+
}
174+
}
175+
176+
function formatDatetime(date) {
177+
return date.toLocaleString("en-US", {
178+
year: "numeric",
179+
month: "short",
180+
day: "numeric",
181+
hour: "numeric",
182+
minute: "numeric",
183+
second: "numeric",
184+
hourCycle: "h24",
185+
timeZoneName: "short",
186+
});
187+
}
188+
189+
function sleep(milliseconds) {
190+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
191+
}

.github/scripts/patches/compute-versions.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,23 @@
2020
versions = []
2121
for obj in data['packages'] + data_testing['packages']:
2222
if (
23-
obj['version_details']['major'] == version
23+
obj['basename'] in {'gel-server', 'edgedb-server'}
24+
and obj['version_details']['major'] == version
2425
and (
2526
not obj['version_details']['prerelease']
2627
or obj['version_details']['prerelease'][0]['phase'] in ('beta', 'rc')
2728
)
2829
):
29-
versions.append((obj['version'], base + obj['installrefs'][0]['ref']))
30+
versions.append((
31+
obj['version'],
32+
obj['basename'],
33+
base + obj['installrefs'][0]['ref'],
34+
))
3035

3136
matrix = {
3237
"include": [
33-
{"edgedb-version": v, "edgedb-url": url, "make-dbs": mk}
34-
for v, url in versions
38+
{"edgedb-version": v, "edgedb-url": url, "edgedb-basename": base, "make-dbs": mk}
39+
for v, base, url in versions
3540
for mk in [True, False]
3641
]
3742
}

.github/scripts/patches/create-databases.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
# Create databases on the older edgedb version
22

33
import edgedb
4-
import os
54
import subprocess
5+
import sys
66

7-
version = os.getenv('EDGEDB_VERSION')
87
cmd = [
9-
f'edgedb-server-{version}/bin/edgedb-server', '-D' 'test-dir',
8+
sys.argv[1], '-D' 'test-dir',
109
'--testmode', '--security', 'insecure_dev_mode', '--port', '10000',
1110
]
1211
proc = subprocess.Popen(cmd)

0 commit comments

Comments
 (0)