summaryrefslogtreecommitdiff
path: root/tools/release/helpers/cargo.ts
diff options
context:
space:
mode:
Diffstat (limited to 'tools/release/helpers/cargo.ts')
-rw-r--r--tools/release/helpers/cargo.ts48
1 files changed, 48 insertions, 0 deletions
diff --git a/tools/release/helpers/cargo.ts b/tools/release/helpers/cargo.ts
new file mode 100644
index 000000000..619d7a0f7
--- /dev/null
+++ b/tools/release/helpers/cargo.ts
@@ -0,0 +1,48 @@
+// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+
+import { runCommand } from "./helpers.ts";
+
+export interface CargoMetadata {
+ packages: CargoPackageMetadata[];
+ /** Identifiers in the `packages` array of the workspace members. */
+ "workspace_members": string[];
+ /** The absolute workspace root directory path. */
+ "workspace_root": string;
+}
+
+export interface CargoPackageMetadata {
+ id: string;
+ name: string;
+ version: string;
+ dependencies: CargoDependencyMetadata[];
+ /** Path to Cargo.toml */
+ "manifest_path": string;
+}
+
+export interface CargoDependencyMetadata {
+ name: string;
+ /** Version requrement (ex. ^0.1.0) */
+ req: string;
+}
+
+export async function getMetadata(directory: string) {
+ const result = await runCommand({
+ cwd: directory,
+ cmd: ["cargo", "metadata", "--format-version", "1"],
+ });
+ return JSON.parse(result!) as CargoMetadata;
+}
+
+export async function publishCrate(directory: string) {
+ const p = Deno.run({
+ cwd: directory,
+ cmd: ["cargo", "publish"],
+ stderr: "inherit",
+ stdout: "inherit",
+ });
+
+ const status = await p.status();
+ if (!status.success) {
+ throw new Error("Failed");
+ }
+}