mirror of
https://github.com/hanzo-ml/hub.git
synced 2026-07-27 07:04:53 +00:00
chore: rename container images (#2639)
Renaming ghcr.io/kubeflow/model-registry/* to ghcr.io/kubeflow/hub/* Signed-off-by: Paul Boyd <paul@pboyd.io>
This commit is contained in:
@@ -23,12 +23,12 @@ env:
|
||||
# Async Job
|
||||
JOB_IMG_REGISTRY: ghcr.io
|
||||
JOB_IMG_ORG: kubeflow
|
||||
JOB_IMG_NAME: model-registry/job/async-upload
|
||||
JOB_IMG_NAME: hub/job/async-upload
|
||||
JOB_IMG_VERSION: cicd
|
||||
# MR Server
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry/server
|
||||
IMG_REPO: hub/server
|
||||
IMG_VERSION: cicd
|
||||
PUSH_IMAGE: false
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ permissions: read-all
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_NAME: model-registry/job/async-upload
|
||||
IMG_NAME: hub/job/async-upload
|
||||
REGISTRY_USER: ${{ github.actor }}
|
||||
REGISTRY_PWD: ${{ secrets.GITHUB_TOKEN }}
|
||||
PLATFORMS: linux/arm64,linux/amd64
|
||||
|
||||
@@ -17,7 +17,7 @@ permissions: read-all
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry/controller
|
||||
IMG_REPO: hub/controller
|
||||
PUSH_IMAGE: true
|
||||
DOCKER_USER: ${{ github.actor }}
|
||||
DOCKER_PWD: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -17,7 +17,7 @@ permissions: read-all
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry/storage-initializer
|
||||
IMG_REPO: hub/storage-initializer
|
||||
PUSH_IMAGE: true
|
||||
DOCKER_USER: ${{ github.actor }}
|
||||
DOCKER_PWD: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -16,7 +16,7 @@ on:
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry/server
|
||||
IMG_REPO: hub/server
|
||||
PUSH_IMAGE: true
|
||||
DOCKER_USER: ${{ github.actor }}
|
||||
DOCKER_PWD: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -17,7 +17,7 @@ permissions: read-all
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_UI_REPO: model-registry/ui-standalone # this image is intended for local development, not production
|
||||
IMG_UI_REPO: hub/ui-standalone # this image is intended for local development, not production
|
||||
DOCKER_USER: ${{ github.actor }}
|
||||
DOCKER_PWD: ${{ secrets.GITHUB_TOKEN }}
|
||||
PLATFORMS: linux/arm64,linux/amd64
|
||||
|
||||
@@ -17,7 +17,7 @@ permissions: read-all
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_UI_REPO: model-registry/ui # this image is intended for local development, not production
|
||||
IMG_UI_REPO: hub/ui # this image is intended for local development, not production
|
||||
DOCKER_USER: ${{ github.actor }}
|
||||
DOCKER_PWD: ${{ secrets.GITHUB_TOKEN }}
|
||||
PLATFORMS: linux/arm64,linux/amd64
|
||||
|
||||
@@ -18,7 +18,7 @@ permissions: # set contents: read at top-level, per OpenSSF ScoreCard rule Token
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry/server
|
||||
IMG_REPO: hub/server
|
||||
PUSH_IMAGE: false
|
||||
BRANCH: ${{ github.base_ref }}
|
||||
jobs:
|
||||
|
||||
@@ -16,7 +16,7 @@ permissions: # set contents: read at top-level, per OpenSSF ScoreCard rule Token
|
||||
|
||||
env:
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry/ui
|
||||
IMG_REPO: hub/ui
|
||||
PUSH_IMAGE: false
|
||||
BRANCH: ${{ github.base_ref }}
|
||||
jobs:
|
||||
|
||||
@@ -56,6 +56,6 @@ jobs:
|
||||
- name: Build controller
|
||||
shell: bash
|
||||
env:
|
||||
IMG_REPO: model-registry/controller
|
||||
IMG_REPO: hub/controller
|
||||
IMG_VERSION: ${{ steps.tags.outputs.tag }}
|
||||
run: make image/build
|
||||
|
||||
@@ -25,8 +25,8 @@ permissions: # set contents: read at top-level, per OpenSSF ScoreCard rule Token
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
MODEL_REGISTRY_IMG: model-registry/server
|
||||
MODEL_REGISTRY_CSI_IMG: model-registry/storage-initializer
|
||||
MODEL_REGISTRY_IMG: hub/server
|
||||
MODEL_REGISTRY_CSI_IMG: hub/storage-initializer
|
||||
PUSH_IMAGE: false
|
||||
BRANCH: ${{ github.base_ref }}
|
||||
jobs:
|
||||
|
||||
@@ -120,7 +120,7 @@ jobs:
|
||||
FORCE_COLOR: "1"
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry
|
||||
IMG_REPO: hub
|
||||
DEPLOY_MANIFEST_DB: "${{ matrix.manifest-db }}"
|
||||
steps:
|
||||
- name: Check out the repository
|
||||
|
||||
@@ -13,7 +13,7 @@ permissions: # set contents: read at top-level, per OpenSSF ScoreCard rule Token
|
||||
env:
|
||||
IMG_REGISTRY: ghcr.io
|
||||
IMG_ORG: kubeflow
|
||||
IMG_REPO: model-registry/server
|
||||
IMG_REPO: hub/server
|
||||
IMG_VERSION: latest
|
||||
PUSH_IMAGE: false
|
||||
|
||||
|
||||
@@ -16,11 +16,11 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
IMAGE: [
|
||||
'ghcr.io/kubeflow/model-registry/server:latest',
|
||||
'ghcr.io/kubeflow/model-registry/ui:latest',
|
||||
'ghcr.io/kubeflow/model-registry/job/async-upload:latest',
|
||||
'ghcr.io/kubeflow/model-registry/storage-initializer:latest',
|
||||
'ghcr.io/kubeflow/model-registry/ui-standalone:latest'
|
||||
'ghcr.io/kubeflow/hub/server:latest',
|
||||
'ghcr.io/kubeflow/hub/ui:latest',
|
||||
'ghcr.io/kubeflow/hub/job/async-upload:latest',
|
||||
'ghcr.io/kubeflow/hub/storage-initializer:latest',
|
||||
'ghcr.io/kubeflow/hub/ui-standalone:latest'
|
||||
]
|
||||
steps:
|
||||
- name: Checkout code
|
||||
|
||||
@@ -25,7 +25,7 @@ IMG_ORG ?= kubeflow
|
||||
# container image version
|
||||
IMG_VERSION ?= main
|
||||
# container image repository
|
||||
IMG_REPO ?= model-registry/server
|
||||
IMG_REPO ?= hub/server
|
||||
# container image build path
|
||||
BUILD_PATH ?= .
|
||||
# container image
|
||||
@@ -39,19 +39,19 @@ endif
|
||||
|
||||
# Change Dockerfile path depending on IMG_REPO
|
||||
# UI image uses repo root as context so COPY manifests/... for sample-catalog.yaml works
|
||||
ifeq ($(IMG_REPO),model-registry/ui)
|
||||
ifeq ($(IMG_REPO),hub/ui)
|
||||
DOCKERFILE := $(UI_PATH)/Dockerfile
|
||||
BUILD_PATH := $(PROJECT_PATH)
|
||||
ARGS := --build-arg UI_SOURCE_CODE=clients/ui/frontend --build-arg BFF_SOURCE_CODE=clients/ui/bff $(ARGS)
|
||||
endif
|
||||
|
||||
# The BUILD_PATH is still the root
|
||||
ifeq ($(IMG_REPO),model-registry/storage-initializer)
|
||||
ifeq ($(IMG_REPO),hub/storage-initializer)
|
||||
DOCKERFILE := $(CSI_PATH)/Dockerfile.csi
|
||||
endif
|
||||
|
||||
# The BUILD_PATH is still the root
|
||||
ifeq ($(IMG_REPO),model-registry/controller)
|
||||
ifeq ($(IMG_REPO),hub/controller)
|
||||
DOCKERFILE := $(CONTROLLER_PATH)/Dockerfile.controller
|
||||
endif
|
||||
|
||||
@@ -429,7 +429,7 @@ controller/uninstall: controller/manifests bin/kustomize ## Uninstall CRDs from
|
||||
|
||||
.PHONY: controller/deploy
|
||||
controller/deploy: controller/manifests bin/kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config.
|
||||
cd manifests/kustomize/options/controller/manager && $(KUSTOMIZE) edit set image ghcr.io/kubeflow/model-registry/controller=${IMG}:${IMG_VERSION}
|
||||
cd manifests/kustomize/options/controller/manager && $(KUSTOMIZE) edit set image ghcr.io/kubeflow/hub/controller=${IMG}:${IMG_VERSION}
|
||||
$(KUSTOMIZE) build manifests/kustomize/options/controller/overlays/base | $(KUBECTL) apply -f -
|
||||
|
||||
.PHONY: controller/undeploy
|
||||
|
||||
+4
-5
@@ -69,10 +69,10 @@ Create a PR to update what's needed on the release branch, i.e. to update the ma
|
||||
|
||||
```
|
||||
git checkout -b mr_maintainer-$TDATE-upstreamSync
|
||||
pushd manifests/kustomize/base && kustomize edit set image ghcr.io/kubeflow/model-registry/server=ghcr.io/kubeflow/model-registry/server:$VVERSION && popd
|
||||
pushd manifests/kustomize/options/csi && kustomize edit set image ghcr.io/kubeflow/model-registry/storage-initializer=ghcr.io/kubeflow/model-registry/storage-initializer:$VVERSION && popd
|
||||
pushd manifests/kustomize/options/ui/base && kustomize edit set image model-registry-ui=ghcr.io/kubeflow/model-registry/ui:$VVERSION && popd
|
||||
pushd manifests/kustomize/options/catalog/base && kustomize edit set image ghcr.io/kubeflow/model-registry/server=ghcr.io/kubeflow/model-registry/server:$VVERSION && popd
|
||||
pushd manifests/kustomize/base && kustomize edit set image ghcr.io/kubeflow/hub/server=ghcr.io/kubeflow/hub/server:$VVERSION && popd
|
||||
pushd manifests/kustomize/options/csi && kustomize edit set image ghcr.io/kubeflow/hub/storage-initializer=ghcr.io/kubeflow/hub/storage-initializer:$VVERSION && popd
|
||||
pushd manifests/kustomize/options/ui/base && kustomize edit set image model-registry-ui=ghcr.io/kubeflow/hub/ui:$VVERSION && popd
|
||||
pushd manifests/kustomize/options/catalog/base && kustomize edit set image ghcr.io/kubeflow/hub/server=ghcr.io/kubeflow/hub/server:$VVERSION && popd
|
||||
git add .
|
||||
git commit -s
|
||||
|
||||
@@ -142,4 +142,3 @@ Please notice the OpenAPI spec in the Reference section is automatically updated
|
||||
See at the beginning "Prerequisites", to facilitate the next round, now it's the best time:
|
||||
- bump already MR py client to the next version, example PR
|
||||
https://github.com/kubeflow/model-registry/pull/871
|
||||
|
||||
|
||||
@@ -219,7 +219,7 @@ $(LOCALBIN):
|
||||
deploy-apply: deploy-namespace deploy-kustomize
|
||||
@echo "Applying kustomize manifests..."
|
||||
cd "$(KUSTOMIZE_E2E)" && \
|
||||
$(KUSTOMIZE) edit set image "ghcr.io/kubeflow/model-registry/server=$(KIND_IMAGE)"
|
||||
$(KUSTOMIZE) edit set image "ghcr.io/kubeflow/hub/server=$(KIND_IMAGE)"
|
||||
kubectl apply -k "$(KUSTOMIZE_E2E)"
|
||||
@echo "Waiting for PostgreSQL to be ready..."
|
||||
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=postgres -n "$(CATALOG_NAMESPACE)" --timeout=120s
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
all: install tidy
|
||||
|
||||
IMG_VERSION ?= latest
|
||||
IMG ?= ghcr.io/kubeflow/model-registry/server
|
||||
IMG ?= ghcr.io/kubeflow/hub/server
|
||||
BUILD_IMAGE ?= true # whether to build the MR server image
|
||||
|
||||
.PHONY: install
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
|
||||
############### Default settings ###############
|
||||
CONTAINER_TOOL=docker
|
||||
IMG_UI=ghcr.io/kubeflow/model-registry/ui:latest
|
||||
IMG_UI_STANDALONE=ghcr.io/kubeflow/model-registry/ui-standalone:latest
|
||||
IMG_UI_FEDERATED=ghcr.io/kubeflow/model-registry/ui-federated:latest
|
||||
IMG_UI=ghcr.io/kubeflow/hub/ui:latest
|
||||
IMG_UI_STANDALONE=ghcr.io/kubeflow/hub/ui-standalone:latest
|
||||
IMG_UI_FEDERATED=ghcr.io/kubeflow/hub/ui-federated:latest
|
||||
PLATFORM=linux/amd64
|
||||
STYLE_THEME=mui-theme
|
||||
DEPLOYMENT_MODE=kubeflow
|
||||
|
||||
@@ -40,20 +40,20 @@ The following environment variables are used to configure the deployment and dev
|
||||
### `IMG_UI`
|
||||
|
||||
* **Description**: Specifies the image name and tag for the UI (with BFF).
|
||||
* **Default Value**: `ghcr.io/kubeflow/model-registry/ui:latest`
|
||||
* **Example**: `IMG_UI=ghcr.io/kubeflow/model-registry/ui:latest`
|
||||
* **Default Value**: `ghcr.io/kubeflow/hub/ui:latest`
|
||||
* **Example**: `IMG_UI=ghcr.io/kubeflow/hub/ui:latest`
|
||||
|
||||
### `IMG_UI_STANDALONE`
|
||||
|
||||
* **Description**: Specifies the image name and tag for the UI (with BFF) in **standalone mode**, used for local kind deployment.
|
||||
* **Default Value**: `ghcr.io/kubeflow/model-registry/ui-standalone:latest`
|
||||
* **Example**: `IMG_UI_STANDALONE=ghcr.io/kubeflow/model-registry/ui-standalone:latest`
|
||||
* **Default Value**: `ghcr.io/kubeflow/hub/ui-standalone:latest`
|
||||
* **Example**: `IMG_UI_STANDALONE=ghcr.io/kubeflow/hub/ui-standalone:latest`
|
||||
|
||||
### `IMG_UI_FEDERATED`
|
||||
|
||||
* **Description**: Specifies the image name and tag for the UI (with BFF) in **federated mode**, used for federated mode outside kubeflow.
|
||||
* **Default Value**: `ghcr.io/kubeflow/model-registry/ui-federated:latest`
|
||||
* **Example**: `IMG_UI_FEDERATED=ghcr.io/kubeflow/model-registry/ui-federated:latest`
|
||||
* **Default Value**: `ghcr.io/kubeflow/hub/ui-federated:latest`
|
||||
* **Example**: `IMG_UI_FEDERATED=ghcr.io/kubeflow/hub/ui-federated:latest`
|
||||
|
||||
### `PLATFORM`
|
||||
|
||||
|
||||
@@ -3361,7 +3361,7 @@ components:
|
||||
message:
|
||||
type: string
|
||||
description: Human-readable description of the event.
|
||||
example: "Successfully pulled image \"ghcr.io/kubeflow/model-registry/job/async-upload:latest\""
|
||||
example: "Successfully pulled image \"ghcr.io/kubeflow/hub/job/async-upload:latest\""
|
||||
ModelTransferJobList:
|
||||
description: List of ModelTransferJob entities.
|
||||
type: object
|
||||
|
||||
@@ -923,7 +923,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context,
|
||||
Containers: []corev1.Container{
|
||||
{
|
||||
Name: "async-upload",
|
||||
Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest",
|
||||
Image: "ghcr.io/kubeflow/hub/job/async-upload:latest",
|
||||
Env: []corev1.EnvVar{
|
||||
{Name: "MODEL_SYNC_SOURCE_TYPE", Value: "s3"},
|
||||
{Name: "MODEL_SYNC_SOURCE_AWS_KEY", Value: "models/my-model"},
|
||||
@@ -1045,7 +1045,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context,
|
||||
Containers: []corev1.Container{
|
||||
{
|
||||
Name: "async-upload",
|
||||
Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest",
|
||||
Image: "ghcr.io/kubeflow/hub/job/async-upload:latest",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1122,7 +1122,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context,
|
||||
Containers: []corev1.Container{
|
||||
{
|
||||
Name: "async-upload",
|
||||
Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest",
|
||||
Image: "ghcr.io/kubeflow/hub/job/async-upload:latest",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1168,7 +1168,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context,
|
||||
Spec: corev1.PodSpec{
|
||||
RestartPolicy: corev1.RestartPolicyNever,
|
||||
Containers: []corev1.Container{
|
||||
{Name: "async-upload", Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest"},
|
||||
{Name: "async-upload", Image: "ghcr.io/kubeflow/hub/job/async-upload:latest"},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -24,7 +24,7 @@ import (
|
||||
|
||||
const (
|
||||
// DefaultAsyncUploadImage is the default container image for async-upload jobs.
|
||||
DefaultAsyncUploadImage = "ghcr.io/kubeflow/model-registry/job/async-upload:latest"
|
||||
DefaultAsyncUploadImage = "ghcr.io/kubeflow/hub/job/async-upload:latest"
|
||||
asyncUploadConfigMapName = "model-registry-ui-config"
|
||||
asyncUploadConfigMapKey = "images-jobs-async-upload"
|
||||
)
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@ local_resource(
|
||||
)
|
||||
|
||||
docker_build_with_restart(
|
||||
"ghcr.io/kubeflow/model-registry/server:latest",
|
||||
"ghcr.io/kubeflow/hub/server:latest",
|
||||
context="../",
|
||||
dockerfile="../tilt.dockerfile",
|
||||
entrypoint=["/model-registry"],
|
||||
|
||||
@@ -84,7 +84,7 @@ local_resource(
|
||||
)
|
||||
|
||||
docker_build_with_restart(
|
||||
"ghcr.io/kubeflow/model-registry/controller",
|
||||
"ghcr.io/kubeflow/hub/controller",
|
||||
context="../../../",
|
||||
dockerfile="../../../tilt-controller.dockerfile",
|
||||
entrypoint=["/manager"],
|
||||
|
||||
@@ -113,7 +113,7 @@ local_resource(
|
||||
)
|
||||
|
||||
docker_build_with_restart(
|
||||
"ghcr.io/kubeflow/model-registry/ui:latest",
|
||||
"ghcr.io/kubeflow/hub/ui:latest",
|
||||
context="../../../",
|
||||
dockerfile="../../../tilt-ui.dockerfile",
|
||||
entrypoint=["/bff"],
|
||||
|
||||
+4
-4
@@ -12,7 +12,7 @@
|
||||
version: '3.8'
|
||||
services:
|
||||
model-registry-ui:
|
||||
image: ghcr.io/kubeflow/model-registry/ui-standalone:latest
|
||||
image: ghcr.io/kubeflow/hub/ui-standalone:latest
|
||||
pull_policy: always
|
||||
command:
|
||||
- --port=9000
|
||||
@@ -34,7 +34,7 @@ services:
|
||||
- "localhost:host-gateway"
|
||||
|
||||
model-catalog:
|
||||
image: ghcr.io/kubeflow/model-registry/server:latest
|
||||
image: ghcr.io/kubeflow/hub/server:latest
|
||||
pull_policy: always
|
||||
command: ["catalog", "--listen", "0.0.0.0:8081", "--catalogs-path", "/testdata/test-catalog-sources.yaml"]
|
||||
container_name: model-catalog
|
||||
@@ -53,10 +53,10 @@ services:
|
||||
- PGPASSWORD=demo
|
||||
|
||||
model-registry:
|
||||
image: ghcr.io/kubeflow/model-registry/server:latest
|
||||
image: ghcr.io/kubeflow/hub/server:latest
|
||||
pull_policy: always
|
||||
entrypoint: ["/bin/sh"]
|
||||
command:
|
||||
command:
|
||||
- -c
|
||||
- |
|
||||
if [ "$$DB_TYPE" = "postgres" ]; then
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
JOB_IMG_VERSION ?= latest # when testing locally with KinD, override default to a tag of choice and you can opt-in to BUILD_IMAGE=false below.
|
||||
JOB_IMG_REGISTRY ?= ghcr.io
|
||||
JOB_IMG_ORG ?= kubeflow
|
||||
JOB_IMG_NAME ?= model-registry/job/async-upload
|
||||
JOB_IMG_NAME ?= hub/job/async-upload
|
||||
JOB_IMG ?= $(JOB_IMG_REGISTRY)/$(JOB_IMG_ORG)/$(JOB_IMG_NAME):$(JOB_IMG_VERSION)
|
||||
BUILD_IMAGE ?= true # whether to build the MR server image
|
||||
CLUSTER_NAME ?= mr-e2e
|
||||
@@ -9,7 +9,7 @@ CLUSTER_NAME ?= mr-e2e
|
||||
# MR Server Params
|
||||
IMG_VERSION ?= latest
|
||||
# keep IMG consistent with root Makefile and ci/GHA:
|
||||
IMG ?= ghcr.io/kubeflow/model-registry/server
|
||||
IMG ?= ghcr.io/kubeflow/hub/server
|
||||
|
||||
.PHONY: deploy-latest-mr
|
||||
deploy-latest-mr:
|
||||
|
||||
@@ -66,7 +66,7 @@ spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: async-upload
|
||||
image: ghcr.io/kubeflow/model-registry/job/async-upload:latest
|
||||
image: ghcr.io/kubeflow/hub/job/async-upload:latest
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
readOnlyRootFilesystem: false
|
||||
|
||||
@@ -62,7 +62,7 @@ The integration tests require:
|
||||
## Environment Variables
|
||||
|
||||
- `MR_HOST_URL`: Model Registry URL (default: `http://localhost:8080`)
|
||||
- `CONTAINER_IMAGE_URI`: Container image for the async-upload job (default: `ghcr.io/kubeflow/model-registry/job/async-upload:latest`)
|
||||
- `CONTAINER_IMAGE_URI`: Container image for the async-upload job (default: `ghcr.io/kubeflow/hub/job/async-upload:latest`)
|
||||
|
||||
## What the Tests Do
|
||||
|
||||
|
||||
@@ -270,12 +270,12 @@ def wait_for_job_completion(
|
||||
|
||||
def get_termination_message(job_name: str, namespace: str, k8s_core_client) -> str | None:
|
||||
"""Get the termination message from a completed job's pod.
|
||||
|
||||
|
||||
Returns the termination message content or None if not found.
|
||||
"""
|
||||
try:
|
||||
pods = k8s_core_client.list_namespaced_pod(
|
||||
namespace=namespace,
|
||||
namespace=namespace,
|
||||
label_selector=f"job-name={job_name}"
|
||||
)
|
||||
for pod in pods.items:
|
||||
@@ -298,54 +298,54 @@ def validate_termination_message(
|
||||
expected_ma_id: str | None = None,
|
||||
) -> dict:
|
||||
"""Validate the termination message contains expected JSON structure with IDs.
|
||||
|
||||
|
||||
Args:
|
||||
termination_message: The raw termination message string
|
||||
expected_intent: Expected intent type (e.g., "create_model", "create_version", "update_artifact")
|
||||
expected_rm_id: Expected RegisteredModel ID (validates if provided)
|
||||
expected_mv_id: Expected ModelVersion ID (validates if provided)
|
||||
expected_ma_id: Expected ModelArtifact ID (validates if provided)
|
||||
|
||||
|
||||
Returns:
|
||||
The parsed termination message as a dict
|
||||
|
||||
|
||||
Raises:
|
||||
AssertionError if validation fails
|
||||
"""
|
||||
assert termination_message is not None, "Termination message should not be None"
|
||||
|
||||
|
||||
# Parse JSON
|
||||
try:
|
||||
result = json.loads(termination_message)
|
||||
except json.JSONDecodeError as e:
|
||||
pytest.fail(f"Termination message is not valid JSON: {e}\nMessage: {termination_message}")
|
||||
|
||||
|
||||
# Validate intent field is always present
|
||||
assert "intent" in result, f"Missing 'intent' in termination message: {result}"
|
||||
|
||||
|
||||
if expected_intent:
|
||||
assert result["intent"] == expected_intent, \
|
||||
f"Intent mismatch: expected {expected_intent}, got {result['intent']}"
|
||||
|
||||
|
||||
# Validate specific IDs if provided
|
||||
if expected_rm_id:
|
||||
assert "RegisteredModel" in result, f"Missing 'RegisteredModel' in termination message: {result}"
|
||||
assert "id" in result["RegisteredModel"], f"Missing 'id' in RegisteredModel: {result}"
|
||||
assert result["RegisteredModel"]["id"] == expected_rm_id, \
|
||||
f"RegisteredModel ID mismatch: expected {expected_rm_id}, got {result['RegisteredModel']['id']}"
|
||||
|
||||
|
||||
if expected_mv_id:
|
||||
assert "ModelVersion" in result, f"Missing 'ModelVersion' in termination message: {result}"
|
||||
assert "id" in result["ModelVersion"], f"Missing 'id' in ModelVersion: {result}"
|
||||
assert result["ModelVersion"]["id"] == expected_mv_id, \
|
||||
f"ModelVersion ID mismatch: expected {expected_mv_id}, got {result['ModelVersion']['id']}"
|
||||
|
||||
|
||||
if expected_ma_id:
|
||||
assert "ModelArtifact" in result, f"Missing 'ModelArtifact' in termination message: {result}"
|
||||
assert "id" in result["ModelArtifact"], f"Missing 'id' in ModelArtifact: {result}"
|
||||
assert result["ModelArtifact"]["id"] == expected_ma_id, \
|
||||
f"ModelArtifact ID mismatch: expected {expected_ma_id}, got {result['ModelArtifact']['id']}"
|
||||
|
||||
|
||||
print(f"✅ Termination message validated: {json.dumps(result, indent=2)}")
|
||||
return result
|
||||
|
||||
@@ -431,13 +431,13 @@ class JobResult:
|
||||
|
||||
def _run_job_and_wait(env, tmp_path, k8s, configmap_data=None) -> JobResult:
|
||||
"""Helper function to run the async upload job and wait for completion.
|
||||
|
||||
|
||||
Returns:
|
||||
JobResult containing job_name and termination_message
|
||||
"""
|
||||
# Configuration
|
||||
container_image_uri = os.environ.get(
|
||||
"CONTAINER_IMAGE_URI", "ghcr.io/kubeflow/model-registry/job/async-upload:latest"
|
||||
"CONTAINER_IMAGE_URI", "ghcr.io/kubeflow/hub/job/async-upload:latest"
|
||||
)
|
||||
job_name = f"test-async-upload-job-{uuid.uuid4().hex[:8]}"
|
||||
namespace = "default"
|
||||
@@ -502,11 +502,11 @@ def _run_job_and_wait(env, tmp_path, k8s, configmap_data=None) -> JobResult:
|
||||
pytest.fail("Job did not complete successfully")
|
||||
|
||||
print("Job completed successfully!")
|
||||
|
||||
|
||||
# Get termination message
|
||||
termination_message = get_termination_message(job_name, namespace, k8s.core)
|
||||
print(f"Termination message: {termination_message}")
|
||||
|
||||
|
||||
return JobResult(job_name=job_name, termination_message=termination_message)
|
||||
|
||||
|
||||
@@ -647,7 +647,7 @@ def test_update_artifact_integration(
|
||||
assert updated_ma.state == ArtifactState.LIVE, f"State was not updated to LIVE: {updated_ma.state}"
|
||||
print(f"✅ Artifact URI updated to: {updated_ma.uri}")
|
||||
print(f"✅ Artifact state updated to: {updated_ma.state}")
|
||||
|
||||
|
||||
# Validate termination message contains correct IDs
|
||||
# Note: update_artifact only returns the ModelArtifact ID since that's the only
|
||||
# entity being updated - the job doesn't look up parent RM/MV IDs
|
||||
@@ -657,7 +657,7 @@ def test_update_artifact_integration(
|
||||
expected_intent="update_artifact",
|
||||
expected_ma_id=ma.id,
|
||||
)
|
||||
|
||||
|
||||
print("Integration test completed successfully!")
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ spec:
|
||||
command:
|
||||
- /model-registry
|
||||
- proxy
|
||||
image: ghcr.io/kubeflow/model-registry/server:latest
|
||||
image: ghcr.io/kubeflow/hub/server:latest
|
||||
env:
|
||||
- name: DBCONFIG_USER
|
||||
valueFrom:
|
||||
|
||||
@@ -56,7 +56,7 @@ spec:
|
||||
args:
|
||||
- --listen=0.0.0.0:8080
|
||||
- --catalogs-path=/catalog/sources.yaml
|
||||
image: ghcr.io/kubeflow/model-registry/server:latest
|
||||
image: ghcr.io/kubeflow/hub/server:latest
|
||||
ports:
|
||||
- name: http-api
|
||||
containerPort: 8080
|
||||
|
||||
@@ -53,6 +53,6 @@ patches:
|
||||
name: model-catalog-server
|
||||
version: v1
|
||||
images:
|
||||
- name: ghcr.io/kubeflow/model-registry/server
|
||||
- name: ghcr.io/kubeflow/hub/server
|
||||
newName: model-registry
|
||||
newTag: catalog-test
|
||||
|
||||
@@ -49,7 +49,7 @@ spec:
|
||||
args:
|
||||
- --leader-elect
|
||||
- --health-probe-bind-address=:8081
|
||||
image: ghcr.io/kubeflow/model-registry/controller:latest
|
||||
image: ghcr.io/kubeflow/hub/controller:latest
|
||||
name: manager
|
||||
env:
|
||||
- name: NAMESPACE_LABEL
|
||||
|
||||
@@ -5,7 +5,7 @@ metadata:
|
||||
spec:
|
||||
container:
|
||||
name: storage-initializer
|
||||
image: ghcr.io/kubeflow/model-registry/storage-initializer:latest
|
||||
image: ghcr.io/kubeflow/hub/storage-initializer:latest
|
||||
env:
|
||||
- name: MODEL_REGISTRY_BASE_URL
|
||||
value: "model-registry-service.kubeflow.svc.cluster.local:8080"
|
||||
|
||||
@@ -9,5 +9,5 @@ resources:
|
||||
|
||||
images:
|
||||
- name: model-registry-ui
|
||||
newName: ghcr.io/kubeflow/model-registry/ui
|
||||
newName: ghcr.io/kubeflow/hub/ui
|
||||
newTag: latest
|
||||
|
||||
@@ -5,7 +5,7 @@ set -e
|
||||
# see Makefile for the IMG_ variables semantic
|
||||
IMG_REGISTRY="${IMG_REGISTRY:-ghcr.io}"
|
||||
IMG_ORG="${IMG_ORG:-kubeflow}"
|
||||
IMG_REPO="${IMG_REPO:-model-registry/server}"
|
||||
IMG_REPO="${IMG_REPO:-hub/server}"
|
||||
DOCKER_USER="${DOCKER_USER}"
|
||||
DOCKER_PWD="${DOCKER_PWD}"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ set -e
|
||||
|
||||
DIR="$(dirname "$0")"
|
||||
MR_NAMESPACE="${MR_NAMESPACE:-kubeflow}"
|
||||
IMG="${IMG:-ghcr.io/kubeflow/model-registry/server:latest}" # TODO RHOAIENG-30453 align consistency ./scripts/deploy_on_kind.sh uses IMG with :tag, Vs, Makefile(s) and ci/GHA we use IMG without trailing :tag
|
||||
IMG="${IMG:-ghcr.io/kubeflow/hub/server:latest}" # TODO RHOAIENG-30453 align consistency ./scripts/deploy_on_kind.sh uses IMG with :tag, Vs, Makefile(s) and ci/GHA we use IMG without trailing :tag
|
||||
DEPLOY_MANIFEST_DB="${DEPLOY_MANIFEST_DB:-db}" # subdirectory of manifests/kustomize/overlays to select which database: 'db' (MySQL) or 'postgres'
|
||||
|
||||
source ./${DIR}/utils.sh
|
||||
|
||||
@@ -13,14 +13,16 @@ source ./${DIR}/test_utils.sh
|
||||
KUBECTL=${KUBECTL:-"kubectl"}
|
||||
|
||||
# You can provide a local version of the model registry storage initializer
|
||||
# In that case, assure that is visible to the local k8s env, e.g., using
|
||||
# In that case, assure that is visible to the local k8s env, e.g., using
|
||||
# `kind load docker-image $MRCSI_IMG`
|
||||
MRCSI_IMG=${MRCSI_IMG:-"ghcr.io/kubeflow/model-registry/storage-initializer:main"}
|
||||
MRCSI_IMG=${MRCSI_IMG:-"ghcr.io/kubeflow/hub/storage-initializer:main"}
|
||||
|
||||
KSERVE_VERSION=${KSERVE_VERSION:-"0.16"}
|
||||
MODELREGISTRY_VERSION=${MODELREGISTRY_VERSION:-"v0.3.2"}
|
||||
MODELREGISTRY_CSI=${MODELREGISTRY_CSI:-"v0.3.2"}
|
||||
|
||||
# FIXME: Use ghcr.io/kubeflow/hub/* images after v0.3.9
|
||||
|
||||
# You can provide a local model registry container image
|
||||
MR_IMG=${MR_IMG:-"ghcr.io/kubeflow/model-registry/server:$MODELREGISTRY_VERSION"}
|
||||
# You can provide a local model registry storage initializer container image
|
||||
|
||||
@@ -12,13 +12,15 @@ KUBECTL=${KUBECTL:-"kubectl"}
|
||||
CLUSTER=${CLUSTER:-"kind"}
|
||||
|
||||
# You can provide a local version of the model registry storage initializer
|
||||
# In that case, assure that is visible to the local k8s env, e.g., using
|
||||
# In that case, assure that is visible to the local k8s env, e.g., using
|
||||
# `kind load docker-image $MRCSI_IMG`
|
||||
MRCSI_IMG=${MRCSI_IMG:-"ghcr.io/kubeflow/model-registry/storage-initializer:main"}
|
||||
MRCSI_IMG=${MRCSI_IMG:-"ghcr.io/kubeflow/hub/storage-initializer:main"}
|
||||
|
||||
KSERVE_VERSION=${KSERVE_VERSION:-"0.16"}
|
||||
MODELREGISTRY_VERSION=${MODELREGISTRY_VERSION:-"v0.3.2"}
|
||||
MODELREGISTRY_CSI=${MODELREGISTRY_CSI:-"v0.3.2"}
|
||||
#
|
||||
# FIXME: Use ghcr.io/kubeflow/hub/* images after v0.3.9
|
||||
|
||||
# You can provide a local model registry container image
|
||||
MR_IMG=${MR_IMG:-"ghcr.io/kubeflow/model-registry/server:$MODELREGISTRY_VERSION"}
|
||||
|
||||
@@ -18,7 +18,7 @@ Help() {
|
||||
MR_ROOT="$(dirname "$0")/../.."
|
||||
|
||||
namespace=kubeflow
|
||||
image=ghcr.io/kubeflow/model-registry/server:latest
|
||||
image=ghcr.io/kubeflow/hub/server:latest
|
||||
while getopts ":hn:i:" option; do
|
||||
case $option in
|
||||
h) # display Help
|
||||
@@ -40,7 +40,7 @@ if ! kubectl get namespace "$namespace" &> /dev/null; then
|
||||
fi
|
||||
# Apply model-registry kustomize manifests
|
||||
echo Using model registry image: $image
|
||||
cd $MR_ROOT/manifests/kustomize/base && kustomize edit set image ghcr.io/kubeflow/model-registry/server:latest=${image} && \
|
||||
cd $MR_ROOT/manifests/kustomize/base && kustomize edit set image ghcr.io/kubeflow/hub/server:latest=${image} && \
|
||||
kustomize edit set namespace $namespace && cd -
|
||||
cd $MR_ROOT/manifests/kustomize/overlays/db && kustomize edit set namespace $namespace && cd -
|
||||
kubectl -n $namespace apply -k "$MR_ROOT/manifests/kustomize/overlays/db"
|
||||
|
||||
Reference in New Issue
Block a user