Skip to content

Commit 31c864e

Browse files
jyn514Joshua Nelson
authored and
Joshua Nelson
committed
Add a way to not build tier one targets by default
This is still opt-in and off by default. However, it's useful for local development and custom registries.
1 parent 1c23b87 commit 31c864e

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

.env.sample

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ DOCSRS_LOG=docs_rs,rustwide=info
44
AWS_ACCESS_KEY_ID=cratesfyi
55
AWS_SECRET_ACCESS_KEY=secret_key
66
S3_ENDPOINT=http://localhost:9000
7+
DOCSRS_INCLUDE_DEFAULT_TARGETS=false

crates/metadata/lib.rs

+32-14
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
//! let metadata = Metadata::from_crate_root(&source_root)?;
2121
//!
2222
//! // Next, learn what arguments we need to pass to `cargo`.
23-
//! let targets = metadata.targets();
23+
//! let targets = metadata.targets(/* include_default_targets: */ true);
2424
//! let mut cargo_args = metadata.cargo_args(&[], &[]);
2525
//! cargo_args.push(targets.default_target.into());
2626
//!
@@ -190,7 +190,10 @@ impl Metadata {
190190
/// Return the targets that should be built.
191191
///
192192
/// The `default_target` will never be one of the `other_targets`.
193-
pub fn targets(&self) -> BuildTargets<'_> {
193+
/// If `include_default_targets` is `true` and `targets` is unset, this also includes
194+
/// [`DEFAULT_TARGETS`]. Otherwise, if `include_default_targets` is `false` and `targets`
195+
/// is unset, `other_targets` will be empty.
196+
pub fn targets(&self, include_default_targets: bool) -> BuildTargets<'_> {
194197
let default_target = self
195198
.default_target
196199
.as_deref()
@@ -202,12 +205,16 @@ impl Metadata {
202205
})
203206
.unwrap_or(HOST_TARGET);
204207

205-
// Let people opt-in to only having specific targets
206-
let mut targets: HashSet<_> = self
208+
let crate_targets = self
207209
.targets
208210
.as_ref()
209-
.map(|targets| targets.iter().map(String::as_str).collect())
210-
.unwrap_or_else(|| DEFAULT_TARGETS.iter().copied().collect());
211+
.map(|targets| targets.iter().map(String::as_str).collect());
212+
// Let people opt-in to only having specific targets
213+
let mut targets: HashSet<_> = if include_default_targets {
214+
crate_targets.unwrap_or_else(|| DEFAULT_TARGETS.iter().copied().collect())
215+
} else {
216+
crate_targets.unwrap_or_default()
217+
};
211218

212219
targets.remove(&default_target);
213220
BuildTargets {
@@ -412,7 +419,7 @@ mod test_targets {
412419
let BuildTargets {
413420
default_target: default,
414421
other_targets: tier_one,
415-
} = metadata.targets();
422+
} = metadata.targets(true);
416423
assert_eq!(default, HOST_TARGET);
417424

418425
// should be equal to TARGETS \ {HOST_TARGET}
@@ -434,7 +441,7 @@ mod test_targets {
434441
let BuildTargets {
435442
default_target: default,
436443
other_targets: others,
437-
} = metadata.targets();
444+
} = metadata.targets(true);
438445

439446
assert_eq!(default, HOST_TARGET);
440447
assert!(others.is_empty());
@@ -448,7 +455,7 @@ mod test_targets {
448455
let BuildTargets {
449456
default_target: default,
450457
other_targets: others,
451-
} = metadata.targets();
458+
} = metadata.targets(true);
452459

453460
assert_eq!(default, "i686-pc-windows-msvc");
454461
assert_eq!(others.len(), 1);
@@ -459,7 +466,7 @@ mod test_targets {
459466
let BuildTargets {
460467
default_target: default,
461468
other_targets: others,
462-
} = metadata.targets();
469+
} = metadata.targets(true);
463470

464471
assert_eq!(default, HOST_TARGET);
465472
assert!(others.is_empty());
@@ -473,7 +480,7 @@ mod test_targets {
473480
let BuildTargets {
474481
default_target: default,
475482
other_targets: others,
476-
} = metadata.targets();
483+
} = metadata.targets(true);
477484

478485
assert_eq!(default, "i686-pc-windows-msvc");
479486
assert!(others.is_empty());
@@ -483,7 +490,7 @@ mod test_targets {
483490
let BuildTargets {
484491
default_target: default,
485492
other_targets: others,
486-
} = metadata.targets();
493+
} = metadata.targets(true);
487494

488495
assert_eq!(default, "i686-apple-darwin");
489496
assert_eq!(others.len(), 1);
@@ -494,7 +501,7 @@ mod test_targets {
494501
let BuildTargets {
495502
default_target: default,
496503
other_targets: others,
497-
} = metadata.targets();
504+
} = metadata.targets(true);
498505

499506
assert_eq!(default, "i686-apple-darwin");
500507
assert!(others.is_empty());
@@ -504,7 +511,7 @@ mod test_targets {
504511
let BuildTargets {
505512
default_target: default,
506513
other_targets: others,
507-
} = metadata.targets();
514+
} = metadata.targets(true);
508515

509516
assert_eq!(default, "i686-apple-darwin");
510517
let tier_one_targets_no_default = DEFAULT_TARGETS
@@ -515,6 +522,17 @@ mod test_targets {
515522

516523
assert_eq!(others, tier_one_targets_no_default);
517524
}
525+
526+
#[test]
527+
fn no_default_targets() {
528+
// if `targets` is unset, `other_targets` should be empty
529+
let metadata = Metadata::default();
530+
let BuildTargets {
531+
other_targets: others,
532+
..
533+
} = metadata.targets(false);
534+
assert!(others.is_empty(), "{:?}", others);
535+
}
518536
}
519537

520538
#[cfg(test)]

src/config.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ use std::str::FromStr;
77

88
#[derive(Debug)]
99
pub struct Config {
10-
// Build params
11-
pub(crate) build_attempts: u16,
12-
1310
pub prefix: PathBuf,
1411
pub registry_index_path: PathBuf,
1512
pub registry_url: Option<String>,
@@ -41,11 +38,14 @@ pub struct Config {
4138
// Time between 'git gc --auto' calls in seconds
4239
pub(crate) registry_gc_interval: u64,
4340

41+
// Build params
42+
pub(crate) build_attempts: u16,
4443
pub(crate) rustwide_workspace: PathBuf,
4544
pub(crate) inside_docker: bool,
4645
pub(crate) local_docker_image: Option<String>,
4746
pub(crate) toolchain: String,
4847
pub(crate) build_cpu_limit: Option<u32>,
48+
pub(crate) include_default_targets: bool,
4949
}
5050

5151
impl Config {
@@ -89,6 +89,7 @@ impl Config {
8989
local_docker_image: maybe_env("DOCS_RS_LOCAL_DOCKER_IMAGE")?,
9090
toolchain: env("CRATESFYI_TOOLCHAIN", "nightly".to_string())?,
9191
build_cpu_limit: maybe_env("DOCS_RS_BUILD_CPU_LIMIT")?,
92+
include_default_targets: env("DOCSRS_INCLUDE_DEFAULT_TARGETS", true)?,
9293
})
9394
}
9495

src/docbuilder/rustwide_builder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ impl RustwideBuilder {
333333
let BuildTargets {
334334
default_target,
335335
other_targets,
336-
} = metadata.targets();
336+
} = metadata.targets(self.config.include_default_targets);
337337

338338
// Perform an initial build
339339
let res = self.execute_build(default_target, true, &build, &limits, &metadata)?;

0 commit comments

Comments
 (0)