1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 15:24:46 -05:00

fix(task): support tasks without commands (#27191)

Support running tasks that have no command and only dependencies. This
is useful for when you want to group tasks only.
This commit is contained in:
Marvin Hagemeister 2024-12-19 19:10:58 +01:00 committed by GitHub
parent 074444ab6c
commit 351e79642a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 62 additions and 14 deletions

4
Cargo.lock generated
View file

@ -1463,9 +1463,9 @@ dependencies = [
[[package]] [[package]]
name = "deno_config" name = "deno_config"
version = "0.39.3" version = "0.40.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce717af3fe6788dae63965d58d5637fd62be8fe4f345f189137ffc06c51837d2" checksum = "459b0bf193d2f9a177d18064a4888062ba0716312f56dbda8f1319444a8b2544"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"deno_package_json", "deno_package_json",

View file

@ -51,7 +51,7 @@ deno_ast = { version = "=0.44.0", features = ["transpiling"] }
deno_core = { version = "0.326.0" } deno_core = { version = "0.326.0" }
deno_bench_util = { version = "0.178.0", path = "./bench_util" } deno_bench_util = { version = "0.178.0", path = "./bench_util" }
deno_config = { version = "=0.39.3", features = ["workspace", "sync"] } deno_config = { version = "=0.40.0", features = ["workspace", "sync"] }
deno_lockfile = "=0.23.2" deno_lockfile = "=0.23.2"
deno_media_type = { version = "0.2.0", features = ["module_specifier"] } deno_media_type = { version = "0.2.0", features = ["module_specifier"] }
deno_npm = "=0.26.0" deno_npm = "=0.26.0"

View file

@ -3793,7 +3793,7 @@ impl Inner {
for (name, command) in scripts { for (name, command) in scripts {
result.push(TaskDefinition { result.push(TaskDefinition {
name: name.clone(), name: name.clone(),
command: command.clone(), command: Some(command.clone()),
source_uri: url_to_uri(&package_json.specifier()) source_uri: url_to_uri(&package_json.specifier())
.map_err(|_| LspError::internal_error())?, .map_err(|_| LspError::internal_error())?,
}); });

View file

@ -14,7 +14,7 @@ pub const LATEST_DIAGNOSTIC_BATCH_INDEX: &str =
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct TaskDefinition { pub struct TaskDefinition {
pub name: String, pub name: String,
pub command: String, pub command: Option<String>,
pub source_uri: lsp::Uri, pub source_uri: lsp::Uri,
} }

View file

@ -446,7 +446,6 @@
}, },
"command": { "command": {
"type": "string", "type": "string",
"required": true,
"description": "The task to execute" "description": "The task to execute"
}, },
"dependencies": { "dependencies": {

View file

@ -231,7 +231,7 @@ pub async fn execute_script(
&Url::from_directory_path(cli_options.initial_cwd()).unwrap(), &Url::from_directory_path(cli_options.initial_cwd()).unwrap(),
"", "",
&TaskDefinition { &TaskDefinition {
command: task_flags.task.as_ref().unwrap().to_string(), command: Some(task_flags.task.as_ref().unwrap().to_string()),
dependencies: vec![], dependencies: vec![],
description: None, description: None,
}, },
@ -448,6 +448,16 @@ impl<'a> TaskRunner<'a> {
kill_signal: KillSignal, kill_signal: KillSignal,
argv: &'a [String], argv: &'a [String],
) -> Result<i32, deno_core::anyhow::Error> { ) -> Result<i32, deno_core::anyhow::Error> {
let Some(command) = &definition.command else {
log::info!(
"{} {} {}",
colors::green("Task"),
colors::cyan(task_name),
colors::gray("(no command)")
);
return Ok(0);
};
if let Some(npm_resolver) = self.npm_resolver.as_managed() { if let Some(npm_resolver) = self.npm_resolver.as_managed() {
npm_resolver.ensure_top_level_package_json_install().await?; npm_resolver.ensure_top_level_package_json_install().await?;
npm_resolver npm_resolver
@ -469,7 +479,7 @@ impl<'a> TaskRunner<'a> {
self self
.run_single(RunSingleOptions { .run_single(RunSingleOptions {
task_name, task_name,
script: &definition.command, script: command,
cwd: &cwd, cwd: &cwd,
custom_commands, custom_commands,
kill_signal, kill_signal,
@ -837,7 +847,7 @@ fn print_available_tasks(
is_deno: false, is_deno: false,
name: name.to_string(), name: name.to_string(),
task: deno_config::deno_json::TaskDefinition { task: deno_config::deno_json::TaskDefinition {
command: script.to_string(), command: Some(script.to_string()),
dependencies: vec![], dependencies: vec![],
description: None, description: None,
}, },
@ -873,11 +883,13 @@ fn print_available_tasks(
)?; )?;
} }
} }
writeln!( if let Some(command) = &desc.task.command {
writer, writeln!(
" {}", writer,
strip_ansi_codes_and_escape_control_chars(&desc.task.command) " {}",
)?; strip_ansi_codes_and_escape_control_chars(command)
)?;
};
if !desc.task.dependencies.is_empty() { if !desc.task.dependencies.is_empty() {
let dependencies = desc let dependencies = desc
.task .task

View file

@ -61,6 +61,18 @@
"cwd": "arg_task_with_deps", "cwd": "arg_task_with_deps",
"args": "task a a", "args": "task a a",
"output": "./arg_task_with_deps.out" "output": "./arg_task_with_deps.out"
},
"no_command": {
"cwd": "no_command",
"args": "task a",
"output": "./no_command.out",
"exitCode": 0
},
"no_command_list": {
"cwd": "no_command",
"args": "task",
"output": "./no_command_list.out",
"exitCode": 0
} }
} }
} }

View file

@ -0,0 +1,5 @@
Task b echo 'b'
b
Task c echo 'c'
c
Task a (no command)

View file

@ -0,0 +1,13 @@
{
"tasks": {
"a": {
"dependencies": ["b", "c"]
},
"b": {
"command": "echo 'b'"
},
"c": {
"command": "echo 'c'"
}
}
}

View file

@ -0,0 +1,7 @@
Available tasks:
- a
depends on: b, c
- b
echo 'b'
- c
echo 'c'