cargo make で contains multiple actions のエラーに遭遇

ブログさぼりがちなので、リハビリがてら軽いやつから書いていきます。

いまさらながら cargo make はじめました。

github.com

(一応) 自分でメンテしている echonet-lite-rs のテストを cargo make で作ってみるかー、と考えたのが始まりです。

github.com

contains multiple actions

Makefile.toml に次のようなタスクを定義して、実行したところ、contains multiple actions のエラーに遭遇しました。

[tasks.test]
description = "test mra-reader"
script = "cargo run data/MRA_V1.1.1/mraData/devices/0x0287.json"
dependencies = ["fetch-test-data", "build"]
$ cargo make test
[cargo-make] INFO - cargo make 0.36.3
[cargo-make] INFO - Project: mra-reader
[cargo-make] INFO - Build File: Makefile.toml
[cargo-make] INFO - Task: test
[cargo-make] INFO - Profile: development
[cargo-make] INFO - Running Task: legacy-migration
[cargo-make] INFO - Skipping Task: fetch-test-data 
[cargo-make] INFO - Execute Command: "cargo" "build"
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
[cargo-make] INFO - Running Task: test
[cargo-make] ERROR - Invalid task: test, contains multiple actions.

cargo make にはビルトインのタスクがあって、test もその1つのようです。

https://github.com/sagiegurari/cargo-make#disabling-predefined-tasksflows

今回の私がやったように、ビルトインタスクを自分で定義すると、置き換えではなく、拡張という扱いになるようです。 このようなビルトインタスクは --list-all-steps するとずらずらとたくさん出てきます。 test もありますね。

$ cargo make --list-all-steps
Build
----------
build - build MRA reader binary
build-flow - Full sanity testing flow.
# 中略
Test
----------
bench - Runs all available bench files.
bench-compile - Compiles all available bench files.
# 中略
pre-test - No Description.
test - Runs all available tests.

解決方法

toml ファイルに次のように書くことでビルトインタスクをロードしないようにできます。

[config]
skip_core_tasks = true

またはタスク名をビルトインタスクとかぶらないようにすれば良いです。

[tasks.test-mra-parser]
description = "test mra-reader"
script = "cargo run data/MRA_V1.1.1/mraData/devices/0x0287.json"
dependencies = ["fetch-test-data", "build"]

ビルトインタスクを眺めていると、よく使いそうなやつが多いのですが、多すぎる気もするので、どちらの方が使いやすそうか、試しながらやっていきたいですね。