@@ -10,23 +10,21 @@ use crate::error::Result;
10
10
use crate :: index:: api:: ReleaseData ;
11
11
use crate :: storage:: CompressionAlgorithms ;
12
12
use crate :: utils:: { copy_doc_dir, parse_rustc_version, CargoMetadata } ;
13
- use crate :: { Metrics , Storage } ;
13
+ use crate :: { Config , Metrics , Storage } ;
14
14
use docsrs_metadata:: { Metadata , DEFAULT_TARGETS , HOST_TARGET } ;
15
15
use failure:: ResultExt ;
16
16
use log:: { debug, info, warn, LevelFilter } ;
17
17
use postgres:: Client ;
18
- use rustwide:: cmd:: { Command , SandboxBuilder } ;
18
+ use rustwide:: cmd:: { Command , SandboxBuilder , SandboxImage } ;
19
19
use rustwide:: logging:: { self , LogStorage } ;
20
20
use rustwide:: toolchain:: ToolchainError ;
21
21
use rustwide:: { Build , Crate , Toolchain , Workspace , WorkspaceBuilder } ;
22
22
use serde_json:: Value ;
23
- use std:: borrow:: Cow ;
24
23
use std:: collections:: { HashMap , HashSet } ;
25
24
use std:: path:: Path ;
26
25
use std:: sync:: Arc ;
27
26
28
27
const USER_AGENT : & str = "docs.rs builder (https://github.com/rust-lang/docs.rs)" ;
29
- const DEFAULT_RUSTWIDE_WORKSPACE : & str = ".rustwide" ;
30
28
const ESSENTIAL_FILES_VERSIONED : & [ & str ] = & [
31
29
"brush.svg" ,
32
30
"wheel.svg" ,
@@ -61,59 +59,45 @@ const DUMMY_CRATE_VERSION: &str = "1.0.0";
61
59
pub struct RustwideBuilder {
62
60
workspace : Workspace ,
63
61
toolchain : Toolchain ,
62
+ config : Arc < Config > ,
64
63
db : Pool ,
65
64
storage : Arc < Storage > ,
66
65
metrics : Arc < Metrics > ,
67
66
rustc_version : String ,
68
- cpu_limit : Option < u32 > ,
69
67
}
70
68
71
69
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 {
85
79
builder = builder. sandbox_image ( SandboxImage :: local ( & custom_image) ?) ;
86
80
}
87
81
88
82
let workspace = builder. init ( ) ?;
89
83
workspace. purge_all_build_dirs ( ) ?;
90
84
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 ) ;
102
86
103
87
Ok ( RustwideBuilder {
104
88
workspace,
105
89
toolchain,
90
+ config,
106
91
db,
107
92
storage,
108
93
metrics,
109
94
rustc_version : String :: new ( ) ,
110
- cpu_limit,
111
95
} )
112
96
}
113
97
114
98
fn prepare_sandbox ( & self , limits : & Limits ) -> SandboxBuilder {
115
99
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 ) )
117
101
. memory_limit ( Some ( limits. memory ( ) ) )
118
102
. enable_networking ( limits. networking ( ) )
119
103
}
@@ -588,7 +572,7 @@ impl RustwideBuilder {
588
572
let mut cargo_args = metadata. cargo_args ( ) ;
589
573
590
574
// 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 {
592
576
cargo_args. push ( format ! ( "-j{}" , cpu_limit) ) ;
593
577
}
594
578
if target != HOST_TARGET {
0 commit comments