Skip to content

Conversation

@Chiamaka489
Copy link

Changes

  • Implemented 3-stage Docker build process with proper layer caching
  • Created custom workspace configuration to exclude unnecessary crates
  • Added Cargo dependency caching in GitHub workflows
  • Optimized Docker layer handling with Buildx
  • Consolidated test steps to reduce redundant setup/teardown cycles

Results

  • Build time reduced from 60+ minutes to ~33 minutes (45% faster)
  • Smaller image size with optimized layers
  • More reliable CI builds with proper caching
  • Faster development feedback loop

These optimizations make our CI pipelines more efficient and reduce resource usage while maintaining full functionality.

Closed: #383

Evidence:

PS E:\Chiamaka\stakgraph> docker buildx build -t stakgraph-standalone:local -f Dockerfile.standalone .
[+] Building 2218.4s (33/33) FINISHED                                                                 docker:desktop-linux
 => [internal] load build definition from Dockerfile.standalone                                                       0.0s
 => => transferring dockerfile: 2.00kB                                                                                0.0s 
 => [internal] load metadata for docker.io/sphinxlightning/stakgraph-lsp:latest                                       1.1s 
 => [internal] load metadata for docker.io/library/rust:1.87.0                                                        1.0s 
 => [internal] load .dockerignore                                                                                     0.1s
 => => transferring context: 2B                                                                                       0.0s 
 => [planner 1/8] FROM docker.io/library/rust:1.87.0@sha256:251cec8da4689d180f124ef00024c2f83f79d9bf984e43c180a59811  0.1s
 => => resolve docker.io/library/rust:1.87.0@sha256:251cec8da4689d180f124ef00024c2f83f79d9bf984e43c180a598119e326b84  0.1s 
 => [stage-3 1/4] FROM docker.io/sphinxlightning/stakgraph-lsp:latest@sha256:f90e920c49f6b2f9e7efa6fe170701e49f3fe  906.9s
 => => resolve docker.io/sphinxlightning/stakgraph-lsp:latest@sha256:f90e920c49f6b2f9e7efa6fe170701e49f3fe1206c22977  0.1s 
 => => sha256:d000740f2c92e077ec603bdfba8200d15a51df1dc4cde313353896bddf408aef 11.64MB / 11.64MB                     84.4s 
 => => sha256:698f65a773846a95fa2910847f8102ccac15168985320515e0ac0d7e5811273b 32.19MB / 32.19MB                    148.1s 
 => => sha256:56befdd1a6e96c8742a3015decc89bea5494fc922210a62daa290326e57e6884 103.99MB / 103.99MB                  150.7s
 => => sha256:f310f0750a04b575b66f53aeb0d5796651247691d1e0d1533c00abfd48ac10ae 74.01MB / 74.01MB                    206.1s 
 => => sha256:196b6306eb275c624d026983b3a441fd42ead1444a9f110151f011e6fa98ce83 11.21MB / 11.21MB                     39.2s 
 => => sha256:011d05d23cfdbef43633425b360772681a82dc7760e5c23122fe5a42b2b24650 4.06MB / 4.06MB                       20.9s 
 => => sha256:923357d787e15af5769bb80ab37ca9b7677d763c23ba7e16ff0311f49be89daa 283.03MB / 283.03MB                  581.0s 
 => => sha256:155ad54a8b2812a0ec559ff82c0c6f0f0dddb337a226b11879f09e15f67b69fc 48.48MB / 48.48MB                    414.4s 
 => => sha256:96fbbc01914f347b3accb6b783403134ffb3c434059a7cf33ddc4f1a78c293ea 423.18MB / 423.18MB                  452.6s 
 => => extracting sha256:155ad54a8b2812a0ec559ff82c0c6f0f0dddb337a226b11879f09e15f67b69fc                            10.8s 
 => => extracting sha256:96fbbc01914f347b3accb6b783403134ffb3c434059a7cf33ddc4f1a78c293ea                           165.9s
 => => extracting sha256:923357d787e15af5769bb80ab37ca9b7677d763c23ba7e16ff0311f49be89daa                            67.6s
 => => extracting sha256:011d05d23cfdbef43633425b360772681a82dc7760e5c23122fe5a42b2b24650                             9.9s 
 => => extracting sha256:196b6306eb275c624d026983b3a441fd42ead1444a9f110151f011e6fa98ce83                             4.1s 
 => => extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1                             0.2s 
 => => extracting sha256:f310f0750a04b575b66f53aeb0d5796651247691d1e0d1533c00abfd48ac10ae                            15.1s 
 => => extracting sha256:56befdd1a6e96c8742a3015decc89bea5494fc922210a62daa290326e57e6884                            13.8s 
 => => extracting sha256:d000740f2c92e077ec603bdfba8200d15a51df1dc4cde313353896bddf408aef                            15.8s 
 => => extracting sha256:698f65a773846a95fa2910847f8102ccac15168985320515e0ac0d7e5811273b                             1.4s 
 => [internal] load build context                                                                                   410.4s 
 => => transferring context: 454.96MB                                                                               409.8s 
 => CACHED [planner 2/8] WORKDIR /plan                                                                                0.0s 
 => CACHED [planner 3/8] RUN echo '[workspace]' > Cargo.toml &&     echo 'members = ["ast", "lsp", "standalone"]' >>  0.0s 
 => [planner 4/8] COPY ast/Cargo.toml ast/Cargo.toml                                                                  0.6s 
 => [planner 5/8] COPY lsp/Cargo.toml lsp/Cargo.toml                                                                  0.1s 
 => [planner 6/8] COPY standalone/Cargo.toml standalone/Cargo.toml                                                    0.1s 
 => [planner 7/8] COPY Cargo.lock .                                                                                   0.1s
 => [planner 8/8] RUN mkdir -p ast/src lsp/src standalone/src &&     echo 'fn main() {}' > ast/src/lib.rs &&     ech  2.1s 
 => CACHED [cacher 2/4] WORKDIR /app                                                                                  0.0s 
 => [cacher 3/4] COPY --from=planner /plan .                                                                          0.1s 
 => [cacher 4/4] RUN cargo build --release --bin standalone --features neo4j &&     rm -rf ast/src lsp/src standal  647.4s 
 => CACHED [builder  3/14] COPY --from=cacher /app/target target                                                      0.0s 
 => [builder  4/14] COPY --from=cacher /usr/local/cargo /usr/local/cargo                                             14.5s 
 => [builder  5/14] COPY --from=cacher /app/Cargo.toml .                                                              0.9s 
 => [builder  6/14] COPY --from=cacher /app/Cargo.lock .                                                              0.1s 
 => [builder  7/14] COPY --from=cacher /app/ast/Cargo.toml ./ast/                                                     0.1s 
 => [builder  8/14] COPY --from=cacher /app/lsp/Cargo.toml ./lsp/                                                     0.1s 
 => [builder  9/14] COPY --from=cacher /app/standalone/Cargo.toml ./standalone/                                       0.2s 
 => [builder 10/14] COPY ast/src ast/src                                                                             34.1s 
 => [builder 11/14] COPY lsp/src lsp/src                                                                              1.3s 
 => [builder 12/14] COPY standalone/src standalone/src                                                                0.1s 
 => [builder 13/14] COPY standalone/static standalone/static                                                          0.2s
 => [builder 14/14] RUN cargo build --release --bin standalone --features neo4j                                     168.1s 
 => [stage-3 2/4] WORKDIR /app                                                                                        1.9s 
 => [stage-3 3/4] COPY --from=builder /app/target/release/standalone /app/stakgraph                                   0.9s 
 => [stage-3 4/4] COPY --from=builder /app/standalone/static /app/standalone/static                                   0.2s 
 => exporting to image                                                                                               10.6s 
 => => exporting layers                                                                                               5.7s 
 => => exporting manifest sha256:985898c393774cddd9c85c7a2927adba5500ae15f81f3052641dadc037ffafd7                     0.4s 
 => => exporting config sha256:0371b3baf35f06343581ab0f8c5eb9fff4f833cbafeb1fe4c5cebd62a1b78683                       0.5s 
 => => exporting manifest list sha256:1d3c1afe7b1f258072fb4ce3a3c07c617eafe46526c65db8c4c33d6ef9b69f0e                0.3s 
 => => naming to docker.io/library/stakgraph-standalone:local                                                         0.1s 
 => => unpacking to docker.io/library/stakgraph-standalone:local                                                      1.8s 

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/erzqu0w9og78lizekybr9eeoc

What's next:
    View a summary of image vulnerabilities and recommendations → docker scout quickview 

@Chiamaka489
Copy link
Author

@Evanfeenstra Please approve the workflow.

with:
context: .
file: Dockerfile.standalone
platforms: linux/amd64,linux/arm64
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why did u change the platform? i want it to run on my m4 and also on amd in the cloud

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

very slow docker build

2 participants