|
1 |
| -FROM rust:1.86.0@sha256:300ec56abce8cc9448ddea2172747d048ed902a3090e6b57babb2bf19f754081 AS builder |
2 |
| - |
3 |
| -## Update the system generally |
4 |
| -RUN apt-get update && \ |
5 |
| - apt-get upgrade -y && \ |
6 |
| - rm -rf /var/lib/apt/lists/* |
7 |
| - |
8 |
| -WORKDIR /root/app |
9 |
| - |
10 |
| -## Build deps for git-mit |
11 |
| -RUN apt-get update && \ |
12 |
| - apt-get install -y libxkbcommon-dev libxcb-shape0-dev libxcb-xfixes0-dev help2man && \ |
13 |
| - rm -rf /var/lib/apt/lists/* |
| 1 | +# syntax=docker/dockerfile:1.4 |
| 2 | +ARG RUST_VERSION=1.86.0 |
14 | 3 |
|
| 4 | +FROM rust:${RUST_VERSION} AS planner |
| 5 | +WORKDIR /app |
| 6 | +RUN cargo install cargo-chef |
15 | 7 | COPY . .
|
| 8 | +RUN cargo chef prepare --recipe-path recipe.json |
16 | 9 |
|
17 |
| -RUN --mount=type=cache,target=/root/.cargo cargo clean |
18 |
| -RUN --mount=type=cache,target=/root/.cargo cargo build --release |
19 |
| -RUN help2man target/release/mit-commit-msg > target/mit-commit-msg.1 |
20 |
| -RUN help2man target/release/mit-pre-commit > target/mit-pre-commit.1 |
21 |
| -RUN help2man target/release/mit-prepare-commit-msg > target/mit-prepare-commit-msg.1 |
22 |
| -RUN help2man target/release/git-mit > target/git-mit.1 |
23 |
| -RUN help2man target/release/git-mit-config > target/git-mit-config.1 |
24 |
| -RUN help2man target/release/git-mit-relates-to > target/git-mit-relates-to.1 |
25 |
| -RUN help2man target/release/git-mit-install > target/git-mit-install.1 |
26 |
| - |
27 |
| -FROM rust:1.86.0@sha256:300ec56abce8cc9448ddea2172747d048ed902a3090e6b57babb2bf19f754081 |
28 |
| -ENV DEBIAN_FRONTEND=noninteractive |
29 |
| - |
30 |
| -## Update the system generally |
31 |
| -RUN apt-get update && \ |
32 |
| - apt-get upgrade -y && \ |
33 |
| - rm -rf /var/lib/apt/lists/* |
34 |
| - |
35 |
| -### Nice things for actually using the tool |
36 |
| -## Bash |
37 |
| -RUN apt-get update && \ |
38 |
| - apt-get install -y bash bash-completion && \ |
39 |
| - rm -rf /var/lib/apt/lists/* |
40 |
| - |
41 |
| -## Git |
42 |
| -RUN apt-get update && \ |
43 |
| - apt-get install -y git && \ |
44 |
| - rm -rf /var/lib/apt/lists/* |
| 10 | +FROM rust:${RUST_VERSION} AS cacher |
| 11 | +WORKDIR /app |
| 12 | +RUN cargo install cargo-chef |
| 13 | +COPY --from=planner /app/recipe.json recipe.json |
| 14 | +RUN cargo chef cook --release --recipe-path recipe.json |
45 | 15 |
|
46 |
| -## Vim |
| 16 | +FROM rust:${RUST_VERSION} AS builder |
| 17 | +WORKDIR /app |
| 18 | +COPY . . |
| 19 | +COPY --from=cacher /app/target target |
| 20 | +COPY --from=cacher /usr/local/cargo /usr/local/cargo |
47 | 21 | RUN apt-get update && \
|
48 |
| - apt-get install -y vim && \ |
| 22 | + apt-get install -y help2man && \ |
49 | 23 | rm -rf /var/lib/apt/lists/*
|
| 24 | +RUN --mount=type=cache,target=/app/target \ |
| 25 | + --mount=type=cache,target=/usr/local/cargo/registry \ |
| 26 | + cargo build --release && \ |
| 27 | + for bin in mit-commit-msg mit-pre-commit mit-prepare-commit-msg git-mit git-mit-config git-mit-relates-to git-mit-install; do \ |
| 28 | + help2man target/release/$bin > target/$bin.1; \ |
| 29 | + done |
50 | 30 |
|
51 |
| -## Man |
52 |
| -RUN apt-get update && \ |
53 |
| - apt-get install -y man && \ |
54 |
| - rm -rf /var/lib/apt/lists/* |
| 31 | +FROM debian:bookworm-slim |
| 32 | +ENV DEBIAN_FRONTEND=noninteractive |
55 | 33 |
|
56 |
| -### The Tool |
57 |
| -## Runtime deps for git-mit |
58 | 34 | RUN apt-get update && \
|
59 |
| - apt-get install -y libxkbcommon0 libxcb-shape0 libxcb-xfixes0 libssl3 libgcc1 && \ |
60 |
| - rm -rf /var/lib/apt/lists/* |
61 |
| - |
62 |
| -COPY --from=builder \ |
63 |
| - /root/app/target/release/mit-commit-msg \ |
64 |
| - /usr/local/bin/mit-commit-msg |
65 |
| -COPY --from=builder \ |
66 |
| - /root/app/target/release/mit-pre-commit \ |
67 |
| - /usr/local/bin/mit-pre-commit |
68 |
| -COPY --from=builder \ |
69 |
| - /root/app/target/release/mit-prepare-commit-msg \ |
70 |
| - /usr/local/bin/mit-prepare-commit-msg |
71 |
| -COPY --from=builder \ |
72 |
| - /root/app/target/release/git-mit \ |
73 |
| - /usr/local/bin/git-mit |
74 |
| -COPY --from=builder \ |
75 |
| - /root/app/target/release/git-mit-config \ |
76 |
| - /usr/local/bin/git-mit-config |
77 |
| -COPY --from=builder \ |
78 |
| - /root/app/target/release/git-mit-relates-to \ |
79 |
| - /usr/local/bin/git-mit-relates-to |
80 |
| -COPY --from=builder \ |
81 |
| - /root/app/target/release/git-mit-install \ |
82 |
| - /usr/local/bin/git-mit-install |
83 |
| -COPY --from=builder \ |
84 |
| - /root/app/target/*.1 \ |
85 |
| - /usr/local/share/man/man1/ |
| 35 | + apt-get install -y --no-install-recommends \ |
| 36 | + libssl3 \ |
| 37 | + ca-certificates \ |
| 38 | + git \ |
| 39 | + bash \ |
| 40 | + bash-completion \ |
| 41 | + man \ |
| 42 | + && rm -rf /var/lib/apt/lists/* |
86 | 43 |
|
87 |
| -RUN mkdir -p $HOME/.local/share/bash-completion/completions |
88 |
| -RUN mit-commit-msg --completion bash > $HOME/.local/share/bash-completion/completions/mit-commit-msg |
89 |
| -RUN mit-pre-commit --completion bash > $HOME/.local/share/bash-completion/completions/mit-pre-commit |
90 |
| -RUN mit-prepare-commit-msg --completion bash > $HOME/.local/share/bash-completion/completions/mit-prepare-commit-msg |
91 |
| -RUN git-mit --completion bash > $HOME/.local/share/bash-completion/completions/git-mit |
92 |
| -RUN git-mit-config --completion bash > $HOME/.local/share/bash-completion/completions/git-mit-config |
93 |
| -RUN git-mit-relates-to --completion bash > $HOME/.local/share/bash-completion/completions/git-mit-relates-to |
94 |
| -RUN git-mit-install --completion bash > $HOME/.local/share/bash-completion/completions/git-mit-install |
| 44 | +COPY --from=builder /app/target/release/* /usr/local/bin/ |
| 45 | +COPY --from=builder /app/target/*.1 /usr/local/share/man/man1/ |
95 | 46 |
|
96 |
| -RUN git-mit-install --scope=global |
| 47 | +RUN mkdir -p /usr/share/bash-completion/completions && \ |
| 48 | + for bin in mit-commit-msg mit-pre-commit mit-prepare-commit-msg git-mit git-mit-config git-mit-relates-to git-mit-install; do \ |
| 49 | + $bin --completion bash > /usr/share/bash-completion/completions/$bin; \ |
| 50 | + done && \ |
| 51 | + git-mit-install --scope=global |
97 | 52 |
|
0 commit comments