deno.land / x / deno@v1.28.2 / tools / release / 04_post_publish.ts

04_post_publish.ts
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env -S deno run -A --lock=tools/deno.lock.json// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.import { DenoWorkspace } from "./deno_workspace.ts";import { $, createOctoKit, getGitHubRepository } from "./deps.ts";
const workspace = await DenoWorkspace.load();const repo = workspace.repo;const cliCrate = workspace.getCliCrate();
$.logStep("Creating release tag...");await createReleaseTag();
$.logStep("Forwarding release commit to main...");try { await forwardReleaseCommitToMain();} catch (err) { $.logError("Failed. Please manually open a PR.", err);}
async function createReleaseTag() { await repo.gitFetchTags("origin"); const tags = await repo.getGitTags(); const tagName = `v${cliCrate.version}`;
if (tags.has(tagName)) { $.log(`Tag ${tagName} already exists.`); } else { await repo.gitTag(tagName); await repo.gitPush("origin", tagName); }}
async function forwardReleaseCommitToMain() { // if this is a patch release, open a PR to forward the most recent commit back to main const currentBranch = await repo.gitCurrentBranch(); const isPatchRelease = currentBranch !== "main";
if (!isPatchRelease) { $.log("Not doing a patch release. Skipping."); return; }
await repo.command("git fetch origin main"); const releaseCommitHash = await repo.command("git rev-parse HEAD").text(); const newBranchName = `forward_v${cliCrate.version}`; $.logStep(`Creating branch ${newBranchName}...`); await repo.command([ "git", "checkout", "-b", newBranchName, "origin/main", ]); await repo.command([ "git", "cherry-pick", "--strategy-option", "theirs", releaseCommitHash, ]); await repo.gitPush("origin", newBranchName);
$.logStep(`Opening PR...`); const openedPr = await createOctoKit().request( "POST /repos/{owner}/{repo}/pulls", { ...getGitHubRepository(), base: "main", head: newBranchName, draft: true, title: `chore: forward v${cliCrate.version} release commit to main`, body: getPrBody(), }, ); $.log(`Opened PR at ${openedPr.data.url}`);
function getPrBody() { let text = `This is the release commit being forwarded back to main for ${cliCrate.version}\n\n` + `Please ensure:\n` + `- [ ] Everything looks ok in the PR\n` + `- [ ] The release has been published\n\n` + `To make edits to this PR:\n` + "```shell\n" + `git fetch upstream ${newBranchName} && git checkout -b ${newBranchName} upstream/${newBranchName}\n` + "```\n\n" + "Don't need this PR? Close it.\n";
const actor = Deno.env.get("GH_WORKFLOW_ACTOR"); if (actor != null) { text += `\ncc @${actor}`; }
return text; }}
deno

Version Info

Tagged at
a year ago