# spell-checker:ignore (cargo-make) duckscript macos # spell-checker:ignore (rust) clippy # spell-checker:ignore (uutils) uutil uutils [config] min_version = "0.26.2" default_to_workspace = false init_task = "_init_task" [config.modify_core_tasks] namespace = "core" ### initialization ### * note: the task executed from 'init_task' ignores dependencies; workaround is to run a secondary task via 'run_task' [tasks._init_task] # dependencies are unavailable # * delegate (via 'run_task') to "real" initialization task ('_init') with full capabilities private = true run_task = "_init" [tasks._init] private = true dependencies = [ "_init-vars", ] [tasks._init-vars] private = true script_runner = "@duckscript" script = [ ''' # reset build/test flags set_env CARGO_MAKE_CARGO_BUILD_TEST_FLAGS "" # determine features env_features = get_env CARGO_FEATURES if is_empty "${env_features}" env_features = get_env FEATURES end_if if is_empty "${env_features}" if eq "${CARGO_MAKE_RUST_TARGET_OS}" "macos" features = set "unix" else if eq "${CARGO_MAKE_RUST_TARGET_OS}" "linux" features = set "unix" else if eq "${CARGO_MAKE_RUST_TARGET_OS}" "windows" features = set "windows" end_if end_if end_if end_if if is_empty "${features}" features = set "${env_features}" else if not is_empty "${env_features}" features = set "${features},${env_features}" end_if end_if # set build flags from features if not is_empty "${features}" set_env CARGO_MAKE_VAR_BUILD_TEST_FEATURES "${features}" set_env CARGO_MAKE_CARGO_BUILD_TEST_FLAGS "--features ${features}" end_if # determine show-utils helper script show_utils = set "util/show-utils.sh" if eq "${CARGO_MAKE_RUST_TARGET_OS}" "windows" show_utils = set "util/show-utils.BAT" end_if set_env CARGO_MAKE_VAR_SHOW_UTILS "${show_utils}" # rebuild CARGO_MAKE_TASK_ARGS for various targets args = set ${CARGO_MAKE_TASK_ARGS} # * rebuild for 'features' target args_features = replace ${args} ";" "," set_env CARGO_MAKE_TASK_BUILD_FEATURES_ARGS "${args_features}" # * rebuild for 'examples' target args_examples = replace ${args} ";" " --example " if is_empty "${args_examples}" args_examples = set "--examples" end_if set_env CARGO_MAKE_TASK_BUILD_EXAMPLES_ARGS "${args_examples}" # * rebuild for 'utils' target args_utils_list = split "${args}" ";" for arg in "${args_utils_list}" if not is_empty "${arg}" if not starts_with "${arg}" "uu_" arg = set "uu_${arg}" end_if args_utils = set "${args_utils} -p${arg}" end_if end args_utils = trim "${args_utils}" set_env CARGO_MAKE_TASK_BUILD_UTILS_ARGS "${args_utils}" ''' ] ### tasks [tasks.default] description = "## *DEFAULT* Build (debug-mode) and test project" category = "[project]" dependencies = [ "action-build-debug", "test-terse", ] ## [tasks.build] description = "## Build (release-mode) project" category = "[project]" dependencies = [ "core::pre-build", "action-build-release", "core::post-build", ] [tasks.build-debug] description = "## Build (debug-mode) project" category = "[project]" dependencies = [ "action-build-debug", ] [tasks.build-examples] description = "## Build (release-mode) project example(s); usage: `cargo make (build-examples | examples) [EXAMPLE]...`" category = "[project]" dependencies = [ "core::pre-build", "action-build-examples", "core::post-build", ] [tasks.build-features] description = "## Build (with features; release-mode) project; usage: `cargo make (build-features | features) FEATURE...`" category = "[project]" dependencies = [ "core::pre-build", "action-build-features", "core::post-build", ] [tasks.build-release] alias = "build" [tasks.debug] alias = "build-debug" [tasks.example] description = "hidden singular-form alias for 'examples'" category = "[project]" dependencies = [ "examples", ] [tasks.examples] alias = "build-examples" [tasks.features] alias = "build-features" [tasks.format] description = "## Format code files (with `cargo fmt`)" category = "[project]" dependencies = [ "action-format", "action-determine-tests", "action-format-tests", ] [tasks.help] description = "## Display help" category = "[project]" dependencies = [ "action-display-help", ] [tasks.install] description = "## Install project binary (to $HOME/.cargo/bin)" category = "[project]" command = "cargo" args = ["install", "--path", "."] [tasks.lint] description = "## Display lint report" category = "[project]" dependencies = [ "action-clippy", "action-fmt_report", ] [tasks.release] alias = "build" [tasks.test] description = "## Run project tests" category = "[project]" dependencies = [ "core::pre-test", "core::test", "core::post-test", ] [tasks.test-terse] description = "## Run project tests (with terse/summary output)" category = "[project]" dependencies = [ "core::pre-test", "action-test_quiet", "core::post-test", ] [tasks.uninstall] description = "## Remove project binary (from $HOME/.cargo/bin)" category = "[project]" command = "cargo" args = ["uninstall"] [tasks.util] description = "## Build (individual; release-mode) utilities; usage: `cargo make (util | uutil) [UTIL_NAME...]`" category = "[project]" dependencies = [ "core::pre-build", "action-determine-utils", "action-build-utils", "core::post-build", ] [tasks.utils] description = "hidden plural-form alias for 'util'" category = "[project]" dependencies = [ "util", ] [tasks.uutil] alias = "utils" [tasks.uutils] description = "hidden plural-form alias for 'util'" category = "[project]" dependencies = [ "util", ] ### actions [tasks.action-build-release] description = "`cargo build --release`" command = "cargo" args = ["build", "--release", "@@split(CARGO_MAKE_CARGO_BUILD_TEST_FLAGS, )" ] [tasks.action-build-debug] description = "`cargo build`" command = "cargo" args = ["build", "@@split(CARGO_MAKE_CARGO_BUILD_TEST_FLAGS, )" ] [tasks.action-build-examples] description = "`cargo build (--examples|(--example EXAMPLE)...)`" command = "cargo" args = ["build", "--release", "@@split(CARGO_MAKE_CARGO_BUILD_TEST_FLAGS, )", "${CARGO_MAKE_TASK_BUILD_EXAMPLES_ARGS}" ] [tasks.action-build-features] description = "`cargo build --release --features FEATURES`" command = "cargo" args = ["build", "--release", "--no-default-features", "--features", "${CARGO_MAKE_TASK_BUILD_FEATURES_ARGS}" ] [tasks.action-build-utils] description = "Build individual utilities" command = "cargo" # args = ["build", "@@remove-empty(CARGO_MAKE_TASK_BUILD_UTILS_ARGS)" ] args = ["build", "--release", "@@split(CARGO_MAKE_TASK_BUILD_UTILS_ARGS, )" ] [tasks.action-clippy] description = "`cargo clippy` lint report" command = "cargo" args = ["clippy", "@@split(CARGO_MAKE_CARGO_BUILD_TEST_FLAGS, )"] [tasks.action-determine-utils] script_runner = "@duckscript" script = [ ''' package_options = get_env CARGO_MAKE_TASK_BUILD_UTILS_ARGS if is_empty "${package_options}" show_utils = get_env CARGO_MAKE_VAR_SHOW_UTILS result = exec "${show_utils}" set_env CARGO_MAKE_VAR_UTILS ${result.stdout} utils = array %{result.stdout} for util in ${utils} if not is_empty "${util}" if not starts_with "${util}" "uu_" util = set "uu_${util}" end_if package_options = set "${package_options} -p${util}" end_if end package_options = trim "${package_options}" end_if set_env CARGO_MAKE_TASK_BUILD_UTILS_ARGS "${package_options}" ''' ] [tasks.action-determine-tests] script_runner = "@duckscript" script = [ ''' test_files = glob_array tests/**/*.rs for file in ${test_files} if is_empty "${tests}" tests = set "${file}" else tests = set "${tests} ${file}" end_if end set_env CARGO_MAKE_VAR_TESTS "${tests}" ''' ] [tasks.action-format] description = "`cargo fmt`" command = "cargo" args = ["fmt"] [tasks.action-format-tests] description = "`cargo fmt` tests" command = "cargo" args = ["fmt", "--", "@@split(CARGO_MAKE_VAR_TESTS, )"] [tasks.action-fmt] alias = "action-format" [tasks.action-fmt_report] description = "`cargo fmt` lint report" command = "cargo" args = ["fmt", "--", "--check"] [tasks.action-spellcheck-codespell] description = "`codespell` spellcheck repository" command = "codespell" # (from `pip install codespell`) args = [".", "--skip=*/.git,./target,./tests/fixtures", "--ignore-words-list=mut,od"] [tasks.action-test_quiet] description = "Test (in `--quiet` mode)" command = "cargo" args = ["test", "--quiet", "@@split(CARGO_MAKE_CARGO_BUILD_TEST_FLAGS, )"] [tasks.action-display-help] script_runner = "@duckscript" script = [ ''' echo "" echo "usage: `cargo make TARGET [ARGS...]`" echo "" echo "TARGETs:" echo "" result = exec "cargo" make --list-all-steps # set_env CARGO_MAKE_VAR_UTILS ${result.stdout} # echo ${result.stdout} lines = split ${result.stdout} "\n" # echo ${lines} for line in ${lines} if not is_empty ${line} if contains ${line} " - ##" line_segments = split ${line} " - ##" desc = array_pop ${line_segments} desc = trim ${desc} target = array_pop ${line_segments} target = trim ${target} l = length ${target} r = range 0 18 spacing = set "" for i in ${r} if greater_than ${i} ${l} spacing = set "${spacing} " end_if end echo ${target}${spacing}${desc} end_if end_if end echo "" ''' ]