Skip to content

Commit 5fa1950

Browse files
pietroalbiniJoshua Nelson
authored andcommitted
rustwide_builder: move environment variables to Config
1 parent 60c1066 commit 5fa1950

File tree

5 files changed

+35
-36
lines changed

5 files changed

+35
-36
lines changed

src/bin/cratesfyi.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ impl BuildSubcommand {
305305
pub fn handle_args(self, ctx: BinContext, mut docbuilder: DocBuilder) -> Result<(), Error> {
306306
let rustwide_builder = || -> Result<RustwideBuilder, Error> {
307307
Ok(RustwideBuilder::init(
308+
ctx.config()?,
308309
ctx.pool()?,
309310
ctx.metrics()?,
310311
ctx.storage()?,

src/config.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ pub struct Config {
3939
pub(crate) max_parse_memory: usize,
4040
// Time between 'git gc --auto' calls in seconds
4141
pub(crate) registry_gc_interval: u64,
42+
43+
pub(crate) rustwide_workspace: PathBuf,
44+
pub(crate) inside_docker: bool,
45+
pub(crate) local_docker_image: Option<String>,
46+
pub(crate) toolchain: String,
47+
pub(crate) build_cpu_limit: Option<u32>,
4248
}
4349

4450
impl Config {
@@ -75,6 +81,12 @@ impl Config {
7581
// https://github.com/rust-lang/docs.rs/pull/930#issuecomment-667729380
7682
max_parse_memory: env("DOCSRS_MAX_PARSE_MEMORY", 5 * 1024 * 1024)?,
7783
registry_gc_interval: env("DOCSRS_REGISTRY_GC_INTERVAL", 60 * 60)?,
84+
85+
rustwide_workspace: env("CRATESFYI_RUSTWIDE_WORKSPACE", PathBuf::from(".workspace"))?,
86+
inside_docker: env("DOCS_RS_DOCKER", false)?,
87+
local_docker_image: maybe_env("DOCS_RS_LOCAL_DOCKER_IMAGE")?,
88+
toolchain: env("CRATESFYI_TOOLCHAIN", "nightly".to_string())?,
89+
build_cpu_limit: maybe_env("DOCS_RS_BUILD_CPU_LIMIT")?,
7890
})
7991
}
8092

src/docbuilder/rustwide_builder.rs

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,21 @@ use crate::error::Result;
1010
use crate::index::api::ReleaseData;
1111
use crate::storage::CompressionAlgorithms;
1212
use crate::utils::{copy_doc_dir, parse_rustc_version, CargoMetadata};
13-
use crate::{Metrics, Storage};
13+
use crate::{Config, Metrics, Storage};
1414
use docsrs_metadata::{Metadata, DEFAULT_TARGETS, HOST_TARGET};
1515
use failure::ResultExt;
1616
use log::{debug, info, warn, LevelFilter};
1717
use postgres::Client;
18-
use rustwide::cmd::{Command, SandboxBuilder};
18+
use rustwide::cmd::{Command, SandboxBuilder, SandboxImage};
1919
use rustwide::logging::{self, LogStorage};
2020
use rustwide::toolchain::ToolchainError;
2121
use rustwide::{Build, Crate, Toolchain, Workspace, WorkspaceBuilder};
2222
use serde_json::Value;
23-
use std::borrow::Cow;
2423
use std::collections::{HashMap, HashSet};
2524
use std::path::Path;
2625
use std::sync::Arc;
2726

2827
const USER_AGENT: &str = "docs.rs builder (https://github.com/rust-lang/docs.rs)";
29-
const DEFAULT_RUSTWIDE_WORKSPACE: &str = ".rustwide";
3028
const ESSENTIAL_FILES_VERSIONED: &[&str] = &[
3129
"brush.svg",
3230
"wheel.svg",
@@ -61,59 +59,45 @@ const DUMMY_CRATE_VERSION: &str = "1.0.0";
6159
pub struct RustwideBuilder {
6260
workspace: Workspace,
6361
toolchain: Toolchain,
62+
config: Arc<Config>,
6463
db: Pool,
6564
storage: Arc<Storage>,
6665
metrics: Arc<Metrics>,
6766
rustc_version: String,
68-
cpu_limit: Option<u32>,
6967
}
7068

7169
impl RustwideBuilder {
72-
pub fn init(db: Pool, metrics: Arc<Metrics>, storage: Arc<Storage>) -> Result<Self> {
73-
use rustwide::cmd::SandboxImage;
74-
let env_workspace_path = ::std::env::var("CRATESFYI_RUSTWIDE_WORKSPACE");
75-
let workspace_path = env_workspace_path
76-
.as_ref()
77-
.map(|v| v.as_str())
78-
.unwrap_or(DEFAULT_RUSTWIDE_WORKSPACE);
79-
let is_docker = std::env::var("DOCS_RS_DOCKER")
80-
.map(|s| s == "true")
81-
.unwrap_or(false);
82-
let mut builder = WorkspaceBuilder::new(Path::new(workspace_path), USER_AGENT)
83-
.running_inside_docker(is_docker);
84-
if let Ok(custom_image) = std::env::var("DOCS_RS_LOCAL_DOCKER_IMAGE") {
70+
pub fn init(
71+
config: Arc<Config>,
72+
db: Pool,
73+
metrics: Arc<Metrics>,
74+
storage: Arc<Storage>,
75+
) -> Result<Self> {
76+
let mut builder = WorkspaceBuilder::new(&config.rustwide_workspace, USER_AGENT)
77+
.running_inside_docker(config.inside_docker);
78+
if let Some(custom_image) = &config.local_docker_image {
8579
builder = builder.sandbox_image(SandboxImage::local(&custom_image)?);
8680
}
8781

8882
let workspace = builder.init()?;
8983
workspace.purge_all_build_dirs()?;
9084

91-
let toolchain_name = std::env::var("CRATESFYI_TOOLCHAIN")
92-
.map(Cow::Owned)
93-
.unwrap_or_else(|_| Cow::Borrowed("nightly"));
94-
95-
let cpu_limit = std::env::var("DOCS_RS_BUILD_CPU_LIMIT").ok().map(|limit| {
96-
limit
97-
.parse::<u32>()
98-
.expect("invalid DOCS_RS_BUILD_CPU_LIMIT")
99-
});
100-
101-
let toolchain = Toolchain::dist(&toolchain_name);
85+
let toolchain = Toolchain::dist(&config.toolchain);
10286

10387
Ok(RustwideBuilder {
10488
workspace,
10589
toolchain,
90+
config,
10691
db,
10792
storage,
10893
metrics,
10994
rustc_version: String::new(),
110-
cpu_limit,
11195
})
11296
}
11397

11498
fn prepare_sandbox(&self, limits: &Limits) -> SandboxBuilder {
11599
SandboxBuilder::new()
116-
.cpu_limit(self.cpu_limit.map(|limit| limit as f32))
100+
.cpu_limit(self.config.build_cpu_limit.map(|limit| limit as f32))
117101
.memory_limit(Some(limits.memory()))
118102
.enable_networking(limits.networking())
119103
}
@@ -588,7 +572,7 @@ impl RustwideBuilder {
588572
let mut cargo_args = metadata.cargo_args();
589573

590574
// Add docs.rs specific arguments
591-
if let Some(cpu_limit) = self.cpu_limit {
575+
if let Some(cpu_limit) = self.config.build_cpu_limit {
592576
cargo_args.push(format!("-j{}", cpu_limit));
593577
}
594578
if target != HOST_TARGET {

src/utils/daemon.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@ pub fn start_daemon(context: &dyn Context, enable_registry_watcher: bool) -> Res
6666
let build_queue = context.build_queue()?;
6767
let storage = context.storage()?;
6868
let metrics = context.metrics()?;
69+
let cloned_config = config.clone();
6970
thread::Builder::new()
7071
.name("build queue reader".to_string())
7172
.spawn(move || {
7273
let doc_builder = DocBuilder::new(dbopts.clone(), pool.clone(), build_queue.clone());
73-
queue_builder(doc_builder, pool, build_queue, metrics, storage).unwrap();
74+
queue_builder(doc_builder, cloned_config, pool, build_queue, metrics, storage).unwrap();
7475
})
7576
.unwrap();
7677

src/utils/queue_builder.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
2-
db::Pool, docbuilder::RustwideBuilder, utils::pubsubhubbub, BuildQueue, DocBuilder, Metrics,
3-
Storage,
2+
db::Pool, docbuilder::RustwideBuilder, utils::pubsubhubbub, BuildQueue, Config, DocBuilder,
3+
Metrics, Storage,
44
};
55
use failure::Error;
66
use log::{debug, error, info, warn};
@@ -12,6 +12,7 @@ use std::time::Duration;
1212
// TODO: change to `fn() -> Result<!, Error>` when never _finally_ stabilizes
1313
pub fn queue_builder(
1414
mut doc_builder: DocBuilder,
15+
config: Arc<Config>,
1516
db: Pool,
1617
build_queue: Arc<BuildQueue>,
1718
metrics: Arc<Metrics>,
@@ -30,7 +31,7 @@ pub fn queue_builder(
3031
QueueInProgress(usize),
3132
}
3233

33-
let mut builder = RustwideBuilder::init(db, metrics, storage)?;
34+
let mut builder = RustwideBuilder::init(config, db, metrics, storage)?;
3435

3536
let mut status = BuilderState::Fresh;
3637

0 commit comments

Comments
 (0)