Skip to content

Conversation

liavweiss
Copy link

@liavweiss liavweiss commented May 26, 2025

closes: #323

In this pr I fixed the make docker-build + make docker-buildx.

NOTE: When you run "make docker-buildx" you will get this ERROR:
"ERROR: failed to solve: failed to push nbv2-backend:latest: push access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
make: [Makefile:135: docker-buildx] Error 1 (ignored)",
Because we didn't specify the right registry in the Makefile.

Comment on lines 13 to 16
RUN go mod edit -replace=github.com/kubeflow/notebooks/workspaces/controller=./controller

# Download dependencies
RUN go mod download
Copy link
Contributor

Choose a reason for hiding this comment

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

These back-to-back RUN commands can be more efficiently combined to reduce a spurious layer

RUN go mod edit -replace=github.com/kubeflow/notebooks/workspaces/controller=./controller && \
    go mod download

Copy link
Author

Choose a reason for hiding this comment

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

I will change that, tnx

COPY backend/openapi/ openapi/

# Build the Go application
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o backend ./cmd/main.go
Copy link
Contributor

Choose a reason for hiding this comment

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

Unrelated to changes in this PR - but I'm confused by the use case of specifying TARGETARCH here...

Our Makefile never sets this build argument... so do we even need it? Under what circumstance would it need to be defined?

Copy link
Author

Choose a reason for hiding this comment

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

Hey, we need the TARGETOS and TARGETARCH for the make docker-buildx command.
When you use docker buildx build --platform=..., Docker automatically sets build-time environment variables like TARGETARCH and TARGETOS for each platform you're building for.

Copy link
Contributor

Choose a reason for hiding this comment

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

Ok, thank you for highlighting this! TIL 💯

However, from my preliminary research - just sharing for awareness - no changes needed/required on this PR - it seems that podman does NOT automatically set these variables... so while we have a CONTAINER_TOOL "abstraction" in our Makefile to "support" running with podman - it won't actually be comparable to what docker does (without user intervention)

Copy link
Author

Choose a reason for hiding this comment

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

Thank you for the comment, I checked it too, and I saw that in podman we don't have the buildx command at all, so we will need to change that too (but let's leave it to another ticket for replacing podman with docker)

Copy link
Contributor

Choose a reason for hiding this comment

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

Agreed - definitely a follow up item we can/should discuss more how to handle!

.PHONY: docker-buildx
docker-buildx: ## Build and push docker image for the manager for cross-platform support
# copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile
sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross
Copy link
Contributor

Choose a reason for hiding this comment

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

Again, unrelated to the changes in this PR - but I am confused as to why we have 2 separate expressions ( -e ) in this sed command...

Our Dockerfile has a comment on Line 1 - so (at least today) - the initial -e command will never pass. And since we are not relying on that initial command - unclear why we even attempt to support it (?)

Clearly the 2nd expression is "robust enough" - as we are relying on it today...

Copy link
Author

Choose a reason for hiding this comment

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

You are right, I will remove it.

@andyatmiami
Copy link
Contributor

andyatmiami commented May 30, 2025

In order to properly test this change - I wanted to get the container image running in k8s
to really "see" it work.

The following was my testing methodology:

  • Deploy KinD cluster and deploy controller and all necessary config (cert-manager, CRDs, etc)
  • gmake docker-build docker-push IMG=quay.io/rh-ee-astonebe/kubeflow-notebooks-v2:backend-containerize
  • kind load docker-image quay.io/rh-ee-astonebe/kubeflow-notebooks-v2:backend-containerize
  • crafted crude backend-rbac.yaml and backend-deployment.yaml to provide minimal scaffolding for container (see attached)
  • kubectl apply -f backend-rbac.yaml
  • kubectl apply -f backend-deployment.yaml
  • kubectl port-forward svc/backend 4000:4000
  • curl http://localhost:4000/api/v1/healthcheck
  • curl http://localhost:4000/api/v1/workspacekinds
  • curl http://localhost:4000/api/v1/workspaces
  • curl http://localhost:4000/api/v1/workspaces/default

All API calls tested above returned successfully with expected JSON payloads reflecting the state of my cluster!

backend-rbac.yaml.txt
backend-deployment.yaml.txt

@google-oss-prow google-oss-prow bot added size/M and removed size/S labels Jun 3, 2025
Copy link
Contributor

@andyatmiami andyatmiami left a comment

Choose a reason for hiding this comment

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

Apologies I did not catch this on my first review - but when re-reviewing the changes today - I paid more attention to the build output and noticed this:

$ gmake docker-build docker-push IMG=quay.io/rh-ee-astonebe/kubeflow-notebooks-v2:backend-containerize
docker build -f Dockerfile -t quay.io/rh-ee-astonebe/kubeflow-notebooks-v2:backend-containerize ..
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon   1.21GB

Specifically this:
Sending build context to Docker daemon 1.21GB

1.21GB being sent in context seemed... a bit much 😇

What I think is happening:

  • We (rightly) changed the build context to ..
  • docker will look for a .dockerignore file at the root of the provided build context directory
  • we have no .dockerignore file defined in workspaces/
  • EVERYTHING in the developer's repo will get packaged up in build context 😱

Granted, when using CI/CD to build an image - there would not be as much "stuff" expected to be present in the repo - but on my workstation, the bin/ directories of both backend and controller, in addition to all the files (includind node_modules) are getting slurped up into context.

Seems like we probably would want to define a .dockerignore in workspaces/ to filter out all the directories we'd never expect/want to include. Definitely want to include a comment in that file (since its kinda "hanging out" in that directory with no obvious indication how it would be used otherwise)

Liav Weiss (EXT-Nokia) added 2 commits June 11, 2025 09:54
@atheo89
Copy link

atheo89 commented Jun 12, 2025

/lgtm

This fix work on me now, I am able to build/push the backend image successfully.
(Tested/Worked on MacOS)

Generated logs:

podman build -f Dockerfile -t quay.io/rh_ee_atheodor/nbv2-backend:latest ..
[1/2] STEP 1/12: FROM golang:1.22 AS builder
[1/2] STEP 2/12: ARG TARGETOS
--> Using cache 820bdb8f1edd7f940b004adfff9a38aceada30dbb2acaaeef5b2f2a5bcfea085
--> 820bdb8f1edd
[1/2] STEP 3/12: ARG TARGETARCH
--> Using cache db3d0756a56ac3766f427828cdeda929250ecf81e97205022a334a28220d62b7
--> db3d0756a56a
[1/2] STEP 4/12: WORKDIR /workspace
--> Using cache 26bbe842c809b87986a14bcca76d1d383319ef06ff8fbbf444009906ae0d31bc
--> 26bbe842c809
[1/2] STEP 5/12: COPY backend/go.mod backend/go.sum ./
--> Using cache 2d0c6ce747b2e820d429822ead6223ba25f58819bd541cf63765e19065e98db6
--> 2d0c6ce747b2
[1/2] STEP 6/12: COPY controller /workspace/controller
--> Using cache 81c0e76bb4577ffecc485db0ee28fa65897d8af5e62d172ed9effa56e3555a39
--> 81c0e76bb457
[1/2] STEP 7/12: RUN go mod edit -replace=github.com/kubeflow/notebooks/workspaces/controller=./controller &&     go mod download
--> Using cache 3abc9b06f1ba937a7315fc29deb20ac54eb69de43830480a7f1d64d9369718d7
--> 3abc9b06f1ba
[1/2] STEP 8/12: COPY backend/cmd/ cmd/
--> Using cache 1292ffc10ef12b143c21ec4e7779f6fe51b5a023d4a44d1f3702d1840a52ac2a
--> 1292ffc10ef1
[1/2] STEP 9/12: COPY backend/api/ api/
--> Using cache d713251b077a6b75eb33b96f00fc268261fdb8a7ac13ea17b99698674423f60c
--> d713251b077a
[1/2] STEP 10/12: COPY backend/internal/ internal/
--> Using cache e0a66e651c90bcc4a5717c3c31c818f38197347e28c684e3d6b83bafcf4350bc
--> e0a66e651c90
[1/2] STEP 11/12: COPY backend/openapi/ openapi/
--> Using cache 31a17f1cc6a84ab2ebe9f388599a9b4fe037ea8607cb09fd31396a421c29a0a0
--> 31a17f1cc6a8
[1/2] STEP 12/12: RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o backend ./cmd/main.go
--> Using cache d409b21d9631f1496976c9b9341229e539b57988a2a8a8d67e1b582875dcd894
--> d409b21d9631
[2/2] STEP 1/8: FROM gcr.io/distroless/static:nonroot
[2/2] STEP 2/8: WORKDIR /
--> Using cache fa964ab9d133706f752c07dd963e02580b46a144d0387623082d6d1179c9692d
--> fa964ab9d133
[2/2] STEP 3/8: COPY --from=builder /workspace/backend ./
--> Using cache 825c76367774b1a8d593a56c23d022fdc5afe8986c447f6b09f3e59ee0bbb6cd
--> 825c76367774
[2/2] STEP 4/8: USER 65532:65532
--> Using cache 79adb650cc6c34024a55a86c3ae523ff95f4354dbef7f7bd05568a1a43cb50d5
--> 79adb650cc6c
[2/2] STEP 5/8: EXPOSE 4000
--> Using cache 4f8650c49d2634a838b9cfb3c16a9555b46be334946f2cf386824a732166fc19
--> 4f8650c49d26
[2/2] STEP 6/8: ENV PORT=4000
--> Using cache d1d5252c4468d820145661e7a351610cfd39fdc68afb2a2f829cb1368a1095c5
--> d1d5252c4468
[2/2] STEP 7/8: ENV ENV=development
--> Using cache c031ba06bd48c46c1085f29c6fd1fdd5cec09d326a24d77ec997b4799512e565
--> c031ba06bd48
[2/2] STEP 8/8: ENTRYPOINT ["/backend"]
--> Using cache 55e92ac5c6d3ea41aaa1c63cc1938ea12243973661605dd5de316d6ccd00a649
[2/2] COMMIT quay.io/rh_ee_atheodor/nbv2-backend:latest
--> 55e92ac5c6d3
Successfully tagged quay.io/rh_ee_atheodor/nbv2-backend:latest
55e92ac5c6d3ea41aaa1c63cc1938ea12243973661605dd5de316d6ccd00a649
podman push quay.io/rh_ee_atheodor/nbv2-backend:latest
Getting image source signatures
Copying blob sha256:6f1cdceb6a3146f0ccb986521156bef8a422cdbb0863396f7f751f575ba308f4
Copying blob sha256:48c0fb67386ed713921fcc0468be23231d0872fa67ccc8ea3929df4656b6ddfc
Copying blob sha256:955a0d3ff798720038c95c7ef1bf41fec749655e3b147f797868f96fc13a243b
Copying blob sha256:8fa10c0194df9b7c054c90dbe482585f768a54428fc90a5b78a0066a123b1bba
Copying blob sha256:4d049f83d9cf21d1f5cc0e11deaf36df02790d0e60c1a3829538fb4b61685368
Copying blob sha256:af5aa97ebe6ce1604747ec1e21af7136ded391bcabe4acef882e718a87c86bcc
Copying blob sha256:bbb6cacb8c82e4da4e8143e03351e939eab5e21ce0ef333c42e637af86c5217b
Copying blob sha256:2a92d6ac9e4fcc274d5168b217ca4458a9fec6f094ead68d99c77073f08caac1
Copying blob sha256:1a73b54f556b477f0a8b939d13c504a3b4f4db71f7a09c63afbc10acb3de5849
Copying blob sha256:f4aee9e53c42a22ed82451218c3ea03d1eea8d6ca8fbe8eb4e950304ba8a8bb3
Copying blob sha256:b336e209998fa5cf0eec3dabf93a21194198a35f4f75612d8da03693f8c30217
Copying blob sha256:a2f272c67ebb8cc7b112c396c372458109dc3a8aa6333c264f37f98d1c039128
Copying config sha256:55e92ac5c6d3ea41aaa1c63cc1938ea12243973661605dd5de316d6ccd00a649
Writing manifest to image destination

Without that fix I had this error:

podman build -t quay.io/rh_ee_atheodor/nbv2-backend:latest .
[1/2] STEP 1/12: FROM golang:1.22 AS builder
[1/2] STEP 2/12: ARG TARGETOS
--> Using cache 820bdb8f1edd7f940b004adfff9a38aceada30dbb2acaaeef5b2f2a5bcfea085
--> 820bdb8f1edd
[1/2] STEP 3/12: ARG TARGETARCH
--> Using cache db3d0756a56ac3766f427828cdeda929250ecf81e97205022a334a28220d62b7
--> db3d0756a56a
[1/2] STEP 4/12: WORKDIR /workspace
--> Using cache 26bbe842c809b87986a14bcca76d1d383319ef06ff8fbbf444009906ae0d31bc
--> 26bbe842c809
[1/2] STEP 5/12: COPY go.mod go.sum ./
--> Using cache 2d0c6ce747b2e820d429822ead6223ba25f58819bd541cf63765e19065e98db6
--> 2d0c6ce747b2
[1/2] STEP 6/12: RUN go mod download
go: github.com/kubeflow/notebooks/workspaces/[email protected] (replaced by ../controller): reading /controller/go.mod: open /controller/go.mod: no such file or directory
Error: building at STEP "RUN go mod download": while running runtime: exit status 1

make: *** [docker-build] Error 1

Copy link

@atheo89: changing LGTM is restricted to collaborators

In response to this:

/lgtm

This fix work on me now, I am able to build/push the backend image successfully.
(Tested/Worked on MacOS)

Generated logs:

podman build -f Dockerfile -t quay.io/rh_ee_atheodor/nbv2-backend:latest ..
[1/2] STEP 1/12: FROM golang:1.22 AS builder
[1/2] STEP 2/12: ARG TARGETOS
--> Using cache 820bdb8f1edd7f940b004adfff9a38aceada30dbb2acaaeef5b2f2a5bcfea085
--> 820bdb8f1edd
[1/2] STEP 3/12: ARG TARGETARCH
--> Using cache db3d0756a56ac3766f427828cdeda929250ecf81e97205022a334a28220d62b7
--> db3d0756a56a
[1/2] STEP 4/12: WORKDIR /workspace
--> Using cache 26bbe842c809b87986a14bcca76d1d383319ef06ff8fbbf444009906ae0d31bc
--> 26bbe842c809
[1/2] STEP 5/12: COPY backend/go.mod backend/go.sum ./
--> Using cache 2d0c6ce747b2e820d429822ead6223ba25f58819bd541cf63765e19065e98db6
--> 2d0c6ce747b2
[1/2] STEP 6/12: COPY controller /workspace/controller
--> Using cache 81c0e76bb4577ffecc485db0ee28fa65897d8af5e62d172ed9effa56e3555a39
--> 81c0e76bb457
[1/2] STEP 7/12: RUN go mod edit -replace=github.com/kubeflow/notebooks/workspaces/controller=./controller &&     go mod download
--> Using cache 3abc9b06f1ba937a7315fc29deb20ac54eb69de43830480a7f1d64d9369718d7
--> 3abc9b06f1ba
[1/2] STEP 8/12: COPY backend/cmd/ cmd/
--> Using cache 1292ffc10ef12b143c21ec4e7779f6fe51b5a023d4a44d1f3702d1840a52ac2a
--> 1292ffc10ef1
[1/2] STEP 9/12: COPY backend/api/ api/
--> Using cache d713251b077a6b75eb33b96f00fc268261fdb8a7ac13ea17b99698674423f60c
--> d713251b077a
[1/2] STEP 10/12: COPY backend/internal/ internal/
--> Using cache e0a66e651c90bcc4a5717c3c31c818f38197347e28c684e3d6b83bafcf4350bc
--> e0a66e651c90
[1/2] STEP 11/12: COPY backend/openapi/ openapi/
--> Using cache 31a17f1cc6a84ab2ebe9f388599a9b4fe037ea8607cb09fd31396a421c29a0a0
--> 31a17f1cc6a8
[1/2] STEP 12/12: RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o backend ./cmd/main.go
--> Using cache d409b21d9631f1496976c9b9341229e539b57988a2a8a8d67e1b582875dcd894
--> d409b21d9631
[2/2] STEP 1/8: FROM gcr.io/distroless/static:nonroot
[2/2] STEP 2/8: WORKDIR /
--> Using cache fa964ab9d133706f752c07dd963e02580b46a144d0387623082d6d1179c9692d
--> fa964ab9d133
[2/2] STEP 3/8: COPY --from=builder /workspace/backend ./
--> Using cache 825c76367774b1a8d593a56c23d022fdc5afe8986c447f6b09f3e59ee0bbb6cd
--> 825c76367774
[2/2] STEP 4/8: USER 65532:65532
--> Using cache 79adb650cc6c34024a55a86c3ae523ff95f4354dbef7f7bd05568a1a43cb50d5
--> 79adb650cc6c
[2/2] STEP 5/8: EXPOSE 4000
--> Using cache 4f8650c49d2634a838b9cfb3c16a9555b46be334946f2cf386824a732166fc19
--> 4f8650c49d26
[2/2] STEP 6/8: ENV PORT=4000
--> Using cache d1d5252c4468d820145661e7a351610cfd39fdc68afb2a2f829cb1368a1095c5
--> d1d5252c4468
[2/2] STEP 7/8: ENV ENV=development
--> Using cache c031ba06bd48c46c1085f29c6fd1fdd5cec09d326a24d77ec997b4799512e565
--> c031ba06bd48
[2/2] STEP 8/8: ENTRYPOINT ["/backend"]
--> Using cache 55e92ac5c6d3ea41aaa1c63cc1938ea12243973661605dd5de316d6ccd00a649
[2/2] COMMIT quay.io/rh_ee_atheodor/nbv2-backend:latest
--> 55e92ac5c6d3
Successfully tagged quay.io/rh_ee_atheodor/nbv2-backend:latest
55e92ac5c6d3ea41aaa1c63cc1938ea12243973661605dd5de316d6ccd00a649
podman push quay.io/rh_ee_atheodor/nbv2-backend:latest
Getting image source signatures
Copying blob sha256:6f1cdceb6a3146f0ccb986521156bef8a422cdbb0863396f7f751f575ba308f4
Copying blob sha256:48c0fb67386ed713921fcc0468be23231d0872fa67ccc8ea3929df4656b6ddfc
Copying blob sha256:955a0d3ff798720038c95c7ef1bf41fec749655e3b147f797868f96fc13a243b
Copying blob sha256:8fa10c0194df9b7c054c90dbe482585f768a54428fc90a5b78a0066a123b1bba
Copying blob sha256:4d049f83d9cf21d1f5cc0e11deaf36df02790d0e60c1a3829538fb4b61685368
Copying blob sha256:af5aa97ebe6ce1604747ec1e21af7136ded391bcabe4acef882e718a87c86bcc
Copying blob sha256:bbb6cacb8c82e4da4e8143e03351e939eab5e21ce0ef333c42e637af86c5217b
Copying blob sha256:2a92d6ac9e4fcc274d5168b217ca4458a9fec6f094ead68d99c77073f08caac1
Copying blob sha256:1a73b54f556b477f0a8b939d13c504a3b4f4db71f7a09c63afbc10acb3de5849
Copying blob sha256:f4aee9e53c42a22ed82451218c3ea03d1eea8d6ca8fbe8eb4e950304ba8a8bb3
Copying blob sha256:b336e209998fa5cf0eec3dabf93a21194198a35f4f75612d8da03693f8c30217
Copying blob sha256:a2f272c67ebb8cc7b112c396c372458109dc3a8aa6333c264f37f98d1c039128
Copying config sha256:55e92ac5c6d3ea41aaa1c63cc1938ea12243973661605dd5de316d6ccd00a649
Writing manifest to image destination

Without that fix I had this error:

podman build -t quay.io/rh_ee_atheodor/nbv2-backend:latest .
[1/2] STEP 1/12: FROM golang:1.22 AS builder
[1/2] STEP 2/12: ARG TARGETOS
--> Using cache 820bdb8f1edd7f940b004adfff9a38aceada30dbb2acaaeef5b2f2a5bcfea085
--> 820bdb8f1edd
[1/2] STEP 3/12: ARG TARGETARCH
--> Using cache db3d0756a56ac3766f427828cdeda929250ecf81e97205022a334a28220d62b7
--> db3d0756a56a
[1/2] STEP 4/12: WORKDIR /workspace
--> Using cache 26bbe842c809b87986a14bcca76d1d383319ef06ff8fbbf444009906ae0d31bc
--> 26bbe842c809
[1/2] STEP 5/12: COPY go.mod go.sum ./
--> Using cache 2d0c6ce747b2e820d429822ead6223ba25f58819bd541cf63765e19065e98db6
--> 2d0c6ce747b2
[1/2] STEP 6/12: RUN go mod download
go: github.com/kubeflow/notebooks/workspaces/[email protected] (replaced by ../controller): reading /controller/go.mod: open /controller/go.mod: no such file or directory
Error: building at STEP "RUN go mod download": while running runtime: exit status 1

make: *** [docker-build] Error 1

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@liavweiss liavweiss force-pushed the backend_dockerfile/#323 branch from 3de7a76 to f0f0a93 Compare June 12, 2025 19:48
@liavweiss liavweiss force-pushed the backend_dockerfile/#323 branch from f0f0a93 to 5a57dac Compare June 12, 2025 19:48
@liavweiss
Copy link
Author

@andyatmiami I fixed the issue, I think frontend code is unnecessary too.

@liavweiss
Copy link
Author

/retest

@andyatmiami
Copy link
Contributor

Confirming that the build context size is now nice and minimal on the latest changes 💯

docker build -f Dockerfile -t quay.io/rh-ee-astonebe/kubeflow-notebooks-v2:backend-containerize ..
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon  1.418MB

An almost 1000x reduction is "pretty good" 😎

@andyatmiami
Copy link
Contributor

/lgtm

  • Re-verified the Dockerfile is suitable to run a workload in k8s via my methodology outlined above
  • Confirmed the build context is now of reasonable/expected size

@google-oss-prow google-oss-prow bot added the lgtm label Jun 16, 2025
Signed-off-by: Mathew Wicks <[email protected]>
@google-oss-prow google-oss-prow bot removed the lgtm label Jun 26, 2025
@thesuperzapper thesuperzapper changed the title feat(ws): Properly containerize backend component #323 feat(ws): fix backend dockerfile Jun 26, 2025
@thesuperzapper thesuperzapper changed the title feat(ws): fix backend dockerfile fix(ws): backend dockerfile build Jun 26, 2025
@thesuperzapper thesuperzapper changed the title fix(ws): backend dockerfile build fix(ws): backend dockerfile Jun 26, 2025
@thesuperzapper
Copy link
Member

Thanks @liavweiss and @andyatmiami, now we can get the manifests for backend set up (and e2e tests).

/lgtm
/approve

Copy link

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: thesuperzapper

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@thesuperzapper
Copy link
Member

/ok-to-test

@google-oss-prow google-oss-prow bot merged commit 42dfd30 into kubeflow:notebooks-v2 Jun 26, 2025
15 checks passed
@github-project-automation github-project-automation bot moved this from Needs Triage to Done in Kubeflow Notebooks Jun 26, 2025
@liavweiss liavweiss deleted the backend_dockerfile/#323 branch August 28, 2025 12:22
bhaktinarvekar pushed a commit to bhaktinarvekar/notebooks that referenced this pull request Sep 14, 2025
* feat(ws): Properly containerize backend component kubeflow#323

Signed-off-by: Liav Weiss (EXT-Nokia) <[email protected]>

* feat(ws): Properly containerize backend component kubeflow#323

Signed-off-by: Liav Weiss (EXT-Nokia) <[email protected]>

* feat(ws): Properly containerize backend component kubeflow#323

Signed-off-by: Liav Weiss (EXT-Nokia) <[email protected]>

* mathew: revert typo

Signed-off-by: Mathew Wicks <[email protected]>

---------

Signed-off-by: Liav Weiss (EXT-Nokia) <[email protected]>
Signed-off-by: Mathew Wicks <[email protected]>
Co-authored-by: Liav Weiss (EXT-Nokia) <[email protected]>
Co-authored-by: Mathew Wicks <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

4 participants