From f25d38eedb41395957823fbd779ce818222415df Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Tue, 26 Mar 2024 14:25:52 +0100 Subject: [PATCH 1/5] Add scss to editorconfig --- .editorconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 1a78f9c75..da7d8221e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,6 @@ root = true -[*.{rs,html,js,json}] +[*.{rs,html,js,json,scss}] end_of_line = lf charset = utf-8 trim_trailing_whitespace = true From e3f8938bf663da61776972d9e14db063b4ca65cc Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Mon, 25 Mar 2024 21:04:47 +0100 Subject: [PATCH 2/5] Bind static files into docker container --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index ce503de9c..790ea6140 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,7 @@ services: - "/var/run/docker.sock:/var/run/docker.sock" - ".rustwide-docker:/opt/docsrs/rustwide" - "cratesio-index:/opt/docsrs/prefix/crates.io-index" + - "./static:/opt/docsrs/static:ro" environment: DOCSRS_RUSTWIDE_WORKSPACE: /opt/docsrs/rustwide DOCSRS_DATABASE_URL: postgresql://cratesfyi:password@db From 7f94ff7697568ed69c4414e3a24756adba323a5b Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Tue, 26 Mar 2024 14:31:15 +0100 Subject: [PATCH 3/5] Optimize and reduce debuginfo of dependencies in debug builds Unless you're doing clean builds all the time, having optimized dependencies and reducing the debuginfo generated for them is faster because it makes the linker do less work. Bump cache key because this replaces all cached dependencies --- .github/workflows/ci.yml | 2 +- Cargo.toml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae72d5dbd..5451433d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ on: env: RUST_BACKTRACE: 1 - RUST_CACHE_KEY: rust-cache-20240320 + RUST_CACHE_KEY: rust-cache-20240327 DOCSRS_PREFIX: ignored/cratesfyi-prefix DOCSRS_DATABASE_URL: postgresql://cratesfyi:password@localhost:15432 DOCSRS_LOG: docs_rs=debug,rustwide=info diff --git a/Cargo.toml b/Cargo.toml index 08500bd24..6484f147c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -132,8 +132,9 @@ aws-smithy-runtime = {version = "1.0.1", features = ["client", "test-util"]} aws-smithy-http = "0.60.0" indoc = "2.0.0" -[profile.dev.package.sqlx-macros] +[profile.dev.package."*"] opt-level = 2 +debug = "line-tables-only" [build-dependencies] time = "0.3" From 20a07b8c7b8b1072e2c8bdfe94d4aff8a3339fb2 Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Tue, 26 Mar 2024 14:57:52 +0100 Subject: [PATCH 4/5] Build docker image in dev profile for docker-compose This improves turnaround speed when locally testing changes that require rebuilding the docker image. --- docker-compose.yml | 3 +++ dockerfiles/Dockerfile | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 790ea6140..6bad85bf3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,9 @@ services: build: context: . dockerfile: ./dockerfiles/Dockerfile + args: + PROFILE: dev + PROFILE_DIR: debug platform: "linux/amd64" depends_on: - db diff --git a/dockerfiles/Dockerfile b/dockerfiles/Dockerfile index 2ece0578d..dba85344b 100644 --- a/dockerfiles/Dockerfile +++ b/dockerfiles/Dockerfile @@ -36,7 +36,9 @@ RUN mkdir -p src/bin && \ echo "fn main() {}" > build.rs RUN cargo fetch -RUN cargo build --release + +ARG PROFILE=release +RUN cargo build --profile=$PROFILE # Dependencies are now cached, copy the actual source code and do another full # build. The touch on all the .rs files is needed, otherwise cargo assumes the @@ -54,7 +56,7 @@ COPY assets assets/ COPY .sqlx .sqlx/ COPY migrations migrations/ -RUN cargo build --release +RUN cargo build --profile=$PROFILE ###################### # Web server stage # @@ -69,7 +71,8 @@ RUN apt-get update \ tini \ && rm -rf /var/lib/apt/lists/* -COPY --from=build /build/target/release/cratesfyi /usr/local/bin +ARG PROFILE_DIR=release +COPY --from=build /build/target/$PROFILE_DIR/cratesfyi /usr/local/bin COPY static /srv/docsrs/static COPY templates /srv/docsrs/templates COPY vendor /srv/docsrs/vendor @@ -96,7 +99,8 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ RUN mkdir -p /opt/docsrs/prefix -COPY --from=build /build/target/release/cratesfyi /usr/local/bin +ARG PROFILE_DIR=release +COPY --from=build /build/target/$PROFILE_DIR/cratesfyi /usr/local/bin COPY static /opt/docsrs/static COPY templates /opt/docsrs/templates COPY dockerfiles/entrypoint.sh /opt/docsrs/ From 257b92fa17b77e610301e7da655ee88adcc0839a Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Tue, 26 Mar 2024 14:59:12 +0100 Subject: [PATCH 5/5] Use mold for faster linking in docker build --- dockerfiles/Dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dockerfiles/Dockerfile b/dockerfiles/Dockerfile index dba85344b..f9ec2c4ad 100644 --- a/dockerfiles/Dockerfile +++ b/dockerfiles/Dockerfile @@ -14,7 +14,7 @@ FROM ubuntu:22.04 AS build # Install packaged dependencies RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ build-essential git curl cmake gcc g++ pkg-config libmagic-dev \ - libssl-dev zlib1g-dev ca-certificates + libssl-dev zlib1g-dev ca-certificates mold clang # Install the stable toolchain with rustup RUN curl https://sh.rustup.rs >/tmp/rustup-init && \ @@ -22,6 +22,11 @@ RUN curl https://sh.rustup.rs >/tmp/rustup-init && \ /tmp/rustup-init -y --no-modify-path --default-toolchain stable --profile minimal ENV PATH=/root/.cargo/bin:$PATH +# Configure linking to use mold instead for speed (need to use clang because gcc +# is too old on this image) +ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang +ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS=-Clink-arg=-fuse-ld=mold + # Build the dependencies in a separate step to avoid rebuilding all of them # every time the source code changes. This takes advantage of Docker's layer # caching, and it works by copying the Cargo.{toml,lock} with dummy source code