Skip to content

Commit 90c80e0

Browse files
committed
Auto merge of #38708 - alexcrichton:add-distcheck, r=brson
Gate on distcheck on Travis This commit adds a new entry to the Travis matrix to gate on distcheck, the illustrious test process that has historically taken *8 hours* to complete and also breaks all the time on nightly. By adding it to Travis we should hope to never see nightly breakage (like #38690) because of this ever again! "But wait, surely we can't wait 8 hours for all PRs!" you might be thinking, and you are indeed correct. The distcheck added here is much more optimized for speed than the old buildbot instances for a number of reasons: * We're not building *two host compilers* beforehand. The current distcheck bot does a cross for i686 Linux and x86_64 Linux before it actually runs distcheck, building 6 compilers and LLVM twice. None of this is done in parallel as well (e.g. `-j1`). Not doing any of this work will be a huge win! * We're using sccache to compile LLVM, so it should be much faster. Distcheck on the bots didn't cache LLVM well and rebuilt it every time. All in all, this version of "distcheck" should be exactly like other matrix entries that run tests except that it's a *little* slower to start as it has to create the source tarball then rebuild the build system in the distcheck dir. Overall this should be well under the 2 hours that Android is currently taking anyway. Closes #38691
2 parents 38bd207 + 4781eb3 commit 90c80e0

File tree

7 files changed

+52
-7
lines changed

7 files changed

+52
-7
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ matrix:
2626
- env: IMAGE=x86_64-gnu-make
2727
- env: IMAGE=x86_64-gnu-llvm-3.7 ALLOW_PR=1 RUST_BACKTRACE=1
2828
- env: IMAGE=x86_64-musl
29+
- env: IMAGE=x86_64-gnu-distcheck
2930

3031
# OSX builders
3132
- env: >

src/bootstrap/check.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,7 @@ pub fn distcheck(build: &Build) {
562562
.current_dir(&dir);
563563
build.run(&mut cmd);
564564
build.run(Command::new("./configure")
565+
.args(&build.config.configure_args)
565566
.current_dir(&dir));
566567
build.run(Command::new(build_helper::make(&build.config.build))
567568
.arg("check")

src/bootstrap/config.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ pub struct Config {
9494
pub nodejs: Option<PathBuf>,
9595
pub gdb: Option<PathBuf>,
9696
pub python: Option<PathBuf>,
97+
pub configure_args: Vec<String>,
9798
}
9899

99100
/// Per-target configuration stored in the global configuration structure.
@@ -519,6 +520,11 @@ impl Config {
519520
"CFG_ENABLE_SCCACHE" if value == "1" => {
520521
self.ccache = Some("sccache".to_string());
521522
}
523+
"CFG_CONFIGURE_ARGS" if value.len() > 0 => {
524+
self.configure_args = value.split_whitespace()
525+
.map(|s| s.to_string())
526+
.collect();
527+
}
522528
_ => {}
523529
}
524530
}

src/bootstrap/dist.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,13 @@ pub fn rust_src(build: &Build, host: &str) {
397397
}
398398
}
399399

400+
// If we're inside the vendor directory then we need to preserve
401+
// everything as Cargo's vendoring support tracks all checksums and we
402+
// want to be sure we don't accidentally leave out a file.
403+
if spath.contains("vendor") {
404+
return true
405+
}
406+
400407
let excludes = [
401408
"CVS", "RCS", "SCCS", ".git", ".gitignore", ".gitmodules",
402409
".gitattributes", ".cvsignore", ".svn", ".arch-ids", "{arch}",

src/bootstrap/util.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ pub fn cp_r(src: &Path, dst: &Path) {
7676
/// Copies the `src` directory recursively to `dst`. Both are assumed to exist
7777
/// when this function is called. Unwanted files or directories can be skipped
7878
/// by returning `false` from the filter function.
79-
pub fn cp_filtered<F: Fn(&Path) -> bool>(src: &Path, dst: &Path, filter: &F) {
79+
pub fn cp_filtered(src: &Path, dst: &Path, filter: &Fn(&Path) -> bool) {
8080
// Inner function does the actual work
81-
fn recurse<F: Fn(&Path) -> bool>(src: &Path, dst: &Path, relative: &Path, filter: &F) {
81+
fn recurse(src: &Path, dst: &Path, relative: &Path, filter: &Fn(&Path) -> bool) {
8282
for f in t!(fs::read_dir(src)) {
8383
let f = t!(f);
8484
let path = f.path();
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM ubuntu:16.04
2+
3+
RUN apt-get update && apt-get install -y --no-install-recommends \
4+
g++ \
5+
make \
6+
file \
7+
curl \
8+
ca-certificates \
9+
python2.7 \
10+
git \
11+
cmake \
12+
sudo \
13+
gdb \
14+
xz-utils
15+
16+
ENV SCCACHE_DIGEST=7237e38e029342fa27b7ac25412cb9d52554008b12389727320bd533fd7f05b6a96d55485f305caf95e5c8f5f97c3313e10012ccad3e752aba2518f3522ba783
17+
RUN curl -L https://api.pub.build.mozilla.org/tooltool/sha512/$SCCACHE_DIGEST | \
18+
tar xJf - -C /usr/local/bin --strip-components=1
19+
20+
RUN curl -OL https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
21+
dpkg -i dumb-init_*.deb && \
22+
rm dumb-init_*.deb
23+
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
24+
25+
ENV RUST_CONFIGURE_ARGS --build=x86_64-unknown-linux-gnu
26+
ENV XPY_RUN test distcheck

src/ci/run.sh

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,14 @@ else
4343
ncpus=$(nproc)
4444
fi
4545

46-
make -j $ncpus tidy
47-
make -j $ncpus
48-
if [ ! -z "$XPY_CHECK" ]; then
49-
exec python2.7 $SRC/x.py $XPY_CHECK
46+
if [ ! -z "$XPY_RUN" ]; then
47+
exec python2.7 $SRC/x.py $XPY_RUN
5048
else
51-
exec make $RUST_CHECK_TARGET -j $ncpus
49+
make -j $ncpus tidy
50+
make -j $ncpus
51+
if [ ! -z "$XPY_CHECK" ]; then
52+
exec python2.7 $SRC/x.py $XPY_CHECK
53+
else
54+
exec make $RUST_CHECK_TARGET -j $ncpus
55+
fi
5256
fi

0 commit comments

Comments
 (0)