diff --git a/.github/workflows/binaries.yml b/.github/workflows/binaries.yml index 13da3729f..2cc73d803 100644 --- a/.github/workflows/binaries.yml +++ b/.github/workflows/binaries.yml @@ -76,7 +76,7 @@ jobs: run: rustup target add aarch64-apple-darwin - name: Run sccache-cache - uses: mozilla-actions/sccache-action@v0.0.4 + uses: mozilla-actions/sccache-action@v0.0.6 - name: Cache Rust uses: Swatinem/rust-cache@v2 @@ -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 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9e0e4b563..d2b00cf74 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -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/sccache-action@v0.0.4 - + - 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: @@ -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" @@ -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: | @@ -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" @@ -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 + \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index 7d87584bc..dfa67a611 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -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 @@ -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"] \ No newline at end of file