mirror of
https://github.com/cargo-bins/cargo-binstall.git
synced 2025-04-20 20:48:43 +00:00
Use CARGO
env variable if present (#453)
* Run `$CARGO -vV` in `detect-targets` if env `CARGO` present * Improve crate doc for `detect-targets` * Use env var `CARGO` in `install_from_source` if present * Test use of `CARGO` env in `tests.sh` Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
parent
448542f0c8
commit
ec2bdb551e
5 changed files with 48 additions and 18 deletions
30
.github/scripts/tests.sh
vendored
30
.github/scripts/tests.sh
vendored
|
@ -3,17 +3,25 @@
|
||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
unset CARGO_INSTALL_ROOT
|
unset CARGO_INSTALL_ROOT
|
||||||
unset CARGO_HOME
|
|
||||||
|
|
||||||
# Install binaries using cargo-binstall
|
crates="b3sum cargo-release cargo-binstall cargo-watch miniserve sccache"
|
||||||
# shellcheck disable=SC2086
|
|
||||||
"./$1" binstall --log-level debug --no-confirm \
|
if [ "$2" = "Windows" ]; then
|
||||||
b3sum \
|
# Install binaries using cargo-binstall
|
||||||
cargo-release \
|
# shellcheck disable=SC2086
|
||||||
cargo-binstall \
|
"./$1" --log-level debug --no-confirm $crates
|
||||||
cargo-watch \
|
else
|
||||||
miniserve \
|
export CARGO_HOME=/tmp/cargo-home-for-test
|
||||||
sccache
|
export PATH="$CARGO_HOME/bin:$PATH"
|
||||||
|
|
||||||
|
mkdir -p "$CARGO_HOME/bin"
|
||||||
|
# Copy it to bin to test use of env var `CARGO`
|
||||||
|
cp "./$1" "$CARGO_HOME/bin/cargo-binstall"
|
||||||
|
|
||||||
|
# Install binaries using cargo-binstall
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
cargo binstall --log-level debug --no-confirm $crates
|
||||||
|
fi
|
||||||
|
|
||||||
# Test that the installed binaries can be run
|
# Test that the installed binaries can be run
|
||||||
b3sum --version
|
b3sum --version
|
||||||
|
@ -69,7 +77,7 @@ cargo binstall --help >/dev/null
|
||||||
|
|
||||||
# to force failure if falling back to source
|
# to force failure if falling back to source
|
||||||
# FIXME: remove/replace once #136 lands
|
# FIXME: remove/replace once #136 lands
|
||||||
PATH="$test_resources/fake-cargo:$PATH"
|
export PATH="$test_resources/fake-cargo:$PATH"
|
||||||
|
|
||||||
# Test default GitLab pkg-url templates
|
# Test default GitLab pkg-url templates
|
||||||
"./$1" binstall \
|
"./$1" binstall \
|
||||||
|
|
2
.github/workflows/integration.yml
vendored
2
.github/workflows/integration.yml
vendored
|
@ -51,6 +51,4 @@ jobs:
|
||||||
- name: Test
|
- name: Test
|
||||||
shell: bash
|
shell: bash
|
||||||
run: .github/scripts/tests.sh ${{ matrix.bin }} ${{ runner.os }}
|
run: .github/scripts/tests.sh ${{ matrix.bin }} ${{ runner.os }}
|
||||||
env:
|
|
||||||
CARGO_HOME: /tmp/cargo-home-for-test/
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use std::sync::Arc;
|
use std::{borrow::Cow, env, ffi::OsStr, sync::Arc};
|
||||||
|
|
||||||
use cargo_toml::Package;
|
use cargo_toml::Package;
|
||||||
use compact_str::CompactString;
|
use compact_str::CompactString;
|
||||||
|
@ -110,12 +110,18 @@ async fn install_from_source(
|
||||||
) -> Result<(), BinstallError> {
|
) -> Result<(), BinstallError> {
|
||||||
let jobserver_client = lazy_jobserver_client.get().await?;
|
let jobserver_client = lazy_jobserver_client.get().await?;
|
||||||
|
|
||||||
|
let cargo = env::var_os("CARGO")
|
||||||
|
.map(Cow::Owned)
|
||||||
|
.unwrap_or_else(|| Cow::Borrowed(OsStr::new("cargo")));
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
"Running `cargo install {} --version {} --target {target}`",
|
"Running `{} install {} --version {} --target {target}`",
|
||||||
package.name, package.version
|
cargo.to_string_lossy(),
|
||||||
|
package.name,
|
||||||
|
package.version
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut cmd = Command::new("cargo");
|
let mut cmd = Command::new(cargo);
|
||||||
|
|
||||||
cmd.arg("install")
|
cmd.arg("install")
|
||||||
.arg(&package.name)
|
.arg(&package.name)
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
use std::{
|
use std::{
|
||||||
|
borrow::Cow,
|
||||||
|
env,
|
||||||
|
ffi::OsStr,
|
||||||
io::{BufRead, Cursor},
|
io::{BufRead, Cursor},
|
||||||
process::{Output, Stdio},
|
process::{Output, Stdio},
|
||||||
};
|
};
|
||||||
|
@ -65,8 +68,17 @@ pub async fn detect_targets() -> Vec<String> {
|
||||||
|
|
||||||
/// Figure out what the host target is using `rustc`.
|
/// Figure out what the host target is using `rustc`.
|
||||||
/// If `rustc` is absent, then it would return `None`.
|
/// If `rustc` is absent, then it would return `None`.
|
||||||
|
///
|
||||||
|
/// If environment variable `CARGO` is present, then
|
||||||
|
/// `$CARGO -vV` will be run instead.
|
||||||
|
///
|
||||||
|
/// Otherwise, it will run `rustc -vV` to detect target.
|
||||||
async fn get_target_from_rustc() -> Option<String> {
|
async fn get_target_from_rustc() -> Option<String> {
|
||||||
let Output { status, stdout, .. } = Command::new("rustc")
|
let cmd = env::var_os("CARGO")
|
||||||
|
.map(Cow::Owned)
|
||||||
|
.unwrap_or_else(|| Cow::Borrowed(OsStr::new("rustc")));
|
||||||
|
|
||||||
|
let Output { status, stdout, .. } = Command::new(cmd)
|
||||||
.arg("-vV")
|
.arg("-vV")
|
||||||
.stdin(Stdio::null())
|
.stdin(Stdio::null())
|
||||||
.stdout(Stdio::piped())
|
.stdout(Stdio::piped())
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
//! Detect the target at the runtime.
|
//! Detect the target at the runtime.
|
||||||
//!
|
//!
|
||||||
|
//! It runs `$CARGO -vV` if environment variable `CARGO` is present
|
||||||
|
//! for cargo subcommands, otherwise it would try running `rustc -vV`.
|
||||||
|
//!
|
||||||
|
//! If both `rustc` isn't present on the system, it will fallback
|
||||||
|
//! to using syscalls plus `ldd` on Linux to detect targets.
|
||||||
|
//!
|
||||||
//! Example use cases:
|
//! Example use cases:
|
||||||
//! - The binary is built with musl libc to run on anywhere, but
|
//! - The binary is built with musl libc to run on anywhere, but
|
||||||
//! the runtime supports glibc.
|
//! the runtime supports glibc.
|
||||||
|
|
Loading…
Add table
Reference in a new issue