-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
99 lines (82 loc) · 2.93 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
FROM debian:stable-slim AS build-baseline
RUN apt-get update
ENV LANG=C.UTF-8
RUN apt-get install -y \
build-essential \
curl \
git \
libssl-dev \
pkg-config \
sqlite3
# Set up the base user.
RUN \
groupadd -g 1000 llvmbb_monitor && \
useradd -u 1000 -g 1000 llvmbb_monitor -s /bin/bash -d /home/llvmbb_monitor && \
mkdir /home/llvmbb_monitor && \
chown llvmbb_monitor:llvmbb_monitor /home/llvmbb_monitor
USER 1000:1000
WORKDIR /home/llvmbb_monitor
# Now set rustup up.
COPY --chmod=555 docker/setup_rustup.sh .
RUN ./setup_rustup.sh
ENV PATH="$PATH:/home/llvmbb_monitor/.cargo/bin"
# Set up a baseline build so any non-dependency-touching changes to src/ and
# such do incremental builds.
# TODO: Is the `cargo vendor` necessary? Feels bad to use it to just populate
# .cargo's cache.
COPY --chown=llvmbb_monitor:llvmbb_monitor Cargo.lock Cargo.toml code/
COPY --chown=llvmbb_monitor:llvmbb_monitor calendar_check/Cargo.toml code/calendar_check/Cargo.toml
COPY --chown=llvmbb_monitor:llvmbb_monitor llvm_buildbot_monitor/Cargo.toml code/llvm_buildbot_monitor/Cargo.toml
RUN \
mkdir -p code/calendar_check/src && \
mkdir -p code/llvm_buildbot_monitor/src && \
cd code && \
echo 'fn main() {}' > calendar_check/src/main.rs && \
echo 'fn main() {}' > llvm_buildbot_monitor/src/main.rs && \
cargo vendor && \
rm -rf vendor
# Test container
FROM build-baseline AS test-container
# `cargo clean` is needed since otherwise Cargo might not rebuild things
# properly.
RUN \
cd code && \
cargo build --offline --locked && \
cargo clean
# Bring in sources & test go brrr.
COPY --chown=llvmbb_monitor:llvmbb_monitor llvm_buildbot_monitor .git/ code/
RUN cd code && cargo test
# Release build container.
FROM build-baseline AS build
# `cargo clean` is needed since otherwise Cargo might not rebuild things
# properly.
RUN \
cd code && \
cargo build --release --offline --locked && \
cargo clean -r -p calendar_check && \
cargo clean -r -p llvm_buildbot_monitor
# Bring in sources & test go brrr.
COPY --chown=llvmbb_monitor:llvmbb_monitor calendar_check/ code/calendar_check/
COPY --chown=llvmbb_monitor:llvmbb_monitor llvm_buildbot_monitor/ code/llvm_buildbot_monitor/
COPY --chown=llvmbb_monitor:llvmbb_monitor .git/ code/.git
RUN cd code && cargo build --release --workspace
# Now build the actual image.
FROM debian:stable-slim
RUN apt-get update
ENV LANG=C.UTF-8
RUN apt-get install -y \
ca-certificates \
libssl-dev \
sqlite3
RUN \
groupadd -g 1000 llvmbb_monitor && \
useradd -u 1000 -g 1000 llvmbb_monitor -s /bin/bash -d /home/llvmbb_monitor && \
mkdir -p /home/llvmbb_monitor/llvm_buildbot_monitor /db && \
chown -R llvmbb_monitor:llvmbb_monitor /home/llvmbb_monitor /db
USER 1000:1000
WORKDIR /home/llvmbb_monitor
COPY --chmod=555 docker/run_buildbot_monitor.sh .
COPY --from=build \
/home/llvmbb_monitor/code/target/release/llvm_buildbot_monitor \
llvm_buildbot_monitor/
CMD ["bash", "-eu", "run_buildbot_monitor.sh"]