From eae9a50c975046b4a384a0b7fe3df7ba98eb6246 Mon Sep 17 00:00:00 2001 From: Muhamad Awad Date: Thu, 14 Nov 2024 15:22:28 +0100 Subject: [PATCH] Debug docker image Summary: While running the sdk-test-suite it was needed to rebuild the restate docker image multiple times which is very time consuming. Now by running `just debug-docker` a quick debug image will be made --- .github/workflows/docker.yml | 4 +-- docker/debug.Dockerfile | 32 +++++++++++++++++++ docker/debug.Dockerfile.dockerignore | 5 +++ docker/{Dockerfile => release.Dockerfile} | 0 .../release.Dockerfile.dockerignore | 0 justfile | 7 ++-- 6 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 docker/debug.Dockerfile create mode 100644 docker/debug.Dockerfile.dockerignore rename docker/{Dockerfile => release.Dockerfile} (100%) rename .dockerignore => docker/release.Dockerfile.dockerignore (100%) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9e0e4b563..67b8305a9 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -110,7 +110,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: "docker/Dockerfile" + file: "docker/release.Dockerfile" push: ${{ inputs.uploadImageAsTarball != true }} tags: ${{ steps.meta.outputs.tags }} load: ${{ inputs.uploadImageAsTarball == true }} @@ -147,7 +147,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: "docker/Dockerfile" + file: "docker/release.Dockerfile" push: true tags: ${{ steps.meta.outputs.tags }} load: false diff --git a/docker/debug.Dockerfile b/docker/debug.Dockerfile new file mode 100644 index 000000000..060009fe8 --- /dev/null +++ b/docker/debug.Dockerfile @@ -0,0 +1,32 @@ +# syntax=docker.io/docker/dockerfile:1.7-labs +# Copyright (c) 2023 - Restate Software, Inc., Restate GmbH. +# All rights reserved. +# +# Use of this software is governed by the Business Source License +# included in the LICENSE file. +# +# As of the Change Date specified in that file, in accordance with +# the Business Source License, use of this software will be governed +# by the Apache License, Version 2.0. + +# This docker file is mainly used to build a local docker image +# with restate binary to run sdk tests + +FROM ghcr.io/restatedev/dev-tools:latest AS builder +WORKDIR /usr/src/app +COPY --exclude=.git . . +RUN \ + --mount=type=cache,target=/usr/src/app/target,sharing=locked \ + --mount=type=cache,target=/usr/src/app/cargo-home,sharing=locked \ + du -sh target && du -sh cargo-home && \ + CARGO_HOME=/usr/src/app/cargo-home just libc=gnu build --bin restate-server && \ + cp target/debug/restate-server restate-server && \ + du -sh target && du -sh cargo-home + +# We do not need the Rust toolchain to run the server binary! +FROM debian:bookworm-slim AS runtime +COPY --from=builder /usr/src/app/restate-server /usr/local/bin +# copy OS roots +COPY --from=builder /etc/ssl /etc/ssl +WORKDIR / +ENTRYPOINT ["/usr/local/bin/restate-server"] \ No newline at end of file diff --git a/docker/debug.Dockerfile.dockerignore b/docker/debug.Dockerfile.dockerignore new file mode 100644 index 000000000..2336c9094 --- /dev/null +++ b/docker/debug.Dockerfile.dockerignore @@ -0,0 +1,5 @@ +**/.idea +docker/Dockerfile +**/target +restate.tar +charts diff --git a/docker/Dockerfile b/docker/release.Dockerfile similarity index 100% rename from docker/Dockerfile rename to docker/release.Dockerfile diff --git a/.dockerignore b/docker/release.Dockerfile.dockerignore similarity index 100% rename from .dockerignore rename to docker/release.Dockerfile.dockerignore diff --git a/justfile b/justfile index f65f8d08f..76e4f4279 100644 --- a/justfile +++ b/justfile @@ -9,7 +9,7 @@ docker_repo := "localhost/restatedev/restate" docker_tag := if path_exists(justfile_directory() / ".git") == "true" { `git rev-parse --abbrev-ref HEAD | sed 's|/|.|g'` + "." + `git rev-parse --short HEAD` } else { - "unknown" + "latest" } docker_image := docker_repo + ":" + docker_tag @@ -135,7 +135,10 @@ verify: lint test doctest docker: # podman builds do not work without --platform set, even though it claims to default to host arch - docker buildx build . --platform linux/{{ _docker_arch }} --file docker/Dockerfile --tag={{ docker_image }} --progress='{{ DOCKER_PROGRESS }}' --build-arg RESTATE_FEATURES={{ features }} --load + docker buildx build . --platform linux/{{ _docker_arch }} --file docker/release.Dockerfile --tag={{ docker_image }} --progress='{{ DOCKER_PROGRESS }}' --build-arg RESTATE_FEATURES={{ features }} --load + +debug-docker: + docker buildx build . --file docker/debug.Dockerfile --tag={{ docker_image }} --progress='{{ DOCKER_PROGRESS }}' --build-arg RESTATE_FEATURES={{ features }} --load notice-file: cargo license -d -a --avoid-build-deps --avoid-dev-deps {{ _features }} | (echo "Restate Runtime\nCopyright (c) 2024 Restate Software, Inc., Restate GmbH \n" && cat) > NOTICE