1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// 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 function publishCrate(directory: string) {
return runCargoSubCommand({
directory,
args: ["publish"],
});
}
export function build(directory: string) {
return runCargoSubCommand({
directory,
args: ["build", "-vv"],
});
}
export function check(directory: string) {
return runCargoSubCommand({
directory,
args: ["check"],
});
}
async function runCargoSubCommand(params: {
args: string[];
directory: string;
}) {
const p = Deno.run({
cwd: params.directory,
cmd: ["cargo", ...params.args],
stderr: "inherit",
stdout: "inherit",
});
const status = await p.status();
if (!status.success) {
throw new Error("Failed");
}
}
|