diff options
Diffstat (limited to 'tools/release')
-rw-r--r-- | tools/release/01_bump_crate_versions.ts | 103 | ||||
-rwxr-xr-x | tools/release/01_bump_dependency_crate_versions.ts | 12 | ||||
-rw-r--r--[-rwxr-xr-x] | tools/release/02_publish_crates.ts (renamed from tools/release/02_publish_dependency_crates.ts) | 3 | ||||
-rwxr-xr-x | tools/release/03_bump_cli_version.ts | 56 | ||||
-rw-r--r-- | tools/release/deps.ts | 2 |
5 files changed, 107 insertions, 69 deletions
diff --git a/tools/release/01_bump_crate_versions.ts b/tools/release/01_bump_crate_versions.ts new file mode 100644 index 000000000..a29bdd554 --- /dev/null +++ b/tools/release/01_bump_crate_versions.ts @@ -0,0 +1,103 @@ +#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run=cargo +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +import { DenoWorkspace } from "./deno_workspace.ts"; +import { GitLogOutput, path, semver } from "./deps.ts"; + +const workspace = await DenoWorkspace.load(); +const repo = workspace.repo; +const cliCrate = workspace.getCliCrate(); +const originalCliVersion = cliCrate.version; + +// increment the cli version +await cliCrate.promptAndIncrement(); + +// increment the dependency crate versions +for (const crate of workspace.getDependencyCrates()) { + await crate.increment("minor"); +} + +// update the lock file +await workspace.getCliCrate().cargoCheck(); + +// try to update the Releases.md markdown text +try { + await updateReleasesMd(); +} catch (err) { + console.error(err); + console.error( + "Updating Releases.md failed. Please manually run " + + "`git log --oneline VERSION_FROM..VERSION_TO` and " + + "use the output to update Releases.md", + ); +} + +async function updateReleasesMd() { + const filePath = path.join(DenoWorkspace.rootDirPath, "Releases.md"); + const oldFileText = await Deno.readTextFile(filePath); + const insertText = await getReleasesMdText(); + + await Deno.writeTextFile( + filePath, + oldFileText.replace(/^### /m, insertText + "\n\n### "), + ); + + await workspace.runFormatter(); + console.log( + "Updated Release.md -- Please review the output to ensure it's correct.", + ); +} + +async function getReleasesMdText() { + const gitLog = await getGitLog(); + const formattedGitLog = gitLog.formatForReleaseMarkdown(); + const formattedDate = getFormattedDate(new Date()); + + return `### ${cliCrate.version} / ${formattedDate}\n\n` + + `${formattedGitLog}`; + + function getFormattedDate(date: Date) { + const formattedMonth = padTwoDigit(date.getMonth() + 1); + const formattedDay = padTwoDigit(date.getDate()); + return `${date.getFullYear()}.${formattedMonth}.${formattedDay}`; + + function padTwoDigit(val: number) { + return val.toString().padStart(2, "0"); + } + } +} + +async function getGitLog() { + const lastVersion = semver.parse(originalCliVersion)!; + const lastVersionTag = `v${originalCliVersion}`; + // fetch the upstream tags + await repo.gitFetchTags("upstream"); + + // this means we're on the patch release + const latestTag = await repo.gitLatestTag(); + if (latestTag === lastVersionTag) { + return await repo.getGitLogFromTags( + "upstream", + lastVersionTag, + undefined, + ); + } else { + // otherwise, get the history of the last release + await repo.gitFetchHistory("upstream"); + const lastMinorHistory = await repo.getGitLogFromTags( + "upstream", + `v${lastVersion.major}.${lastVersion.minor}.0`, + lastVersionTag, + ); + const currentHistory = await repo.getGitLogFromTags( + "upstream", + latestTag, + undefined, + ); + const lastMinorMessages = new Set( + lastMinorHistory.lines.map((r) => r.message), + ); + return new GitLogOutput( + currentHistory.lines.filter((l) => !lastMinorMessages.has(l.message)), + ); + } +} diff --git a/tools/release/01_bump_dependency_crate_versions.ts b/tools/release/01_bump_dependency_crate_versions.ts deleted file mode 100755 index 931b7d199..000000000 --- a/tools/release/01_bump_dependency_crate_versions.ts +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run=cargo -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -import { DenoWorkspace } from "./deno_workspace.ts"; - -const workspace = await DenoWorkspace.load(); - -for (const crate of workspace.getDependencyCrates()) { - await crate.increment("minor"); -} - -// update the lock file -await workspace.getCliCrate().cargoCheck(); diff --git a/tools/release/02_publish_dependency_crates.ts b/tools/release/02_publish_crates.ts index d210971a1..1bb02f460 100755..100644 --- a/tools/release/02_publish_dependency_crates.ts +++ b/tools/release/02_publish_crates.ts @@ -4,6 +4,7 @@ import { DenoWorkspace } from "./deno_workspace.ts"; import { getCratesPublishOrder } from "./deps.ts"; const workspace = await DenoWorkspace.load(); +const cliCrate = workspace.getCliCrate(); const dependencyCrates = getCratesPublishOrder(workspace.getDependencyCrates()); @@ -12,6 +13,8 @@ try { await crate.publish(); console.log(`Published ${i + 1} of ${dependencyCrates.length} crates.`); } + + await cliCrate.publish(); } finally { // system beep to notify error or completion console.log("\x07"); diff --git a/tools/release/03_bump_cli_version.ts b/tools/release/03_bump_cli_version.ts deleted file mode 100755 index 553133405..000000000 --- a/tools/release/03_bump_cli_version.ts +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run=cargo,git -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -import { DenoWorkspace } from "./deno_workspace.ts"; -import { path } from "./deps.ts"; - -const workspace = await DenoWorkspace.load(); -const repo = workspace.repo; - -const cliCrate = workspace.getCliCrate(); -const originalVersion = cliCrate.version; - -// increment the version -await cliCrate.promptAndIncrement(); -// update the lock file -await cliCrate.cargoCheck(); - -// update the Releases.md markdown text -await updateReleasesMd(); -await workspace.runFormatter(); -console.log( - "Updated Release.md -- Please review the output to ensure it's correct.", -); - -async function updateReleasesMd() { - const filePath = path.join(DenoWorkspace.rootDirPath, "Releases.md"); - const oldFileText = await Deno.readTextFile(filePath); - const insertText = await getReleasesMdText(); - - await Deno.writeTextFile( - filePath, - oldFileText.replace(/^### /m, insertText + "\n\n### "), - ); -} - -async function getReleasesMdText() { - const gitLog = await repo.getGitLogFromTags( - "upstream", - `v${originalVersion}`, - undefined, - ); - const formattedGitLog = gitLog.formatForReleaseMarkdown(); - const formattedDate = getFormattedDate(new Date()); - - return `### ${cliCrate.version} / ${formattedDate}\n\n` + - `${formattedGitLog}`; - - function getFormattedDate(date: Date) { - const formattedMonth = padTwoDigit(date.getMonth() + 1); - const formattedDay = padTwoDigit(date.getDate()); - return `${date.getFullYear()}.${formattedMonth}.${formattedDay}`; - - function padTwoDigit(val: number) { - return val.toString().padStart(2, "0"); - } - } -} diff --git a/tools/release/deps.ts b/tools/release/deps.ts index 4a1ec8725..5e249c1cf 100644 --- a/tools/release/deps.ts +++ b/tools/release/deps.ts @@ -1,3 +1,3 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -export * from "https://raw.githubusercontent.com/denoland/automation/0.3.0/mod.ts"; +export * from "https://raw.githubusercontent.com/denoland/automation/0.4.0/mod.ts"; |