1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00
denoland-deno/tools/release/helpers/cargo.ts
2022-01-20 16:10:16 +09:00

72 lines
1.6 KiB
TypeScript

// Copyright 2018-2022 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");
}
}