1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-07 22:58:24 -05:00

chore(ci): automatically open PR to forward patch release back to main (#14180)

This commit is contained in:
David Sherret 2022-04-04 14:56:29 -04:00 committed by David Sherret
parent 224893ee2b
commit 64a9384efa
4 changed files with 103 additions and 22 deletions

View file

@ -36,7 +36,11 @@ jobs:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: ./tools/release/03_publish_crates.ts --real run: ./tools/release/03_publish_crates.ts --real
- name: Create release tag - name: Create release tag and check forward commit to main
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./tools/release/04_create_release_tag.ts GH_WORKFLOW_ACTOR: ${{ github.actor }}
run: |
git config user.email "${{ github.actor }}@users.noreply.github.com"
git config user.name "${{ github.actor }}"
./tools/release/04_post_publish.ts

View file

@ -112,8 +112,9 @@ verify on GitHub that everything looks correct.
been updated to reflect Web API changes in this release. Usually done ahead been updated to reflect Web API changes in this release. Usually done ahead
of time by @lucacasonato. of time by @lucacasonato.
9. **If you are cutting a patch release**: open a PR that forwards all commits 9. **If you are cutting a patch release**: a PR should have been automatically
created in the release process to the `main` branch. opened that forwards the release commit back to main. If so, merge it. If not
and it failed, please manually create one.
## Updating `doc.deno.land` ## Updating `doc.deno.land`

View file

@ -1,18 +0,0 @@
#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run=cargo,git --no-check
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { DenoWorkspace } from "./deno_workspace.ts";
const workspace = await DenoWorkspace.load();
const repo = workspace.repo;
const cliCrate = workspace.getCliCrate();
await repo.gitFetchTags("origin");
const tags = await repo.getGitTags();
const tagName = `v${cliCrate.version}`;
if (tags.has(tagName)) {
console.log(`Tag ${tagName} already exists.`);
} else {
await repo.gitTag(tagName);
await repo.gitPush(tagName);
}

View file

@ -0,0 +1,94 @@
#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run=cargo,git --allow-net --no-check
// 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();
console.log("Creating release tag...");
await createReleaseTag();
console.log("Forwarding release commit to main...");
try {
await forwardReleaseCommitToMain();
} catch (err) {
console.error("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)) {
console.log(`Tag ${tagName} already exists.`);
} else {
await repo.gitTag(tagName);
await repo.gitPush(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) {
console.log("Not doing a patch release. Skipping.");
return;
}
const releaseCommitHash =
(await repo.runCommand(["git", "rev-parse", "HEAD"])).trim();
const newBranchName = `forward_v${cliCrate.version}`;
console.log(`Creating branch ${newBranchName}...`);
await repo.runCommand([
"git",
"checkout",
"-b",
newBranchName,
"main",
]);
await repo.runCommand([
"git",
"cherry-pick",
releaseCommitHash,
]);
await repo.gitPush("origin", newBranchName);
console.log(`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(),
},
);
console.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;
}
}