diff options
Diffstat (limited to 'tools/release/03_publish_crates.ts')
-rwxr-xr-x | tools/release/03_publish_crates.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tools/release/03_publish_crates.ts b/tools/release/03_publish_crates.ts new file mode 100755 index 000000000..4c9cb23d3 --- /dev/null +++ b/tools/release/03_publish_crates.ts @@ -0,0 +1,48 @@ +#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run=cargo --allow-net=crates.io --no-check +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +import { DenoWorkspace } from "./deno_workspace.ts"; +import { Crate, getCratesPublishOrder } from "./deps.ts"; + +const isReal = parseIsReal(); +console.log(`Running a ${isReal ? "real" : "dry"} cargo publish...`); + +const workspace = await DenoWorkspace.load(); +const cliCrate = workspace.getCliCrate(); + +const dependencyCrates = getCratesPublishOrder( + workspace.getCliDependencyCrates(), +); + +try { + for (const [i, crate] of dependencyCrates.entries()) { + await publishCrate(crate); + console.log(`Finished ${i + 1} of ${dependencyCrates.length} crates.`); + } + + await publishCrate(cliCrate); +} finally { + // system beep to notify error or completion + console.log("\x07"); +} + +async function publishCrate(crate: Crate) { + if (isReal) { + await crate.publish(); + } else { + await crate.publishDryRun(); + } +} + +function parseIsReal() { + const isReal = Deno.args.some((a) => a === "--real"); + const isDry = Deno.args.some((a) => a === "--dry"); + + // force the call to be explicit and provide one of these + // so that it's obvious what's happening + if (!isDry && !isReal) { + console.error("Please run with `--dry` or `--real`."); + Deno.exit(1); + } + + return isReal; +} |