mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
72 lines
1.6 KiB
TypeScript
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");
|
|
}
|
|
}
|