@@ -3,15 +3,10 @@ ARG RUST_NIGHTLY_VERSION=nightly-2024-11-29
3
3
ARG RUSTFLAGS="-Z share-generics=y -Z threads=8"
4
4
ARG CARGO_HOME=/usr/local/cargo
5
5
6
- # Use Ubuntu as base image
7
- FROM ubuntu:22.04 AS packages
8
-
9
- # Prevent apt from prompting for user input
10
- ENV DEBIAN_FRONTEND=noninteractive
11
-
12
6
# Install essential build packages
13
- FROM ubuntu:22 .04 AS packages
7
+ FROM ubuntu:24 .04 AS packages
14
8
ENV DEBIAN_FRONTEND=noninteractive
9
+
15
10
RUN apt-get update && \
16
11
apt-get install -y \
17
12
curl \
@@ -39,16 +34,30 @@ RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain ${RUST_NIGH
39
34
$CARGO_HOME/bin/rustc --version
40
35
ENV PATH="${CARGO_HOME}/bin:${PATH}"
41
36
WORKDIR /app
37
+
38
+ RUN cargo install cargo-machete cargo-nextest
39
+
42
40
COPY . .
43
41
44
42
RUN --mount=type=cache,target=${CARGO_HOME}/registry \
45
43
--mount=type=cache,target=${CARGO_HOME}/git \
46
44
--mount=type=cache,target=/app/target \
47
45
cargo fetch
48
46
47
+ # CI stage for checks
48
+ FROM builder-base AS ci
49
+
50
+ RUN --mount=type=cache,target=${CARGO_HOME}/registry \
51
+ --mount=type=cache,target=${CARGO_HOME}/git \
52
+ --mount=type=cache,target=/app/target \
53
+ cargo machete && \
54
+ cargo fmt --all -- --check && \
55
+ cargo clippy --workspace --benches --tests --examples --all-features -- -D warnings && \
56
+ cargo nextest run --all-features --workspace --locked
57
+
49
58
# Release builder
50
59
FROM builder-base AS build-release
51
- ARG CARGO_HOME
60
+
52
61
RUN --mount=type=cache,target=${CARGO_HOME}/registry \
53
62
--mount=type=cache,target=${CARGO_HOME}/git \
54
63
--mount=type=cache,target=/app/target \
@@ -58,7 +67,7 @@ RUN --mount=type=cache,target=${CARGO_HOME}/registry \
58
67
cp target/release-full/tag /app/build/
59
68
60
69
# Runtime base image
61
- FROM ubuntu:22 .04 AS runtime-base
70
+ FROM ubuntu:24 .04 AS runtime-base
62
71
RUN apt-get update && \
63
72
apt-get install -y \
64
73
libssl3 \
0 commit comments