Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI enhancement: docker workflow speedup #2232

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/binaries.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
run: rustup target add aarch64-apple-darwin

- name: Run sccache-cache
uses: mozilla-actions/[email protected].4
uses: mozilla-actions/[email protected].6

- name: Cache Rust
uses: Swatinem/rust-cache@v2
Expand Down Expand Up @@ -194,7 +194,7 @@ jobs:
EOF

- name: Build and push multiplatform image
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
push: true
Expand Down
40 changes: 24 additions & 16 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,22 @@ jobs:
# https://docs.warpbuild.com/cache/docker-layer-caching#step-1-set-up-docker-buildx-action
driver-opts: |
network=host

- name: Cache sccache
uses: actions/cache@v4
with:
path: sccache-cache
key: ${{ runner.os }}-sccache-${{ hashFiles('**/Cargo.lock') }}

- name: Run sccache-cache
uses: mozilla-actions/[email protected]

- name: Inject sccache-cache into Docker
uses: reproducible-containers/buildkit-cache-dance@v3
with:
cache-map: |
{
"sccache-cache": "/var/cache/sccache"
}
skip-extraction: ${{ steps.cache.outputs.cache-hit }}

- name: Log into GitHub container registry
uses: docker/login-action@v3
with:
Expand Down Expand Up @@ -107,7 +119,7 @@ jobs:

- name: Build${{inputs.uploadImageAsTarball != true && ' and push ' || ' '}}Docker image
id: build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
file: "docker/Dockerfile"
Expand All @@ -119,13 +131,10 @@ jobs:
network: host
build-args: |
CARGO_PROFILE_RELEASE_DEBUG=${{ inputs.debug }}
ACTIONS_CACHE_URL=http://127.0.0.1:49160/
ACTIONS_RUNTIME_TOKEN
SCCACHE_GHA_ENABLED=true
RESTATE_FEATURES=${{ inputs.features || '' }}
cache-from: type=gha,scope=${{ github.workflow }},url=http://127.0.0.1:49160/
cache-to: type=gha,mode=max,scope=${{ github.workflow }},url=http://127.0.0.1:49160/

cache-from: type=gha,url=http://127.0.0.1:49160/
cache-to: type=gha,url=http://127.0.0.1:49160/,mode=max
- name: Save docker image as tar
if: ${{ inputs.uploadImageAsTarball }}
run: |
Expand All @@ -144,7 +153,7 @@ jobs:
# This won't actually build again, it'll just use cache
- name: Push Docker image
if: ${{ inputs.uploadImageAsTarball && github.ref == 'refs/heads/main' }}
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
file: "docker/Dockerfile"
Expand All @@ -157,9 +166,8 @@ jobs:
network: host
build-args: |
CARGO_PROFILE_RELEASE_DEBUG=${{ inputs.debug }}
ACTIONS_CACHE_URL=http://127.0.0.1:49160/
ACTIONS_RUNTIME_TOKEN
SCCACHE_GHA_ENABLED=true
RESTATE_FEATURES=${{ inputs.features || '' }}
cache-from: type=gha,scope=${{ github.workflow }},url=http://127.0.0.1:49160/
cache-to: type=gha,mode=max,scope=${{ github.workflow }},url=http://127.0.0.1:49160/
SCCACHE_DIR=/sccache-cache
cache-from: type=gha,url=http://127.0.0.1:49160/
cache-to: type=gha,url=http://127.0.0.1:49160/,mode=max

21 changes: 13 additions & 8 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,24 @@ ARG SCCACHE_SERVER_PORT=4227
FROM base-$TARGETARCH AS builder
ARG SCCACHE_SERVER_PORT
ARG TARGETARCH
# https://github.com/mozilla/sccache/blob/main/docs/GHA.md
ARG ACTIONS_CACHE_URL=''
ARG ACTIONS_RUNTIME_TOKEN=''
ARG SCCACHE_GHA_ENABLED=''

ENV RUSTC_WRAPPER=/usr/bin/sccache
ENV SCCACHE_DIR=/var/cache/sccache

# Overrides the behaviour of the release profile re including debug symbols, which in our repo is not to include them.
# Should be set to 'false' or 'true'. See https://doc.rust-lang.org/cargo/reference/environment-variables.html
ARG CARGO_PROFILE_RELEASE_DEBUG=false
ARG RESTATE_FEATURES=''
# Caching layer if nothing has changed
# Only build restate binary to avoid compiling unneeded crates

RUN just arch=$TARGETARCH libc=gnu features=$RESTATE_FEATURES chef-cook --release --bin restate-server

COPY . .
RUN just arch=$TARGETARCH libc=gnu features=$RESTATE_FEATURES build --release --bin restate-server && \

# Mount the sccache directory as a cache to leverage sccache during build
# Caching layer if nothing has changed
# Use sccache during the main build
RUN --mount=type=cache,target=/var/cache/sccache \
just arch=$TARGETARCH libc=gnu features=$RESTATE_FEATURES build --release --bin restate-server && \
just notice-file && \
mv target/$(just arch=$TARGETARCH libc=gnu print-target)/release/restate-server target/restate-server

Expand All @@ -52,4 +57,4 @@ COPY --from=builder /etc/ssl /etc/ssl
# useful for health checks
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
WORKDIR /
ENTRYPOINT ["/usr/local/bin/restate-server"]
ENTRYPOINT ["/usr/local/bin/restate-server"]
Loading