Comments (8)
explicitly setting force = true
in install_crate
also doesn't add --force
to the command. output is same as above.
from cargo-make.
either do:
install_crate = { crate_name = "cargo-expand", min_version = "1.0.80" }
or:
install_crate = { crate_name = "cargo-expand", binary="cargo", test_arg="whatever...", version = "1.0.80" }
which are the currently supported formats. you can see the types.rs for what combinations are supported.
from cargo-make.
also i do'nt think the doc link you gave shows combination as you suggested, maybe i'm wrong. but if something is not clear, would love you to help clear it up in the docs.
from cargo-make.
@sagiegurari Even when I switch this to install_crate = { crate_name = "cargo-expand", binary="cargo", test_arg=["expand", "--version"], version = "1.0.80" }
, it still doesn't force the install of an older version when a newer version is already installed. If version 1.0.81 is installed, but i explictly require version = "1.0.80" (**not min_version= "1.0.80" **), I expect cargo-make would try to run cargo install cargo-expand --version 1.0.80 --force
from cargo-make.
i ran:
cargo install cargo-expand
checked version manuallly:
gitpod /workspace/cargo-make (master) $ cargo expand --version
cargo-expand 1.0.81
created this makefile:
[config]
skip_core_tasks = true
skip_git_env_info = true
skip_rust_env_info = true
skip_crate_env_info = true
[tasks.default]
install_crate = { crate_name = "cargo-expand", binary="cargo", test_arg=["expand", "--version"], version = "1.0.80" }
script = '''
cargo expand --version
'''
ran it:
[cargo-make] INFO - cargo make 0.37.10
[cargo-make] INFO - Build File: ./target/Makefile.toml
[cargo-make] INFO - Task: default
[cargo-make] INFO - Profile: development
[cargo-make] INFO - Running Task: default
[cargo-make] INFO - Execute Command: "cargo" "install" "--force" "--locked" "--version" "1.0.80" "cargo-expand"
Updating crates.io index
Installing cargo-expand v1.0.80
Updating crates.io index
Updating crates.io index
Compiling proc-macro2 v1.0.79
Compiling unicode-ident v1.0.12
Compiling serde v1.0.197
Compiling memchr v2.7.1
Compiling regex-syntax v0.8.2
Compiling cfg-if v1.0.0
Compiling libc v0.2.153
Compiling equivalent v1.0.1
Compiling crc32fast v1.4.0
Compiling hashbrown v0.14.3
Compiling serde_json v1.0.114
Compiling bit-vec v0.6.3
Compiling semver v1.0.22
Compiling adler v1.0.2
Compiling itoa v1.0.10
Compiling ryu v1.0.17
Compiling thiserror v1.0.58
Compiling utf8parse v0.2.1
Compiling same-file v1.0.6
Compiling anstyle-parse v0.2.3
Compiling miniz_oxide v0.7.2
Compiling walkdir v2.5.0
Compiling bit-set v0.5.3
Compiling prettyplease v0.2.17
Compiling once_cell v1.19.0
Compiling anstyle-query v1.0.2
Compiling log v0.4.21
Compiling anstyle v1.0.6
Compiling bytemuck v1.15.0
Compiling rustix v0.38.32
Compiling colorchoice v1.0.0
Compiling fnv v1.0.7
Compiling rgb v0.8.37
Compiling anstream v0.6.13
Compiling lazy_static v1.4.0
Compiling std_prelude v0.2.12
Compiling linux-raw-sys v0.4.13
Compiling unsafe-libyaml v0.2.11
Compiling aho-corasick v1.1.3
Compiling clap_lex v0.7.0
Compiling quote v1.0.35
Compiling indexmap v2.2.6
Compiling syn v2.0.55
Compiling flate2 v1.0.28
Compiling strsim v0.11.0
Compiling winnow v0.6.5
Compiling heck v0.5.0
Compiling unicode-width v0.1.11
Compiling bat v0.24.0
Compiling bitflags v2.5.0
Compiling termcolor v1.4.1
Compiling bitflags v1.3.2
Compiling clap_builder v4.5.2
Compiling console v0.15.8
Compiling ansi_colours v1.2.2
Compiling content_inspector v0.2.4
Compiling path_abs v0.5.1
Compiling encoding_rs v0.8.33
Compiling home v0.5.9
Compiling nu-ansi-term v0.49.0
Compiling shell-words v1.1.0
Compiling cargo-expand v1.0.80
Compiling regex-automata v0.4.6
Compiling fastrand v2.0.2
Compiling bytesize v1.3.0
Compiling cargo-subcommand-metadata v0.1.0
Compiling tempfile v3.10.1
Compiling serde_derive v1.0.197
Compiling thiserror-impl v1.0.58
Compiling clap_derive v4.5.3
Compiling syn-select v0.3.0
Compiling regex v1.10.4
Compiling bstr v1.9.1
Compiling fancy-regex v0.11.0
Compiling toolchain_find v0.4.0
Compiling globset v0.4.14
Compiling clap v4.5.3
Compiling grep-cli v0.1.10
Compiling bincode v1.3.3
Compiling toml_datetime v0.6.5
Compiling serde_spanned v0.6.5
Compiling serde_yaml v0.9.34+deprecated
Compiling clircle v0.4.0
Compiling toml_edit v0.22.9
Compiling syntect v5.2.0
Compiling toml v0.8.12
Finished release [optimized] target(s) in 1m 11s
Replacing /workspace/.cargo/bin/cargo-expand
Replaced package `cargo-expand v1.0.81` with `cargo-expand v1.0.80` (executable `cargo-expand`)
cargo-expand 1.0.80
[cargo-make] INFO - Build Done in 71.51 seconds.
works fine.
from cargo-make.
@sagiegurari I am able to repro your behavior, but i still see other cases where this is not functioning.
Ex. If i enable core tasks and extend the test
task like in #1063:
[config]
# skip_core_tasks = true
skip_git_env_info = true
skip_rust_env_info = true
skip_crate_env_info = true
[tasks.test]
install_crate = { crate_name = "cargo-expand", binary="cargo", test_arg=["expand", "--version"], version = "1.0.80" }
🪟 Windows 11 Enterprise(10.0.22631) (pwsh) make-test on master [?] is 📦 v0.1.0 via 🦀 v1.77.1 took 3s
at 02:15:10 PM ❯ cargo clean
Removed 19 files, 3.4MiB total
🪟 Windows 11 Enterprise(10.0.22631) (pwsh) make-test on master [?] is 📦 v0.1.0 via 🦀 v1.77.1
at 02:15:24 PM ❯ cargo expand --version
cargo-expand 1.0.82
🪟 Windows 11 Enterprise(10.0.22631) (pwsh) make-test on master [?] is 📦 v0.1.0 via 🦀 v1.77.1
at 02:15:31 PM ❯ cargo make test
[cargo-make] INFO - cargo make 0.37.11
[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 - Execute Command: "cargo" "test" "--all-features"
Compiling make-test v0.1.0 (D:\make-test)
Finished test [unoptimized + debuginfo] target(s) in 0.40s
Running unittests src\main.rs (target\debug\deps\make_test-67937dc673a03896.exe)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[cargo-make] INFO - Build Done in 2.11 seconds.
As you see above, when cargo-expand is already installed, it does not force the installation of the older version. But when uninstall cargo-expand and rerun the task, it works:
🪟 Windows 11 Enterprise(10.0.22631) (pwsh) make-test on master [?] is 📦 v0.1.0 via 🦀 v1.77.1 took 2s
at 02:15:40 PM ❯ cargo uninstall cargo-expand
Removing D:\.tools\.cargo\bin\cargo-expand.exe
🪟 Windows 11 Enterprise(10.0.22631) (pwsh) make-test on master [?] is 📦 v0.1.0 via 🦀 v1.77.1
at 02:16:45 PM ❯ cargo make test
[cargo-make] INFO - cargo make 0.37.11
[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 - Execute Command: "cargo" "install" "--force" "--locked" "--version" "1.0.80" "cargo-expand"
Updating crates.io index
Installing cargo-expand v1.0.80
Updating crates.io index
Updating crates.io index
It seems like it is failing to respect version = 1.0.80
only when it is overriding the core test
task
from cargo-make.
@wmmc88 ok got it.
there is a small hint for it in the docs (could be MUCH improved):
This ensures we are using a crate version that supports the feature we require for the build.
Currently there are few limitations when defining min_version:Specifying toolchain in the task or rustup_component_name in the install_crate structure, will make cargo-make ignore the min version value.
same goes for version, not just in version.
The 'test' task is defined as follows by default:
[tasks.test]
description = "Runs all available tests."
category = "Test"
install_crate = false
toolchain = "${CARGO_MAKE_RUST_DEFAULT_TOOLCHAIN}"
command = "cargo"
args = [
"test",
"@@remove-empty(CARGO_MAKE_CARGO_VERBOSE_FLAGS)",
"@@split(CARGO_MAKE_CARGO_BUILD_TEST_FLAGS, )",
]
since toolchain is defined, you won't have support for min/version here.
options
- do clear=true but than you redefine everything
- add dependency to your task that installs whatever you want - best option
from cargo-make.
@wmmc88 closing but reopen if you feel something is missing
from cargo-make.
Related Issues (20)
- Decode map environment variable overwrites existing one even with env_not_set condition HOT 2
- Why the post/pre hook does not work as expected? HOT 1
- Add typos check into ci workflow HOT 2
- `script_runner_args` not passed to `@rust` `script_runner` HOT 6
- Only forwarding ctrl-c to task HOT 1
- `#!@rust` `load_script` fails to execute HOT 4
- CARGO_MAKE_CRATE_NAME not being set based on task cwd HOT 3
- Installation only tasks always check crates.io HOT 2
- Env var evaluation order is wrong HOT 3
- `CARGO` env variable does not get set when running commands HOT 3
- `install_crate` does not get overridden HOT 1
- cargo-make not respecting `toolchain` HOT 1
- Hide cargo-make's log, but show script's stdout HOT 1
- Feature Request: Add a way to pass `args` to `script_runner` of a `condition_script` HOT 2
- `cm_plugin_run_custom_task` will fail to run a task json if it contains `private` field HOT 2
- error: variable does not need to be mutable HOT 1
- Error installing on Void Linux musl libc version HOT 5
- How to build statically? HOT 2
- docker command not found under windows HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cargo-make.