# syntax = docker/dockerfile:1.2FROM rust:1.81-bookworm as builderWORKDIR appCOPY . .# Replace the Cargo configuration with the one used by collab.COPY ./.cargo/collab-config.toml ./.cargo/config.toml# Compile collab serverARG CARGO_PROFILE_RELEASE_PANIC=abortARG GITHUB_SHAENV GITHUB_SHA=$GITHUB_SHA# At some point in the past 3 weeks, additional dependencies on `xkbcommon` and# `xkbcommon-x11` were introduced into collab.## A `git bisect` points to this commit as being the culprit: `b8e6098f60e5dabe98fe8281f993858dacc04a55`.## Now when we try to build collab for the Docker image, it fails with the following# error:## ```# 985.3 = note: /usr/bin/ld: cannot find -lxkbcommon: No such file or directory# 985.3 /usr/bin/ld: cannot find -lxkbcommon-x11: No such file or directory# 985.3 collect2: error: ld returned 1 exit status# ```## The last successful deploys were at:# - Staging: `4f408ec65a3867278322a189b4eb20f1ab51f508`# - Production: `fc4c533d0a8c489e5636a4249d2b52a80039fbd7`## Installing these as a temporary workaround, but I think ideally we'd want to figure# out what caused them to be included in the first place.RUN apt-get update; \ apt-get install -y --no-install-recommends libxkbcommon-dev libxkbcommon-x11-devRUN --mount=type=cache,target=./script/node_modules \ --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/usr/local/cargo/git \ --mount=type=cache,target=./target \ cargo build --release --package collab --bin collab# Copy collab server binary out of cached directoryRUN --mount=type=cache,target=./target \ cp /app/target/release/collab /app/collab# Copy collab server binary to the runtime imageFROM debian:bookworm-slim as runtimeRUN apt-get update; \ apt-get install -y --no-install-recommends libcurl4-openssl-dev ca-certificates \ linux-perf binutilsWORKDIR appCOPY --from=builder /app/collab /app/collabCOPY --from=builder /app/crates/collab/migrations /app/migrationsCOPY --from=builder /app/crates/collab/migrations_llm /app/migrations_llmENV MIGRATIONS_PATH=/app/migrationsENV LLM_DATABASE_MIGRATIONS_PATH=/app/migrations_llmENTRYPOINT ["/app/collab"]
# syntax = docker/dockerfile:1.2
FROM rust:1.81-bookworm as builder
WORKDIR app
COPY . .
# Replace the Cargo configuration with the one used by collab.
COPY ./.cargo/collab-config.toml ./.cargo/config.toml
# Compile collab server
ARG CARGO_PROFILE_RELEASE_PANIC=abort
ARG GITHUB_SHA
ENV GITHUB_SHA=$GITHUB_SHA
# At some point in the past 3 weeks, additional dependencies on `xkbcommon` and
# `xkbcommon-x11` were introduced into collab.
#
# A `git bisect` points to this commit as being the culprit: `b8e6098f60e5dabe98fe8281f993858dacc04a55`.
#
# Now when we try to build collab for the Docker image, it fails with the following
# error:
#
# ```
# 985.3 = note: /usr/bin/ld: cannot find -lxkbcommon: No such file or directory
# 985.3 /usr/bin/ld: cannot find -lxkbcommon-x11: No such file or directory
# 985.3 collect2: error: ld returned 1 exit status
# ```
#
# The last successful deploys were at:
# - Staging: `4f408ec65a3867278322a189b4eb20f1ab51f508`
# - Production: `fc4c533d0a8c489e5636a4249d2b52a80039fbd7`
#
# Installing these as a temporary workaround, but I think ideally we'd want to figure
# out what caused them to be included in the first place.
RUN apt-get update; \
apt-get install -y --no-install-recommends libxkbcommon-dev libxkbcommon-x11-dev
RUN --mount=type=cache,target=./script/node_modules \
--mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=./target \
cargo build --release --package collab --bin collab
# Copy collab server binary out of cached directory
RUN --mount=type=cache,target=./target \
cp /app/target/release/collab /app/collab
# Copy collab server binary to the runtime image
FROM debian:bookworm-slim as runtime
RUN apt-get update; \
apt-get install -y --no-install-recommends libcurl4-openssl-dev ca-certificates \
linux-perf binutils
WORKDIR app
COPY --from=builder /app/collab /app/collab
COPY --from=builder /app/crates/collab/migrations /app/migrations
COPY --from=builder /app/crates/collab/migrations_llm /app/migrations_llm
ENV MIGRATIONS_PATH=/app/migrations
ENV LLM_DATABASE_MIGRATIONS_PATH=/app/migrations_llm
ENTRYPOINT ["/app/collab"]