summaryrefslogtreecommitdiff
path: root/tools/release/03_publish_crates.ts
diff options
context:
space:
mode:
Diffstat (limited to 'tools/release/03_publish_crates.ts')
-rwxr-xr-xtools/release/03_publish_crates.ts48
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;
+}