From 5afca073b4cbe8a2fc852a377f682e6bc4ac10e2 Mon Sep 17 00:00:00 2001 From: Jorge Garcia Oncins Date: Fri, 25 Oct 2024 09:38:12 +0200 Subject: [PATCH 01/28] Update oauth-proxy version in compatiblity table for 2.8 The oauth-proxy version was bumped to v4.14 in https://github.com/opendatahub-io/data-science-pipelines-operator/pull/725 Signed-off-by: Jorge Garcia Oncins --- docs/release/compatibility.md | 2 +- docs/release/compatibility.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/release/compatibility.md b/docs/release/compatibility.md index 49bd0e5ba..7c260549e 100644 --- a/docs/release/compatibility.md +++ b/docs/release/compatibility.md @@ -6,7 +6,7 @@ Each row outlines the versions for individual subcomponents and images that are | dsp | kfp | argo | ml-metadata | envoy | ocp-pipelines | oauth-proxy | mariadb-103 | ubi-minimal | ubi-micro | openshift | |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----| -| 2.8 | 2.2.0 | 3.4.17 | 1.14.0 | 1.22.11 | N/A | v4.10 | 1 | N/A | N/A | 4.15,4.16,4.17 | +| 2.8 | 2.2.0 | 3.4.17 | 1.14.0 | 1.22.11 | N/A | v4.14 | 1 | N/A | N/A | 4.15,4.16,4.17 | | 2.7 | 2.2.0 | 3.4.17 | 1.14.0 | 1.22.11 | N/A | v4.10 | 1 | N/A | N/A | 4.15,4.16,4.17 | | 2.6 | 2.0.5 | 3.3.10 | 1.14.0 | 1.22.11 | N/A | v4.10 | 1 | N/A | N/A | 4.14,4.15,4.16 | | 2.5 | 2.0.5 | 3.3.10 | 1.14.0 | 1.22.11 | N/A | v4.10 | 1 | N/A | N/A | 4.14,4.15,4.16 | diff --git a/docs/release/compatibility.yaml b/docs/release/compatibility.yaml index 593a5e7e1..716a49e52 100644 --- a/docs/release/compatibility.yaml +++ b/docs/release/compatibility.yaml @@ -4,7 +4,7 @@ ml-metadata: 1.14.0 envoy: 1.22.11 ocp-pipelines: "N/A" - oauth-proxy: v4.10 + oauth-proxy: v4.14 mariadb-103: 1 ubi-minimal: "N/A" ubi-micro: "N/A" From c4c8bc07f2e1e762322e5312f8816afbf53abebf Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Mon, 4 Nov 2024 14:15:13 -0300 Subject: [PATCH 02/28] Added retry for integration test Signed-off-by: Helber Belmiro --- tests/dspa_v2_test.go | 50 +++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/tests/dspa_v2_test.go b/tests/dspa_v2_test.go index 719c5c73a..93ff0f0b2 100644 --- a/tests/dspa_v2_test.go +++ b/tests/dspa_v2_test.go @@ -21,9 +21,9 @@ package integration import ( "fmt" "testing" + "time" testUtil "github.com/opendatahub-io/data-science-pipelines-operator/tests/util" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/client" @@ -51,30 +51,38 @@ func (suite *IntegrationTestSuite) TestDSPADeployment() { } suite.T().Run("with default MariaDB and Minio", func(t *testing.T) { t.Run(fmt.Sprintf("should have %d pods", podCount), func(t *testing.T) { - podList := &corev1.PodList{} - // retrieve the running pods only, to allow for multiple reruns of the test suite - listOpts := []client.ListOption{ - client.InNamespace(suite.DSPANamespace), - client.MatchingFields{"status.phase": string(corev1.PodRunning)}, - } - err := suite.Clientmgr.k8sClient.List(suite.Ctx, podList, listOpts...) - require.NoError(t, err) - actualPodCount := len(podList.Items) - assert.Equal(t, podCount, actualPodCount) + timeout := time.Second * 10 + interval := time.Millisecond * 2 + actualPodCount := 0 - // Print out pod statuses for troubleshooting - if podCount != actualPodCount { - t.Log(fmt.Sprintf("expected %d pods to successfully deploy, got %d instead. Pods in the namespace:", podCount, actualPodCount)) - totalPodList := &corev1.PodList{} - listOpts1 := []client.ListOption{ + require.Eventually(t, func() bool { + podList := &corev1.PodList{} + // retrieve the running pods only, to allow for multiple reruns of the test suite + listOpts := []client.ListOption{ client.InNamespace(suite.DSPANamespace), + client.MatchingFields{"status.phase": string(corev1.PodRunning)}, } - err1 := suite.Clientmgr.k8sClient.List(suite.Ctx, totalPodList, listOpts1...) - require.NoError(t, err1) - for _, pod := range totalPodList.Items { - t.Log(fmt.Sprintf("Pod Name: %s, Status: %s", pod.Name, pod.Status.Phase)) + err := suite.Clientmgr.k8sClient.List(suite.Ctx, podList, listOpts...) + require.NoError(suite.T(), err) + actualPodCount = len(podList.Items) + + // Print out pod statuses for troubleshooting + if podCount != actualPodCount { + t.Log(fmt.Sprintf("expected %d pods to successfully deploy, got %d instead. Pods in the namespace:", podCount, actualPodCount)) + totalPodList := &corev1.PodList{} + listOpts1 := []client.ListOption{ + client.InNamespace(suite.DSPANamespace), + } + err1 := suite.Clientmgr.k8sClient.List(suite.Ctx, totalPodList, listOpts1...) + require.NoError(t, err1) + for _, pod := range totalPodList.Items { + t.Log(fmt.Sprintf("Pod Name: %s, Status: %s", pod.Name, pod.Status.Phase)) + } + return false + } else { + return true } - } + }, timeout, interval) }) for _, deployment := range deployments { t.Run(fmt.Sprintf("should have a ready %s deployment", deployment), func(t *testing.T) { From 40ca5edae1a86e7460e9c86a0de4de15664c95d4 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Wed, 30 Oct 2024 09:52:06 -0300 Subject: [PATCH 03/28] Use DSPA custom ca cert on MLMD and Persistence Agent clients Signed-off-by: Helber Belmiro --- .../internal/persistence-agent/deployment.yaml.tmpl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/config/internal/persistence-agent/deployment.yaml.tmpl b/config/internal/persistence-agent/deployment.yaml.tmpl index ac1711a81..1cf302e41 100644 --- a/config/internal/persistence-agent/deployment.yaml.tmpl +++ b/config/internal/persistence-agent/deployment.yaml.tmpl @@ -55,6 +55,9 @@ spec: - "--namespace={{.Namespace}}" - "--mlPipelineServiceHttpPort=8888" - "--mlPipelineServiceGRPCPort=8887" + {{ if and .CustomCABundle .PodToPodTLS }} + - "--caCertPath={{ .PiplinesCABundleMountPath }}" + {{ end }} livenessProbe: exec: command: @@ -96,6 +99,10 @@ spec: - mountPath: /var/run/secrets/kubeflow/tokens/persistenceagent-sa-token name: persistenceagent-sa-token subPath: ds-pipeline-persistenceagent-{{.Name}}-token + {{ if and .CustomCABundle .PodToPodTLS }} + - mountPath: {{ .CustomCABundleRootMountPath }} + name: ca-bundle + {{ end }} serviceAccountName: ds-pipeline-persistenceagent-{{.Name}} volumes: - name: persistenceagent-sa-token @@ -105,3 +112,8 @@ spec: audience: pipelines.kubeflow.org expirationSeconds: 3600 path: ds-pipeline-persistenceagent-{{.Name}}-token + {{ if and .CustomCABundle .PodToPodTLS }} + - name: ca-bundle + configMap: + name: {{ .CustomCABundle.ConfigMapName }} + {{ end }} From c1bdac2c16a4b53c1199befe87c14ab0006308da Mon Sep 17 00:00:00 2001 From: Humair Khan Date: Mon, 4 Nov 2024 14:31:29 -0500 Subject: [PATCH 04/28] update apiversion for test dspas Signed-off-by: Humair Khan --- tests/resources/dspa-external.yaml | 2 +- tests/resources/dspa.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/resources/dspa-external.yaml b/tests/resources/dspa-external.yaml index ed742d496..89c9db009 100644 --- a/tests/resources/dspa-external.yaml +++ b/tests/resources/dspa-external.yaml @@ -1,4 +1,4 @@ -apiVersion: datasciencepipelinesapplications.opendatahub.io/v1alpha1 +apiVersion: datasciencepipelinesapplications.opendatahub.io/v1 kind: DataSciencePipelinesApplication metadata: name: dspa-ext diff --git a/tests/resources/dspa.yaml b/tests/resources/dspa.yaml index 7429bab9b..893f6db1c 100644 --- a/tests/resources/dspa.yaml +++ b/tests/resources/dspa.yaml @@ -1,4 +1,4 @@ -apiVersion: datasciencepipelinesapplications.opendatahub.io/v1alpha1 +apiVersion: datasciencepipelinesapplications.opendatahub.io/v1 kind: DataSciencePipelinesApplication metadata: name: test-dspa From 2f9e362a6440220549071ca5aadd14793879e1ea Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Mon, 21 Oct 2024 12:55:47 -0300 Subject: [PATCH 05/28] Rename package_upload.sh to package_download.sh --- .github/scripts/python_package_upload/Dockerfile | 6 +++--- .../{package_upload.sh => package_download.sh} | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename .github/scripts/python_package_upload/{package_upload.sh => package_download.sh} (100%) diff --git a/.github/scripts/python_package_upload/Dockerfile b/.github/scripts/python_package_upload/Dockerfile index 94d064084..981e51c74 100644 --- a/.github/scripts/python_package_upload/Dockerfile +++ b/.github/scripts/python_package_upload/Dockerfile @@ -4,12 +4,12 @@ FROM docker.io/python:3.9 WORKDIR /app # Copy the script into the container -COPY package_upload.sh /app/package_upload.sh +COPY package_download.sh /app/package_download.sh # Make sure the script is executable -RUN chmod +x /app/package_upload.sh +RUN chmod +x /app/package_download.sh # Store the files in a folder VOLUME /app/packages -ENTRYPOINT ["/app/package_upload.sh"] +ENTRYPOINT ["/app/package_download.sh"] diff --git a/.github/scripts/python_package_upload/package_upload.sh b/.github/scripts/python_package_upload/package_download.sh similarity index 100% rename from .github/scripts/python_package_upload/package_upload.sh rename to .github/scripts/python_package_upload/package_download.sh From 3cc82bc3899bec5e6663fe9629660ed03b542be5 Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Thu, 12 Sep 2024 14:40:32 -0300 Subject: [PATCH 06/28] Improve documentation for tLSClientConfig --- controllers/database.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/controllers/database.go b/controllers/database.go index 9243d1761..fe08f7145 100644 --- a/controllers/database.go +++ b/controllers/database.go @@ -47,6 +47,22 @@ var mariadbTemplates = []string{ "mariadb/default/tls-config.yaml.tmpl", } +// tLSClientConfig creates and returns a TLS client configuration that includes +// a set of custom CA certificates for secure communication. It reads CA +// certificates from the environment variable `SSL_CERT_FILE` if it is set, +// and appends any additional certificates passed as input. +// +// Parameters: +// +// pems [][]byte: PEM-encoded certificates to be appended to the +// root certificate pool. +// +// Returns: +// +// *cryptoTls.Config: A TLS configuration with the certificates set to the updated +// certificate pool. +// error: An error if there is a failure in parsing any of the provided PEM +// certificates, or nil if successful. func tLSClientConfig(pems [][]byte) (*cryptoTls.Config, error) { rootCertPool := x509.NewCertPool() @@ -120,7 +136,6 @@ var ConnectAndQueryDatabase = func( // don't set anything case "true": var err error - // if pemCerts is empty, that is OK, we still add OS certs to the tls config tlsConfig, err = tLSClientConfig(pemCerts) if err != nil { log.Info(fmt.Sprintf("Encountered error when processing custom ca bundle, Error: %v", err)) From eea84a0deb4e2d5ef7159a035598afabd14234b9 Mon Sep 17 00:00:00 2001 From: Humair Khan Date: Fri, 8 Nov 2024 12:10:16 -0500 Subject: [PATCH 07/28] update ouath/envoy img to match params in generator Signed-off-by: Humair Khan --- scripts/release/params.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/release/params.py b/scripts/release/params.py index 973a412e9..6be8251c3 100644 --- a/scripts/release/params.py +++ b/scripts/release/params.py @@ -30,9 +30,9 @@ } STATIC_REPOS = { - "IMAGES_MLMDENVOY": "registry.redhat.io/openshift-service-mesh/proxyv2-rhel8@sha256:a744c1b386fd5e4f94e43543e829df1bfdd1b564137917372a11da06872f4bcb", + "IMAGES_MLMDENVOY": "registry.redhat.io/openshift-service-mesh/proxyv2-rhel8@sha256:02b834fd74da71ec37f6a5c0d10aac9a679d1a0f4e510c4f77723ef2367e858a", "IMAGES_MARIADB": "registry.redhat.io/rhel8/mariadb-103@sha256:3d30992e60774f887c4e7959c81b0c41b0d82d042250b3b56f05ab67fd4cdee1", - "IMAGES_OAUTHPROXY": "registry.redhat.io/openshift4/ose-oauth-proxy@sha256:ab112105ac37352a2a4916a39d6736f5db6ab4c29bad4467de8d613e80e9bb33", + "IMAGES_OAUTHPROXY": "registry.redhat.io/openshift4/ose-oauth-proxy@sha256:4f8d66597feeb32bb18699326029f9a71a5aca4a57679d636b876377c2e95695", } OTHER_OPTIONS = { From 08231a30cbad8734746f91243f561b7c50942c0e Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Wed, 13 Nov 2024 14:34:52 -0300 Subject: [PATCH 08/28] How run the test suite locally --- .github/scripts/tests/README.md | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/scripts/tests/README.md diff --git a/.github/scripts/tests/README.md b/.github/scripts/tests/README.md new file mode 100644 index 000000000..acb76eaa4 --- /dev/null +++ b/.github/scripts/tests/README.md @@ -0,0 +1,64 @@ +# Setup the local environment + +All the following commands must be executed in a single terminal instance. + +## Increase inotify Limits +To prevent file monitoring issues in development environments (e.g., IDEs or file sync tools), increase inotify limits: +```bash +sudo sysctl fs.inotify.max_user_instances=2280 +sudo sysctl fs.inotify.max_user_watches=1255360 +``` +## Create kind cluster +```bash +cat < /tmp/kubeflow-config +export KUBECONFIG=/tmp/kubeflow-config +``` +# docker +In order to by pass the docker limit issue while downloading the images. Let's use your credentials +```bash +docker login +``` + +Upload the secret. The following command will return an error. You need to replace `to` with user `username` +```bash +kubectl create secret generic regcred \ +--from-file=.dockerconfigjson=/home/to/.docker/config.json \ +--type=kubernetes.io/dockerconfigjson +``` + +# Test environment variables +Replace the `/path/to` in order to match the `data-science-pipelines-operator` folder +```bash +export GIT_WORKSPACE=/path/to/data-science-pipelines-operator +``` +The image registry is required because you are running the test locally. +It will build and upload the image to your repository. + +Replace `username` with your quay user +```bash +export REGISTRY_ADDRESS=quay.io/username +``` + +# Run the test +```bash +sh .github/scripts/tests/tests.sh --kind +``` From 0fc7597021aef9cd811c5649b2519caa56a2bf6e Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Wed, 13 Nov 2024 15:26:14 -0300 Subject: [PATCH 09/28] Bump DSPO test suite to KFP 2.10.0 --- tests/dspa_v2_test.go | 4 ++-- tests/resources/test-pipeline-run.yaml | 4 ++-- tests/resources/test-pipeline-with-custom-pip-server-run.yaml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/dspa_v2_test.go b/tests/dspa_v2_test.go index 93ff0f0b2..ce6eeedf5 100644 --- a/tests/dspa_v2_test.go +++ b/tests/dspa_v2_test.go @@ -51,8 +51,8 @@ func (suite *IntegrationTestSuite) TestDSPADeployment() { } suite.T().Run("with default MariaDB and Minio", func(t *testing.T) { t.Run(fmt.Sprintf("should have %d pods", podCount), func(t *testing.T) { - timeout := time.Second * 10 - interval := time.Millisecond * 2 + timeout := time.Second * 120 + interval := time.Second * 2 actualPodCount := 0 require.Eventually(t, func() bool { diff --git a/tests/resources/test-pipeline-run.yaml b/tests/resources/test-pipeline-run.yaml index f33ddf5e6..1ba3703ed 100644 --- a/tests/resources/test-pipeline-run.yaml +++ b/tests/resources/test-pipeline-run.yaml @@ -29,7 +29,7 @@ deploymentSpec: - -c - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ - \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.9.0'\ + \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.10.0'\ \ '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"3.9\"' && \"\ $0\" \"$@\"\n" - sh @@ -77,4 +77,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.9.0 +sdkVersion: kfp-2.10.0 diff --git a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml index d6713716f..06d2095ab 100644 --- a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml +++ b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml @@ -24,7 +24,7 @@ deploymentSpec: - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ \ python3 -m pip install --quiet --no-warn-script-location --index-url https://nginx-service.test-pypiserver.svc.cluster.local/simple/\ - \ 'kfp==2.9.0' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ + \ 'kfp==2.10.0' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ 3.9\"' && python3 -m pip install --quiet --no-warn-script-location --index-url\ \ https://nginx-service.test-pypiserver.svc.cluster.local/simple/ 'numpy'\ \ && \"$0\" \"$@\"\n" @@ -66,4 +66,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.9.0 +sdkVersion: kfp-2.10.0 From 7b35ab5ce9c296499d2870ae6946116b2e961d77 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Wed, 13 Nov 2024 08:31:46 -0300 Subject: [PATCH 10/28] Trimmed certificates Signed-off-by: Helber Belmiro --- controllers/dspipeline_params.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/controllers/dspipeline_params.go b/controllers/dspipeline_params.go index 2908a01d1..4efdbe4af 100644 --- a/controllers/dspipeline_params.go +++ b/controllers/dspipeline_params.go @@ -654,7 +654,7 @@ func (p *DSPAParams) ExtractParams(ctx context.Context, dsp *dspa.DataSciencePip // "odh-trusted-ca-bundle" can have fields: "odh-ca-bundle.crt" and "ca-bundle.crt", we need to utilize both for _, val := range globalCerts { // If the ca-bundle field is empty, ignore it - if val != "" { + if strings.TrimSpace(val) != "" { p.APICustomPemCerts = append(p.APICustomPemCerts, []byte(val)) } } @@ -679,7 +679,7 @@ func (p *DSPAParams) ExtractParams(ctx context.Context, dsp *dspa.DataSciencePip } dspaProvidedCABundle := util.GetConfigMapValue(dspaCaBundleCfgKey, dspaCAConfigMap) // If the ca-bundle field is empty, ignore it - if dspaProvidedCABundle != "" { + if strings.TrimSpace(dspaProvidedCABundle) != "" { p.APICustomPemCerts = append(p.APICustomPemCerts, []byte(dspaProvidedCABundle)) } } @@ -694,7 +694,7 @@ func (p *DSPAParams) ExtractParams(ctx context.Context, dsp *dspa.DataSciencePip return serviceCACfgErr } serviceCABundle := util.GetConfigMapValue(config.OpenshiftServiceCAConfigMapKey, serviceCA) - if serviceCABundle == "" { + if strings.TrimSpace(serviceCABundle) == "" { return fmt.Errorf("expected key %s from configmap %s not found", config.OpenshiftServiceCAConfigMapKey, config.OpenshiftServiceCAConfigMapName) } p.APICustomPemCerts = append(p.APICustomPemCerts, []byte(serviceCABundle)) @@ -729,7 +729,7 @@ func (p *DSPAParams) ExtractParams(ctx context.Context, dsp *dspa.DataSciencePip return sysCertsErr } - if len(certs) != 0 { + if len(bytes.TrimSpace(certs)) != 0 { p.APICustomPemCerts = append(p.APICustomPemCerts, certs) } } From bacb3e3d97a989850bae04048e8a761fce67ff46 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Thu, 14 Nov 2024 09:58:52 -0300 Subject: [PATCH 11/28] Removed comment from MLMD gRPC server config Signed-off-by: Helber Belmiro --- .../ml-metadata/metadata-grpc-tls-config-secret.yaml.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/internal/ml-metadata/metadata-grpc-tls-config-secret.yaml.tmpl b/config/internal/ml-metadata/metadata-grpc-tls-config-secret.yaml.tmpl index 83bf384ce..35b08dc13 100644 --- a/config/internal/ml-metadata/metadata-grpc-tls-config-secret.yaml.tmpl +++ b/config/internal/ml-metadata/metadata-grpc-tls-config-secret.yaml.tmpl @@ -19,5 +19,5 @@ stringData: ssl_config { server_cert: "{{.MlmdGrpcCertificateContents}}" server_key: "{{.MlmdGrpcPrivateKeyContents}}" - client_verify: false // controls mTLS, which we don't use, so hardcode to false + client_verify: false } From 166893ddc5d06ad9f2f486dca48926d713d18827 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Wed, 13 Nov 2024 12:55:00 -0300 Subject: [PATCH 12/28] Collect events and logs Signed-off-by: Helber Belmiro --- .github/workflows/kind-integration.yml | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/.github/workflows/kind-integration.yml b/.github/workflows/kind-integration.yml index f38c75069..b21338f7b 100644 --- a/.github/workflows/kind-integration.yml +++ b/.github/workflows/kind-integration.yml @@ -47,6 +47,47 @@ jobs: uses: ./.github/actions/kind - name: Run test + id: test working-directory: ${{ github.workspace }}/.github/scripts/tests run: | sh tests.sh --kind + continue-on-error: true + + - name: Collect events and logs + if: steps.test.outcome != 'success' + run: | + kubectl -n test-dspa get pods + kubectl -n opendatahub get pods + + POD_NAMES=$(kubectl -n test-dspa get pods -o custom-columns=":metadata.name") + + for POD_NAME in ${POD_NAMES}; do + echo "===== Pod: ${POD_NAME} =====" + + echo "----- EVENTS -----" + kubectl describe pod ${POD_NAME} -n test-dspa | grep -A 100 Events + + echo "----- LOGS -----" + kubectl logs ${POD_NAME} -n test-dspa + + echo "===========================" + echo "" + done + + POD_NAMES=$(kubectl -n opendatahub get pods -o custom-columns=":metadata.name") + + for POD_NAME in ${POD_NAMES}; do + echo "===== Pod: ${POD_NAME} =====" + + echo "----- EVENTS -----" + kubectl describe pod ${POD_NAME} -n opendatahub | grep -A 100 Events + + echo "----- LOGS -----" + kubectl logs ${POD_NAME} -n opendatahub + + echo "===========================" + echo "" + done + + exit 1 + From 6209cac1700398520139a568791e92a6a19bf71a Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Thu, 14 Nov 2024 15:48:32 -0300 Subject: [PATCH 13/28] Add logging and event collection for failed integration tests Signed-off-by: Helber Belmiro --- .github/scripts/tests/collect_logs.sh | 58 ++++++++++++++++++++++++++ .github/workflows/kind-integration.yml | 36 +--------------- 2 files changed, 60 insertions(+), 34 deletions(-) create mode 100755 .github/scripts/tests/collect_logs.sh diff --git a/.github/scripts/tests/collect_logs.sh b/.github/scripts/tests/collect_logs.sh new file mode 100755 index 000000000..29cd7c155 --- /dev/null +++ b/.github/scripts/tests/collect_logs.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -e + +DSPA_NS="" +DSPO_NS="" + +while [[ "$#" -gt 0 ]]; do + case $1 in + --dspa-ns) DSPA_NS="$2"; shift ;; + --dspo-ns) DSPO_NS="$2"; shift ;; + *) echo "Unknown parameter passed: $1"; exit 1 ;; + esac + shift +done + +if [[ -z "$DSPA_NS" || -z "$DSPO_NS" ]]; then + echo "Both --dspa-ns and --dspo-ns parameters are required." + exit 1 +fi + +function check_namespace { + if ! kubectl get namespace "$1" &>/dev/null; then + echo "Namespace '$1' does not exist." + exit 1 + fi +} + +function display_pod_info { + local NAMESPACE=$1 + local POD_NAMES + + POD_NAMES=$(kubectl -n "${DSPA_NS}" get pods -o custom-columns=":metadata.name") + + if [[ -z "${POD_NAMES}" ]]; then + echo "No pods found in namespace '${NAMESPACE}'." + return + fi + + for POD_NAME in ${POD_NAMES}; do + echo "===== Pod: ${POD_NAME} in ${NAMESPACE} =====" + + echo "----- EVENTS -----" + kubectl describe pod "${POD_NAME}" -n "${NAMESPACE}" | grep -A 100 Events || echo "No events found for pod ${POD_NAME}." + + echo "----- LOGS -----" + kubectl logs "${POD_NAME}" -n "${NAMESPACE}" || echo "No logs found for pod ${POD_NAME}." + + echo "===========================" + echo "" + done +} + +check_namespace "$DSPA_NS" +check_namespace "$DSPO_NS" + +display_pod_info "$DSPA_NS" +display_pod_info "$DSPO_NS" diff --git a/.github/workflows/kind-integration.yml b/.github/workflows/kind-integration.yml index b21338f7b..321c40e1c 100644 --- a/.github/workflows/kind-integration.yml +++ b/.github/workflows/kind-integration.yml @@ -55,39 +55,7 @@ jobs: - name: Collect events and logs if: steps.test.outcome != 'success' + working-directory: ${{ github.workspace }}/.github/scripts/tests run: | - kubectl -n test-dspa get pods - kubectl -n opendatahub get pods - - POD_NAMES=$(kubectl -n test-dspa get pods -o custom-columns=":metadata.name") - - for POD_NAME in ${POD_NAMES}; do - echo "===== Pod: ${POD_NAME} =====" - - echo "----- EVENTS -----" - kubectl describe pod ${POD_NAME} -n test-dspa | grep -A 100 Events - - echo "----- LOGS -----" - kubectl logs ${POD_NAME} -n test-dspa - - echo "===========================" - echo "" - done - - POD_NAMES=$(kubectl -n opendatahub get pods -o custom-columns=":metadata.name") - - for POD_NAME in ${POD_NAMES}; do - echo "===== Pod: ${POD_NAME} =====" - - echo "----- EVENTS -----" - kubectl describe pod ${POD_NAME} -n opendatahub | grep -A 100 Events - - echo "----- LOGS -----" - kubectl logs ${POD_NAME} -n opendatahub - - echo "===========================" - echo "" - done - + ./collect_logs.sh --dspa-ns test-dspa --dspo-ns opendatahub exit 1 - From 2ff10a4c0e06b957061cf8cb3e47e0cd11f27acd Mon Sep 17 00:00:00 2001 From: VaniHaripriya Date: Fri, 15 Nov 2024 14:17:58 -0600 Subject: [PATCH 14/28] Upgrade argo images Signed-off-by: VaniHaripriya --- config/base/params.env | 4 ++-- scripts/release/params.py | 4 ++-- tests/resources/test-pipeline-run.yaml | 4 ++-- tests/resources/test-pipeline-with-custom-pip-server-run.yaml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/config/base/params.env b/config/base/params.env index 8b50425e2..85ce116f6 100644 --- a/config/base/params.env +++ b/config/base/params.env @@ -2,8 +2,8 @@ IMAGES_DSPO=quay.io/opendatahub/data-science-pipelines-operator:latest IMAGES_APISERVER=quay.io/opendatahub/ds-pipelines-api-server:latest IMAGES_PERSISTENCEAGENT=quay.io/opendatahub/ds-pipelines-persistenceagent:latest IMAGES_SCHEDULEDWORKFLOW=quay.io/opendatahub/ds-pipelines-scheduledworkflow:latest -IMAGES_ARGO_EXEC=quay.io/opendatahub/ds-pipelines-argo-argoexec:v3.4.17-upstream -IMAGES_ARGO_WORKFLOWCONTROLLER=quay.io/opendatahub/ds-pipelines-argo-workflowcontroller:v3.4.17-upstream +IMAGES_ARGO_EXEC=quay.io/opendatahub/ds-pipelines-argo-argoexec:odh-v3.4.17-1 +IMAGES_ARGO_WORKFLOWCONTROLLER=quay.io/opendatahub/ds-pipelines-argo-workflowcontroller:odh-v3.4.17-1 IMAGES_LAUNCHER=quay.io/opendatahub/ds-pipelines-launcher:latest IMAGES_DRIVER=quay.io/opendatahub/ds-pipelines-driver:latest IMAGES_MLMDGRPC=quay.io/opendatahub/mlmd-grpc-server:latest diff --git a/scripts/release/params.py b/scripts/release/params.py index 6be8251c3..4a44437c3 100644 --- a/scripts/release/params.py +++ b/scripts/release/params.py @@ -16,11 +16,11 @@ TAGGED_REPOS = { "IMAGES_ARGO_WORKFLOWCONTROLLER" : { - "TAG": "3.3.10-upstream", + "TAG": "odh-v3.4.17-1", "REPO": "ds-pipelines-argo-workflowcontroller" }, "IMAGES_ARGO_EXEC" : { - "TAG": "3.3.10-upstream", + "TAG": "odh-v3.4.17-1", "REPO": "ds-pipelines-argo-argoexec" }, "IMAGES_MLMDGRPC": { diff --git a/tests/resources/test-pipeline-run.yaml b/tests/resources/test-pipeline-run.yaml index 1ba3703ed..f92d80046 100644 --- a/tests/resources/test-pipeline-run.yaml +++ b/tests/resources/test-pipeline-run.yaml @@ -29,7 +29,7 @@ deploymentSpec: - -c - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ - \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.10.0'\ + \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.10.1'\ \ '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"3.9\"' && \"\ $0\" \"$@\"\n" - sh @@ -77,4 +77,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.10.0 +sdkVersion: kfp-2.10.1 diff --git a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml index 06d2095ab..da3e6352c 100644 --- a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml +++ b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml @@ -24,7 +24,7 @@ deploymentSpec: - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ \ python3 -m pip install --quiet --no-warn-script-location --index-url https://nginx-service.test-pypiserver.svc.cluster.local/simple/\ - \ 'kfp==2.10.0' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ + \ 'kfp==2.10.1' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ 3.9\"' && python3 -m pip install --quiet --no-warn-script-location --index-url\ \ https://nginx-service.test-pypiserver.svc.cluster.local/simple/ 'numpy'\ \ && \"$0\" \"$@\"\n" @@ -66,4 +66,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.10.0 +sdkVersion: kfp-2.10.1 From 7591b60cf3adbb11c389499d5fe43d8b2157611c Mon Sep 17 00:00:00 2001 From: Humair Khan Date: Mon, 18 Nov 2024 09:33:21 -0500 Subject: [PATCH 15/28] chore: update dependencies Signed-off-by: Humair Khan --- go.mod | 6 +++--- go.sum | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index eb6f7e300..587445d58 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-cmp v0.5.9 // indirect @@ -85,7 +85,7 @@ require ( go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect golang.org/x/crypto v0.21.0 // indirect - golang.org/x/net v0.21.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.7.0 // indirect golang.org/x/sync v0.2.0 // indirect golang.org/x/sys v0.18.0 // indirect @@ -94,7 +94,7 @@ require ( golang.org/x/time v0.3.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/protobuf v1.35.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index c3e7fa823..f3791e035 100644 --- a/go.sum +++ b/go.sum @@ -897,8 +897,9 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -2031,8 +2032,9 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.35.0 h1:5FHv5qHqN8bh7EFIRK0/nQppniyPd5pqKgCXFCbGkTs= +google.golang.org/protobuf v1.35.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 4e6c60ef89009eaf90164672078a924c913b7362 Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Wed, 13 Nov 2024 13:33:27 -0300 Subject: [PATCH 16/28] Print if REGISTRY_ADDRESS is not defined --- .github/scripts/tests/tests.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/scripts/tests/tests.sh b/.github/scripts/tests/tests.sh index ae54c80ff..07c27455c 100755 --- a/.github/scripts/tests/tests.sh +++ b/.github/scripts/tests/tests.sh @@ -31,7 +31,10 @@ ENDPOINT_TYPE="service" get_dspo_image() { if [ "$REGISTRY_ADDRESS" = "" ]; then - echo "REGISTRY_ADDRESS variable not defined." && exit 1 + # this function is called by `IMG=$(get_dspo_image)` that captures the standard output of get_dspo_image + set -x + echo "REGISTRY_ADDRESS variable not defined." + exit 1 fi local image="${REGISTRY_ADDRESS}/data-science-pipelines-operator" echo $image From e361f0f292ef5b7279534148697fcbcca2350f4e Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Tue, 19 Nov 2024 08:19:27 -0300 Subject: [PATCH 17/28] Bump k8s version to 1.30 --- .github/actions/kind/action.yml | 8 ++++++-- .github/workflows/kind-integration.yml | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/actions/kind/action.yml b/.github/actions/kind/action.yml index 196239527..a419498a2 100644 --- a/.github/actions/kind/action.yml +++ b/.github/actions/kind/action.yml @@ -35,10 +35,14 @@ runs: EOF' - name: Setup KinD cluster - uses: helm/kind-action@v1.8.0 + uses: helm/kind-action@v1 with: cluster_name: cluster - version: v0.17.0 + # The kind version to use + version: v0.25.0 + # The Docker image for the cluster nodes - https://hub.docker.com/r/kindest/node/ + node_image: kindest/node:v1.30.6@sha256:b6d08db72079ba5ae1f4a88a09025c0a904af3b52387643c285442afb05ab994 + # The path to the kind config file config: ${{ env.KIND_CONFIG_FILE }} - name: Print cluster info diff --git a/.github/workflows/kind-integration.yml b/.github/workflows/kind-integration.yml index 321c40e1c..1c139cd74 100644 --- a/.github/workflows/kind-integration.yml +++ b/.github/workflows/kind-integration.yml @@ -11,6 +11,7 @@ on: - config/** - tests/** - .github/resources/** + - .github/actions/** - '.github/workflows/kind-integration.yml' - '.github/scripts/tests/tests.sh' - Makefile From 6a5a1f76f40ddb7767561d95367ed79ed0ddea37 Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Thu, 21 Nov 2024 15:01:41 -0300 Subject: [PATCH 18/28] How to debug using GoLand --- .github/scripts/tests/README.md | 42 ++++++++++++++++++++++++++++----- README.md | 18 +------------- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/.github/scripts/tests/README.md b/.github/scripts/tests/README.md index acb76eaa4..d7cbb4824 100644 --- a/.github/scripts/tests/README.md +++ b/.github/scripts/tests/README.md @@ -8,6 +8,9 @@ To prevent file monitoring issues in development environments (e.g., IDEs or fil sudo sysctl fs.inotify.max_user_instances=2280 sudo sysctl fs.inotify.max_user_watches=1255360 ``` +## Prerequisites +* Kind https://kind.sigs.k8s.io/ + ## Create kind cluster ```bash cat < /tmp/kubeflow-config export KUBECONFIG=/tmp/kubeflow-config ``` -# docker +## docker In order to by pass the docker limit issue while downloading the images. Let's use your credentials ```bash -docker login +docker login -u='...' -p='...' quay.io ``` Upload the secret. The following command will return an error. You need to replace `to` with user `username` ```bash kubectl create secret generic regcred \ ---from-file=.dockerconfigjson=/home/to/.docker/config.json \ +--from-file=.dockerconfigjson=$HOME/.docker/config.json \ --type=kubernetes.io/dockerconfigjson ``` -# Test environment variables +## Test environment variables Replace the `/path/to` in order to match the `data-science-pipelines-operator` folder ```bash export GIT_WORKSPACE=/path/to/data-science-pipelines-operator @@ -58,7 +61,34 @@ Replace `username` with your quay user export REGISTRY_ADDRESS=quay.io/username ``` -# Run the test +## Run the test ```bash sh .github/scripts/tests/tests.sh --kind ``` + +# Debug a test using GoLand +Let's say you wish to debug the `Should create a Pipeline Run` test. +The first step is right click inside the method content and select the menu +`Run 'TestIntegrationTestSuite'`. It will fail because you need to fill some parameters. +Edit the configuration for `TestIntegrationTestSuite/TestPipelineSuccessfulRun/Should_create_a_Pipeline_Run in github.com/opendatahub-io/data-science-pipelines-operator/tests` +```` +-k8sApiServerHost=https://127.0.0.1:39873 +-kubeconfig=/tmp/kubeflow-config +-DSPANamespace=test-dspa +-DSPAPath=/path/to/data-science-pipelines-operator/tests/resources/dspa-lite.yaml +```` +## How to retrieve the parameters above +* `k8sApiServerHost`: inspect the kubeconfig and retrieve the server URL from there +* `kubeconfig`: the path where you stored the output of `kind get kubeconfig` +* `DSPANamespace`: namespace +* `DSPAPath`: full path for the dspa.yaml + +`Should create a Pipeline Run`, `DSPANamespace` and `DSPAPath` depends on the test scenario. + +If you wish to keep the resources, add `-skipCleanup=True` in the config above. + +## If you wish to rerun the test you need to delete the dspa +```bash +$ kubectl delete datasciencepipelinesapplications test-dspa -n test-dspa +datasciencepipelinesapplication.datasciencepipelinesapplications.opendatahub.io "test-dspa" deleted +``` diff --git a/README.md b/README.md index 94c33e347..423de9720 100644 --- a/README.md +++ b/README.md @@ -504,23 +504,7 @@ oc delete project ${ODH_NS} ## Run tests -Simply clone the directory and execute `make test`. - -To run it without `make` you can run the following: - -```bash -tmpFolder=$(mktemp -d) -go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest -export KUBEBUILDER_ASSETS=$(${GOPATH}/bin/setup-envtest use 1.25.0 --bin-dir ${tmpFolder}/bin -p path) -go test ./... -coverprofile cover.out - -# once $KUBEBUILDER_ASSETS you can also run the full test suite successfully by running: -pre-commit run --all-files -``` - -You can find a more permanent location to install `setup-envtest` into on your local filesystem and export -`KUBEBUILDER_ASSETS` into your `.bashrc` or equivalent. By doing this you can always run `pre-commit run --all-files` -without having to repeat these steps. +See `.github/scripts/tests/README.md`(https://github.com/opendatahub-io/data-science-pipelines-operator/blob/main/.github/scripts/tests/README.md) ## Metrics From 44a72ef9b8975ff650717a41a342b2008936f400 Mon Sep 17 00:00:00 2001 From: "Ricardo M. Oliveira" Date: Mon, 25 Nov 2024 11:25:54 -0300 Subject: [PATCH 19/28] Adds the component_metadata.yaml to track KFP releases across DSP ones Signed-off-by: Ricardo M. Oliveira --- config/component_metadata.yaml | 4 ++++ docs/release/RELEASE.md | 11 ++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 config/component_metadata.yaml diff --git a/config/component_metadata.yaml b/config/component_metadata.yaml new file mode 100644 index 000000000..f553b6a33 --- /dev/null +++ b/config/component_metadata.yaml @@ -0,0 +1,4 @@ +releases: + - name: Kubeflow Pipelines + version: 2.2.0 + repoUrl: https://github.com/kubeflow/pipelines diff --git a/docs/release/RELEASE.md b/docs/release/RELEASE.md index 56c5cc8ad..dc34b8020 100644 --- a/docs/release/RELEASE.md +++ b/docs/release/RELEASE.md @@ -38,15 +38,16 @@ Steps on how to release `x.y+1` 1. Ensure `compatibility.yaml` is upto date, and generate a new `compatibility.md` - Use [release-tools] to accomplish this -2. Cut branch `vx.y+1` from `main/master` +2. If the changes include a code rebase from KFP repo, ensure `config/component_metadata.yaml` is updated with the respective KFP version +3. Cut branch `vx.y+1` from `main/master` - Do this for DSPO and DSP repos -3. Build images. Use the [build-tags] workflow, specifying the branches from above -4. Retrieve the sha images from the resulting workflow (check quay.io for the digests) +4. Build images. Use the [build-tags] workflow, specifying the branches from above +5. Retrieve the sha images from the resulting workflow (check quay.io for the digests) - Using [release-tools] generate a `params.env` and submit a new pr to `vx.y+1` branch - For images pulled from registry, ensure latest images are upto date -5. Perform any tests on the branch, confirm stability +6. Perform any tests on the branch, confirm stability - If issues are found, they should be corrected in `main/master` and be cherry-picked into this branch. -6. Create a tag release (using the branches from above) for `x.y+1.0` in DSPO and DSP (e.g. `v1.3.0`) +7. Create a tag release (using the branches from above) for `x.y+1.0` in DSPO and DSP (e.g. `v1.3.0`) ## PATCH Releases From 16ffc77f07c4c846a83456e2b454c9f3b39ed683 Mon Sep 17 00:00:00 2001 From: Diego Lovison Date: Wed, 11 Dec 2024 14:34:16 -0300 Subject: [PATCH 20/28] Document test.sh --- .github/scripts/tests/README.md | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/.github/scripts/tests/README.md b/.github/scripts/tests/README.md index d7cbb4824..ca6ddb87a 100644 --- a/.github/scripts/tests/README.md +++ b/.github/scripts/tests/README.md @@ -92,3 +92,64 @@ If you wish to keep the resources, add `-skipCleanup=True` in the config above. $ kubectl delete datasciencepipelinesapplications test-dspa -n test-dspa datasciencepipelinesapplication.datasciencepipelinesapplications.opendatahub.io "test-dspa" deleted ``` + +# `tests.sh` details +This Bash script is designed to set up and test environments for Data Science Pipelines Operator (DSPO) +using Kubernetes (K8s) or *OpenShift with RHOAI deployed*. It includes functionalities to deploy dependencies, +configure namespaces, build and deploy images, and execute integration tests. + +## **Features** +1. **Environment Variables Declaration**: + The script requires and verifies environment variables such as `GIT_WORKSPACE`, `REGISTRY_ADDRESS`, and `K8SAPISERVERHOST`. These variables define the workspace, registry for container images, and K8s API server address. + +2. **Deployment Functions**: + Functions like `deploy_dspo`, `deploy_minio`, and `deploy_mariadb` handle deploying necessary components (e.g., MinIO, MariaDB, PyPI server) to the cluster. + +3. **Namespace Configuration**: + Functions like `create_opendatahub_namespace` and `create_dspa_namespace` create and configure Kubernetes namespaces required for DSPO and other dependencies. + +4. **Integration Testing**: + The script provides commands to run integration tests for DSPO and its external connections using `run_tests` and `run_tests_dspa_external_connections`. + +5. **Cleanup and Resource Removal**: + Includes options like `--clean-infra` to remove namespaces and resources before running tests. + +6. **Conditional Execution**: + Supports setting up and testing environments for different targets: + - `kind` (local Kubernetes clusters) + - `rhoai` (Red Hat OpenShift AI) + +7. **Customizable Parameters**: + Allows passing values for paths, namespaces, and K8s API server via command-line arguments. + +## **Usage** +```bash +./tests.sh [OPTIONS] +``` + +### **Options** +- `--kind` + Targets local `kind` cluster. +- `--rhoai` + Targets RHOAI +- `--clean-infra` + Cleans existing resources before running tests. +- `--k8s-api-server-host ` + Specifies the Kubernetes API server host. +- `--dspa-namespace ` + Custom namespace for DSPA deployment. +- `--dspa-path ` + Path to DSPA resource YAML. +- `--endpoint-type ` + Specifies endpoint type (`service` or `route`). + +### **Example** +To deploy and test DSPA on a local `kind` cluster: +```bash +./tests.sh --kind --clean-infra --k8s-api-server-host "https://localhost:6443" +``` + +To deploy DSPA on RHOAI: +```bash +./tests.sh --rhoai --dspa-namespace "custom-namespace" +``` From 23fffa57beaea66d30d7887aadd893159610d920 Mon Sep 17 00:00:00 2001 From: mprahl Date: Mon, 6 Jan 2025 13:06:31 -0500 Subject: [PATCH 21/28] Add mprahl to the OWNERS file Signed-off-by: mprahl --- OWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OWNERS b/OWNERS index 447c12271..01a6b5ca8 100644 --- a/OWNERS +++ b/OWNERS @@ -6,6 +6,7 @@ approvers: - gregsheremeta - HumairAK - rimolive + - mprahl reviewers: - DharmitD - gmfrasca @@ -14,6 +15,7 @@ reviewers: - HumairAK - rimolive - VaniHaripriya + - mprahl emeritus_approvers: - accorvin - harshad16 From fc71e3e49fe180936e880b8fc2d18649a63e9b8a Mon Sep 17 00:00:00 2001 From: mprahl Date: Mon, 6 Jan 2025 13:07:12 -0500 Subject: [PATCH 22/28] Remove Greg from the OWNERS file Signed-off-by: mprahl --- OWNERS | 2 -- 1 file changed, 2 deletions(-) diff --git a/OWNERS b/OWNERS index 01a6b5ca8..2ddb174a4 100644 --- a/OWNERS +++ b/OWNERS @@ -3,14 +3,12 @@ approvers: - DharmitD - dsp-developers - gmfrasca - - gregsheremeta - HumairAK - rimolive - mprahl reviewers: - DharmitD - gmfrasca - - gregsheremeta - hbelmiro - HumairAK - rimolive From 22529bbf1284c4f48982cabbcd879d8b6222adbc Mon Sep 17 00:00:00 2001 From: VaniHaripriya Date: Fri, 13 Dec 2024 11:07:06 -0600 Subject: [PATCH 23/28] Add ilab kfp pipeline to the DSPO repo Signed-off-by: VaniHaripriya Co-authored-by: Matt Prahl --- api/v1/dspipeline_types.go | 10 ++++--- api/v1alpha1/dspipeline_types.go | 10 ++++--- ...b.io_datasciencepipelinesapplications.yaml | 10 +++++++ .../apiserver/default/deployment.yaml.tmpl | 12 ++++----- .../sample-pipeline/sample-config.yaml.tmpl | 26 +++++++++++++------ controllers/apiserver.go | 2 +- controllers/dspipeline_params.go | 10 ++++--- tests/pipeline_test.go | 25 ++++++++++++++++++ tests/resources/dspa-lite.yaml | 1 + tests/resources/test-pipeline-run.yaml | 2 +- ...t-pipeline-with-custom-pip-server-run.yaml | 4 +-- tests/util/rest.go | 11 ++++++++ 12 files changed, 95 insertions(+), 28 deletions(-) diff --git a/api/v1/dspipeline_types.go b/api/v1/dspipeline_types.go index 8f6253318..b79ad4ac4 100644 --- a/api/v1/dspipeline_types.go +++ b/api/v1/dspipeline_types.go @@ -69,9 +69,13 @@ type APIServer struct { // Include sample pipelines with the deployment of this DSP API Server. Default: true // +kubebuilder:default:=false // +kubebuilder:validation:Optional - EnableSamplePipeline bool `json:"enableSamplePipeline"` - ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` - ArgoDriverImage string `json:"argoDriverImage,omitempty"` + EnableSamplePipeline bool `json:"enableSamplePipeline"` + // Enable the Instructlab Multi-Phase Training pipeline with the deployment of this DSP API server. Default: false + // +kubebuilder:default:=false + // +kubebuilder:validation:Optional + EnableInstructLabPipeline bool `json:"enableInstructLabPipeline"` + ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` + ArgoDriverImage string `json:"argoDriverImage,omitempty"` // Specify custom Pod resource requirements for this component. Resources *ResourceRequirements `json:"resources,omitempty"` diff --git a/api/v1alpha1/dspipeline_types.go b/api/v1alpha1/dspipeline_types.go index 6a01914ac..6d5deb4e3 100644 --- a/api/v1alpha1/dspipeline_types.go +++ b/api/v1alpha1/dspipeline_types.go @@ -69,9 +69,13 @@ type APIServer struct { // Include sample pipelines with the deployment of this DSP API Server. Default: true // +kubebuilder:default:=false // +kubebuilder:validation:Optional - EnableSamplePipeline bool `json:"enableSamplePipeline"` - ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` - ArgoDriverImage string `json:"argoDriverImage,omitempty"` + EnableSamplePipeline bool `json:"enableSamplePipeline"` + // Enable the Instructlab Multi-Phase Training pipeline with the deployment of this DSP API server. Default: false + // +kubebuilder:default:=false + // +kubebuilder:validation:Optional + EnableInstructLabPipeline bool `json:"enableInstructLabPipeline"` + ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` + ArgoDriverImage string `json:"argoDriverImage,omitempty"` // Specify custom Pod resource requirements for this component. Resources *ResourceRequirements `json:"resources,omitempty"` diff --git a/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml b/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml index 380aaeb5c..dab76db84 100644 --- a/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml +++ b/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml @@ -105,6 +105,11 @@ spec: Server. Setting Deploy to false disables operator reconciliation. Default: true' type: boolean + enableInstructLabPipeline: + default: false + description: 'Enable the Instructlab Multi-Phase Training pipeline + with the deployment of this DSP API server. Default: false' + type: boolean enableOauth: default: true description: 'Create an Openshift Route for this DSP API Server. @@ -990,6 +995,11 @@ spec: Server. Setting Deploy to false disables operator reconciliation. Default: true' type: boolean + enableInstructLabPipeline: + default: false + description: 'Enable the Instructlab Multi-Phase Training pipeline + with the deployment of this DSP API server. Default: false' + type: boolean enableOauth: default: true description: 'Create an Openshift Route for this DSP API Server. diff --git a/config/internal/apiserver/default/deployment.yaml.tmpl b/config/internal/apiserver/default/deployment.yaml.tmpl index ee555d763..c4c180be7 100644 --- a/config/internal/apiserver/default/deployment.yaml.tmpl +++ b/config/internal/apiserver/default/deployment.yaml.tmpl @@ -147,7 +147,7 @@ spec: args: - --config=/config - -logtostderr=true - {{ if .APIServer.EnableSamplePipeline }} + {{ if or .APIServer.EnableSamplePipeline .APIServer.EnableInstructLabPipeline }} - --sampleconfig=/config/sample_config.json {{ end }} {{ if .PodToPodTLS }} @@ -206,18 +206,16 @@ spec: - mountPath: /etc/tls/private name: proxy-tls {{ end }} - {{ if or .APIServer.EnableSamplePipeline .CustomCABundle }} - {{ if .APIServer.EnableSamplePipeline }} + {{ if or .APIServer.EnableSamplePipeline .APIServer.EnableInstructLabPipeline}} - name: sample-config mountPath: /config/sample_config.json subPath: sample_config.json - name: sample-pipeline mountPath: /samples/ - {{ end }} - {{ if .CustomCABundle }} + {{ end }} + {{ if .CustomCABundle }} - mountPath: {{ .CustomCABundleRootMountPath }} name: ca-bundle - {{ end }} {{ end }} {{ if .APIServer.EnableRoute }} - name: oauth-proxy @@ -287,7 +285,7 @@ spec: configMap: name: {{ .CustomCABundle.ConfigMapName }} {{ end }} - {{ if .APIServer.EnableSamplePipeline }} + {{ if or .APIServer.EnableSamplePipeline .APIServer.EnableInstructLabPipeline}} - name: sample-config configMap: name: sample-config-{{.Name}} diff --git a/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl b/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl index 76e64d65d..0f0baed0f 100644 --- a/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl +++ b/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl @@ -7,11 +7,21 @@ metadata: app: {{.APIServerDefaultResourceName}} component: data-science-pipelines data: - sample_config.json: |- - [ - { - "name": "[Demo] iris-training", - "description": "[source code](https://github.com/opendatahub-io/data-science-pipelines/tree/master/samples/iris-sklearn) A simple pipeline to demonstrate a basic ML Training workflow", - "file": "/samples/iris-pipeline-compiled.yaml" - } - ] + sample_config.json: |- + [ + {{- if .EnableSamplePipeline }} + { + "name": "[Demo] iris-training", + "description": "[source code](https://github.com/opendatahub-io/data-science-pipelines/tree/master/samples/iris-sklearn) A simple pipeline to demonstrate a basic ML Training workflow", + "file": "/samples/iris-pipeline-compiled.yaml" + } + {{- if and .EnableSamplePipeline .EnableInstructLabPipeline }},{{ end }} + {{- end }} + {{- if .EnableInstructLabPipeline }} + { + "name": "[InstructLab] Multi-Phase Training Pipeline", + "description": "[source code](https://github.com/opendatahub-io/ilab-on-ocp) Instructlab Multi-Phase Training Pipeline", + "file": "/pipelines/instructlab.yaml" + } + {{- end }} + ] diff --git a/controllers/apiserver.go b/controllers/apiserver.go index 929ede232..8b1b47938 100644 --- a/controllers/apiserver.go +++ b/controllers/apiserver.go @@ -68,7 +68,7 @@ func (r *DSPAReconciler) ReconcileAPIServer(ctx context.Context, dsp *dspav1.Dat } for cmName, template := range samplePipelineTemplates { - if dsp.Spec.APIServer.EnableSamplePipeline { + if dsp.Spec.APIServer.EnableSamplePipeline || dsp.Spec.APIServer.EnableInstructLabPipeline { err := r.Apply(dsp, params, template) if err != nil { return err diff --git a/controllers/dspipeline_params.go b/controllers/dspipeline_params.go index 4efdbe4af..9ee424c50 100644 --- a/controllers/dspipeline_params.go +++ b/controllers/dspipeline_params.go @@ -92,9 +92,10 @@ type DSPAParams struct { CustomCABundle *dspa.CABundle DSPONamespace string // Use to enable tls communication between component pods. - PodToPodTLS bool - - APIServerServiceDNSName string + PodToPodTLS bool + EnableSamplePipeline bool + EnableInstructLabPipeline bool + APIServerServiceDNSName string } type DBConnection struct { @@ -601,6 +602,9 @@ func (p *DSPAParams) ExtractParams(ctx context.Context, dsp *dspa.DataSciencePip setStringDefault(argoDriverImageFromConfig, &p.APIServer.ArgoDriverImage) setResourcesDefault(config.APIServerResourceRequirements, &p.APIServer.Resources) + p.EnableSamplePipeline = dsp.Spec.APIServer.EnableSamplePipeline + p.EnableInstructLabPipeline = dsp.Spec.APIServer.EnableInstructLabPipeline + if p.APIServer.CustomServerConfig == nil { p.APIServer.CustomServerConfig = &dspa.ScriptConfigMap{ Name: config.CustomServerConfigMapNamePrefix + dsp.Name, diff --git a/tests/pipeline_test.go b/tests/pipeline_test.go index 057ce9233..3ab09e858 100644 --- a/tests/pipeline_test.go +++ b/tests/pipeline_test.go @@ -75,4 +75,29 @@ func (suite *IntegrationTestSuite) TestAPIServerDeployment() { require.NoError(t, err) assert.Equal(t, 200, response.StatusCode) }) + + suite.T().Run("Should check for InstructLab pipeline existence based on EnableInstructLabPipeline flag", func(t *testing.T) { + expectedDisplayName := "[InstructLab] Multi-Phase Training Pipeline" + + // Retrieve pipelines + pipelines, err := TestUtil.RetrievePipelines(t, suite.Clientmgr.httpClient, APIServerURL) + require.NoError(t, err, "Failed to retrieve pipelines") + + found := false + for _, pipeline := range pipelines.Pipelines { + if pipeline.DisplayName == expectedDisplayName { + found = true + break + } + } + if suite.DSPA.Spec.APIServer.EnableInstructLabPipeline { + expectedCount := 4 + assert.Equal(t, expectedCount, len(pipelines.Pipelines), "Pipeline count should match when EnableInstructLabPipeline flag is enabled") + assert.True(t, found, "InstructLab pipeline should exist when the flag is enabled") + } else { + expectedCount := 3 + assert.Equal(t, expectedCount, len(pipelines.Pipelines), "Pipeline count should match when EnableInstructLabPipeline flag is disabled") + assert.False(t, found, "InstructLab pipeline should not exist when the flag is disabled") + } + }) } diff --git a/tests/resources/dspa-lite.yaml b/tests/resources/dspa-lite.yaml index ff36007b1..d9789f19c 100644 --- a/tests/resources/dspa-lite.yaml +++ b/tests/resources/dspa-lite.yaml @@ -9,6 +9,7 @@ spec: deploy: true enableOauth: false enableSamplePipeline: true + enableInstructLabPipeline: true cABundle: configMapName: nginx-tls-config configMapKey: rootCA.crt diff --git a/tests/resources/test-pipeline-run.yaml b/tests/resources/test-pipeline-run.yaml index f92d80046..e57e88869 100644 --- a/tests/resources/test-pipeline-run.yaml +++ b/tests/resources/test-pipeline-run.yaml @@ -29,7 +29,7 @@ deploymentSpec: - -c - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ - \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.10.1'\ + \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.11.0'\ \ '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"3.9\"' && \"\ $0\" \"$@\"\n" - sh diff --git a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml index da3e6352c..704c77a56 100644 --- a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml +++ b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml @@ -24,7 +24,7 @@ deploymentSpec: - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ \ python3 -m pip install --quiet --no-warn-script-location --index-url https://nginx-service.test-pypiserver.svc.cluster.local/simple/\ - \ 'kfp==2.10.1' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ + \ 'kfp==2.11.0' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ 3.9\"' && python3 -m pip install --quiet --no-warn-script-location --index-url\ \ https://nginx-service.test-pypiserver.svc.cluster.local/simple/ 'numpy'\ \ && \"$0\" \"$@\"\n" @@ -66,4 +66,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.10.1 +sdkVersion: kfp-2.11.0 diff --git a/tests/util/rest.go b/tests/util/rest.go index 3a2b9d52c..4baad3bb2 100644 --- a/tests/util/rest.go +++ b/tests/util/rest.go @@ -94,6 +94,17 @@ func RetrievePipelineId(t *testing.T, httpClient http.Client, APIServerURL strin } } +func RetrievePipelines(t *testing.T, httpClient http.Client, APIServerURL string) (Pipeline, error) { + response, err := httpClient.Get(fmt.Sprintf("%s/apis/v2beta1/pipelines", APIServerURL)) + require.NoError(t, err) + responseData, err := io.ReadAll(response.Body) + require.NoError(t, err) + var pipelineData Pipeline + err = json.Unmarshal(responseData, &pipelineData) + require.NoError(t, err) + return pipelineData, nil +} + func FormatRequestBody(t *testing.T, pipelineID string, PipelineDisplayName string) []byte { requestBody := PipelineRequest{ DisplayName: PipelineDisplayName, From 053bc825880c1773ca65fe98c875d12b616293d9 Mon Sep 17 00:00:00 2001 From: Giulio Frasca Date: Fri, 10 Jan 2025 18:41:14 -0500 Subject: [PATCH 24/28] Revert "Add ilab kfp pipeline to the DSPO repo" This reverts commit 22529bbf1284c4f48982cabbcd879d8b6222adbc. --- api/v1/dspipeline_types.go | 10 +++---- api/v1alpha1/dspipeline_types.go | 10 +++---- ...b.io_datasciencepipelinesapplications.yaml | 10 ------- .../apiserver/default/deployment.yaml.tmpl | 12 +++++---- .../sample-pipeline/sample-config.yaml.tmpl | 26 ++++++------------- controllers/apiserver.go | 2 +- controllers/dspipeline_params.go | 10 +++---- tests/pipeline_test.go | 25 ------------------ tests/resources/dspa-lite.yaml | 1 - tests/resources/test-pipeline-run.yaml | 2 +- ...t-pipeline-with-custom-pip-server-run.yaml | 4 +-- tests/util/rest.go | 11 -------- 12 files changed, 28 insertions(+), 95 deletions(-) diff --git a/api/v1/dspipeline_types.go b/api/v1/dspipeline_types.go index b79ad4ac4..8f6253318 100644 --- a/api/v1/dspipeline_types.go +++ b/api/v1/dspipeline_types.go @@ -69,13 +69,9 @@ type APIServer struct { // Include sample pipelines with the deployment of this DSP API Server. Default: true // +kubebuilder:default:=false // +kubebuilder:validation:Optional - EnableSamplePipeline bool `json:"enableSamplePipeline"` - // Enable the Instructlab Multi-Phase Training pipeline with the deployment of this DSP API server. Default: false - // +kubebuilder:default:=false - // +kubebuilder:validation:Optional - EnableInstructLabPipeline bool `json:"enableInstructLabPipeline"` - ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` - ArgoDriverImage string `json:"argoDriverImage,omitempty"` + EnableSamplePipeline bool `json:"enableSamplePipeline"` + ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` + ArgoDriverImage string `json:"argoDriverImage,omitempty"` // Specify custom Pod resource requirements for this component. Resources *ResourceRequirements `json:"resources,omitempty"` diff --git a/api/v1alpha1/dspipeline_types.go b/api/v1alpha1/dspipeline_types.go index 6d5deb4e3..6a01914ac 100644 --- a/api/v1alpha1/dspipeline_types.go +++ b/api/v1alpha1/dspipeline_types.go @@ -69,13 +69,9 @@ type APIServer struct { // Include sample pipelines with the deployment of this DSP API Server. Default: true // +kubebuilder:default:=false // +kubebuilder:validation:Optional - EnableSamplePipeline bool `json:"enableSamplePipeline"` - // Enable the Instructlab Multi-Phase Training pipeline with the deployment of this DSP API server. Default: false - // +kubebuilder:default:=false - // +kubebuilder:validation:Optional - EnableInstructLabPipeline bool `json:"enableInstructLabPipeline"` - ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` - ArgoDriverImage string `json:"argoDriverImage,omitempty"` + EnableSamplePipeline bool `json:"enableSamplePipeline"` + ArgoLauncherImage string `json:"argoLauncherImage,omitempty"` + ArgoDriverImage string `json:"argoDriverImage,omitempty"` // Specify custom Pod resource requirements for this component. Resources *ResourceRequirements `json:"resources,omitempty"` diff --git a/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml b/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml index dab76db84..380aaeb5c 100644 --- a/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml +++ b/config/crd/bases/datasciencepipelinesapplications.opendatahub.io_datasciencepipelinesapplications.yaml @@ -105,11 +105,6 @@ spec: Server. Setting Deploy to false disables operator reconciliation. Default: true' type: boolean - enableInstructLabPipeline: - default: false - description: 'Enable the Instructlab Multi-Phase Training pipeline - with the deployment of this DSP API server. Default: false' - type: boolean enableOauth: default: true description: 'Create an Openshift Route for this DSP API Server. @@ -995,11 +990,6 @@ spec: Server. Setting Deploy to false disables operator reconciliation. Default: true' type: boolean - enableInstructLabPipeline: - default: false - description: 'Enable the Instructlab Multi-Phase Training pipeline - with the deployment of this DSP API server. Default: false' - type: boolean enableOauth: default: true description: 'Create an Openshift Route for this DSP API Server. diff --git a/config/internal/apiserver/default/deployment.yaml.tmpl b/config/internal/apiserver/default/deployment.yaml.tmpl index c4c180be7..ee555d763 100644 --- a/config/internal/apiserver/default/deployment.yaml.tmpl +++ b/config/internal/apiserver/default/deployment.yaml.tmpl @@ -147,7 +147,7 @@ spec: args: - --config=/config - -logtostderr=true - {{ if or .APIServer.EnableSamplePipeline .APIServer.EnableInstructLabPipeline }} + {{ if .APIServer.EnableSamplePipeline }} - --sampleconfig=/config/sample_config.json {{ end }} {{ if .PodToPodTLS }} @@ -206,16 +206,18 @@ spec: - mountPath: /etc/tls/private name: proxy-tls {{ end }} - {{ if or .APIServer.EnableSamplePipeline .APIServer.EnableInstructLabPipeline}} + {{ if or .APIServer.EnableSamplePipeline .CustomCABundle }} + {{ if .APIServer.EnableSamplePipeline }} - name: sample-config mountPath: /config/sample_config.json subPath: sample_config.json - name: sample-pipeline mountPath: /samples/ - {{ end }} - {{ if .CustomCABundle }} + {{ end }} + {{ if .CustomCABundle }} - mountPath: {{ .CustomCABundleRootMountPath }} name: ca-bundle + {{ end }} {{ end }} {{ if .APIServer.EnableRoute }} - name: oauth-proxy @@ -285,7 +287,7 @@ spec: configMap: name: {{ .CustomCABundle.ConfigMapName }} {{ end }} - {{ if or .APIServer.EnableSamplePipeline .APIServer.EnableInstructLabPipeline}} + {{ if .APIServer.EnableSamplePipeline }} - name: sample-config configMap: name: sample-config-{{.Name}} diff --git a/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl b/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl index 0f0baed0f..76e64d65d 100644 --- a/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl +++ b/config/internal/apiserver/sample-pipeline/sample-config.yaml.tmpl @@ -7,21 +7,11 @@ metadata: app: {{.APIServerDefaultResourceName}} component: data-science-pipelines data: - sample_config.json: |- - [ - {{- if .EnableSamplePipeline }} - { - "name": "[Demo] iris-training", - "description": "[source code](https://github.com/opendatahub-io/data-science-pipelines/tree/master/samples/iris-sklearn) A simple pipeline to demonstrate a basic ML Training workflow", - "file": "/samples/iris-pipeline-compiled.yaml" - } - {{- if and .EnableSamplePipeline .EnableInstructLabPipeline }},{{ end }} - {{- end }} - {{- if .EnableInstructLabPipeline }} - { - "name": "[InstructLab] Multi-Phase Training Pipeline", - "description": "[source code](https://github.com/opendatahub-io/ilab-on-ocp) Instructlab Multi-Phase Training Pipeline", - "file": "/pipelines/instructlab.yaml" - } - {{- end }} - ] + sample_config.json: |- + [ + { + "name": "[Demo] iris-training", + "description": "[source code](https://github.com/opendatahub-io/data-science-pipelines/tree/master/samples/iris-sklearn) A simple pipeline to demonstrate a basic ML Training workflow", + "file": "/samples/iris-pipeline-compiled.yaml" + } + ] diff --git a/controllers/apiserver.go b/controllers/apiserver.go index 8b1b47938..929ede232 100644 --- a/controllers/apiserver.go +++ b/controllers/apiserver.go @@ -68,7 +68,7 @@ func (r *DSPAReconciler) ReconcileAPIServer(ctx context.Context, dsp *dspav1.Dat } for cmName, template := range samplePipelineTemplates { - if dsp.Spec.APIServer.EnableSamplePipeline || dsp.Spec.APIServer.EnableInstructLabPipeline { + if dsp.Spec.APIServer.EnableSamplePipeline { err := r.Apply(dsp, params, template) if err != nil { return err diff --git a/controllers/dspipeline_params.go b/controllers/dspipeline_params.go index 9ee424c50..4efdbe4af 100644 --- a/controllers/dspipeline_params.go +++ b/controllers/dspipeline_params.go @@ -92,10 +92,9 @@ type DSPAParams struct { CustomCABundle *dspa.CABundle DSPONamespace string // Use to enable tls communication between component pods. - PodToPodTLS bool - EnableSamplePipeline bool - EnableInstructLabPipeline bool - APIServerServiceDNSName string + PodToPodTLS bool + + APIServerServiceDNSName string } type DBConnection struct { @@ -602,9 +601,6 @@ func (p *DSPAParams) ExtractParams(ctx context.Context, dsp *dspa.DataSciencePip setStringDefault(argoDriverImageFromConfig, &p.APIServer.ArgoDriverImage) setResourcesDefault(config.APIServerResourceRequirements, &p.APIServer.Resources) - p.EnableSamplePipeline = dsp.Spec.APIServer.EnableSamplePipeline - p.EnableInstructLabPipeline = dsp.Spec.APIServer.EnableInstructLabPipeline - if p.APIServer.CustomServerConfig == nil { p.APIServer.CustomServerConfig = &dspa.ScriptConfigMap{ Name: config.CustomServerConfigMapNamePrefix + dsp.Name, diff --git a/tests/pipeline_test.go b/tests/pipeline_test.go index 3ab09e858..057ce9233 100644 --- a/tests/pipeline_test.go +++ b/tests/pipeline_test.go @@ -75,29 +75,4 @@ func (suite *IntegrationTestSuite) TestAPIServerDeployment() { require.NoError(t, err) assert.Equal(t, 200, response.StatusCode) }) - - suite.T().Run("Should check for InstructLab pipeline existence based on EnableInstructLabPipeline flag", func(t *testing.T) { - expectedDisplayName := "[InstructLab] Multi-Phase Training Pipeline" - - // Retrieve pipelines - pipelines, err := TestUtil.RetrievePipelines(t, suite.Clientmgr.httpClient, APIServerURL) - require.NoError(t, err, "Failed to retrieve pipelines") - - found := false - for _, pipeline := range pipelines.Pipelines { - if pipeline.DisplayName == expectedDisplayName { - found = true - break - } - } - if suite.DSPA.Spec.APIServer.EnableInstructLabPipeline { - expectedCount := 4 - assert.Equal(t, expectedCount, len(pipelines.Pipelines), "Pipeline count should match when EnableInstructLabPipeline flag is enabled") - assert.True(t, found, "InstructLab pipeline should exist when the flag is enabled") - } else { - expectedCount := 3 - assert.Equal(t, expectedCount, len(pipelines.Pipelines), "Pipeline count should match when EnableInstructLabPipeline flag is disabled") - assert.False(t, found, "InstructLab pipeline should not exist when the flag is disabled") - } - }) } diff --git a/tests/resources/dspa-lite.yaml b/tests/resources/dspa-lite.yaml index d9789f19c..ff36007b1 100644 --- a/tests/resources/dspa-lite.yaml +++ b/tests/resources/dspa-lite.yaml @@ -9,7 +9,6 @@ spec: deploy: true enableOauth: false enableSamplePipeline: true - enableInstructLabPipeline: true cABundle: configMapName: nginx-tls-config configMapKey: rootCA.crt diff --git a/tests/resources/test-pipeline-run.yaml b/tests/resources/test-pipeline-run.yaml index e57e88869..f92d80046 100644 --- a/tests/resources/test-pipeline-run.yaml +++ b/tests/resources/test-pipeline-run.yaml @@ -29,7 +29,7 @@ deploymentSpec: - -c - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ - \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.11.0'\ + \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.10.1'\ \ '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"3.9\"' && \"\ $0\" \"$@\"\n" - sh diff --git a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml index 704c77a56..da3e6352c 100644 --- a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml +++ b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml @@ -24,7 +24,7 @@ deploymentSpec: - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ \ python3 -m pip install --quiet --no-warn-script-location --index-url https://nginx-service.test-pypiserver.svc.cluster.local/simple/\ - \ 'kfp==2.11.0' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ + \ 'kfp==2.10.1' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ 3.9\"' && python3 -m pip install --quiet --no-warn-script-location --index-url\ \ https://nginx-service.test-pypiserver.svc.cluster.local/simple/ 'numpy'\ \ && \"$0\" \"$@\"\n" @@ -66,4 +66,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.11.0 +sdkVersion: kfp-2.10.1 diff --git a/tests/util/rest.go b/tests/util/rest.go index 4baad3bb2..3a2b9d52c 100644 --- a/tests/util/rest.go +++ b/tests/util/rest.go @@ -94,17 +94,6 @@ func RetrievePipelineId(t *testing.T, httpClient http.Client, APIServerURL strin } } -func RetrievePipelines(t *testing.T, httpClient http.Client, APIServerURL string) (Pipeline, error) { - response, err := httpClient.Get(fmt.Sprintf("%s/apis/v2beta1/pipelines", APIServerURL)) - require.NoError(t, err) - responseData, err := io.ReadAll(response.Body) - require.NoError(t, err) - var pipelineData Pipeline - err = json.Unmarshal(responseData, &pipelineData) - require.NoError(t, err) - return pipelineData, nil -} - func FormatRequestBody(t *testing.T, pipelineID string, PipelineDisplayName string) []byte { requestBody := PipelineRequest{ DisplayName: PipelineDisplayName, From db1a96d95965c121c464d4c4988b2228b4d33327 Mon Sep 17 00:00:00 2001 From: Giulio Frasca Date: Tue, 14 Jan 2025 16:57:37 -0500 Subject: [PATCH 25/28] Update CI tests to use kfp 2.11.0 sdk Signed-off-by: Giulio Frasca --- tests/resources/test-pipeline-run.yaml | 4 ++-- tests/resources/test-pipeline-with-custom-pip-server-run.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/resources/test-pipeline-run.yaml b/tests/resources/test-pipeline-run.yaml index f92d80046..be3be5a14 100644 --- a/tests/resources/test-pipeline-run.yaml +++ b/tests/resources/test-pipeline-run.yaml @@ -29,7 +29,7 @@ deploymentSpec: - -c - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ - \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.10.1'\ + \ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.11.0'\ \ '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"3.9\"' && \"\ $0\" \"$@\"\n" - sh @@ -77,4 +77,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.10.1 +sdkVersion: kfp-2.11.0 diff --git a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml index da3e6352c..704c77a56 100644 --- a/tests/resources/test-pipeline-with-custom-pip-server-run.yaml +++ b/tests/resources/test-pipeline-with-custom-pip-server-run.yaml @@ -24,7 +24,7 @@ deploymentSpec: - "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\ \ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\ \ python3 -m pip install --quiet --no-warn-script-location --index-url https://nginx-service.test-pypiserver.svc.cluster.local/simple/\ - \ 'kfp==2.10.1' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ + \ 'kfp==2.11.0' '--no-deps' 'typing-extensions>=3.7.4,<5; python_version<\"\ 3.9\"' && python3 -m pip install --quiet --no-warn-script-location --index-url\ \ https://nginx-service.test-pypiserver.svc.cluster.local/simple/ 'numpy'\ \ && \"$0\" \"$@\"\n" @@ -66,4 +66,4 @@ root: Output: parameterType: STRING schemaVersion: 2.1.0 -sdkVersion: kfp-2.10.1 +sdkVersion: kfp-2.11.0 From f5c8cfecec400a2a822408e722dc3d2b7361f29c Mon Sep 17 00:00:00 2001 From: mprahl Date: Wed, 15 Jan 2025 16:45:57 -0500 Subject: [PATCH 26/28] Address CVE-2024-45338 This updates golang.org/x/net to v0.33.0. Relates: https://issues.redhat.com/browse/RHOAIENG-17816 Signed-off-by: mprahl --- go.mod | 17 ++++---- go.sum | 128 ++++++++++++--------------------------------------------- 2 files changed, 35 insertions(+), 110 deletions(-) diff --git a/go.mod b/go.mod index 587445d58..e1d68b42f 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.1.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect @@ -84,13 +84,13 @@ require ( go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/net v0.23.0 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/net v0.25.0 // indirect golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.3.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -119,7 +119,6 @@ replace ( github.com/openshift/api v0.0.0-20231118005202-0f638a8a4705 => github.com/openshift/api v0.0.0-20231118005202-0f638a8a4705 go.opentelemetry.io/contrib v0.20.0 => go.opentelemetry.io/contrib v0.44.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.1 => go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 - golang.org/x/net v0.17.0 => golang.org/x/net v0.23.0 - golang.org/x/net v0.21.0 => golang.org/x/net v0.23.0 + golang.org/x/net => golang.org/x/net v0.33.0 google.golang.org/grpc => google.golang.org/grpc v1.56.3 ) diff --git a/go.sum b/go.sum index f3791e035..3a41f2156 100644 --- a/go.sum +++ b/go.sum @@ -924,8 +924,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= @@ -1387,8 +1388,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1445,82 +1446,11 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200219183655-46282727080f/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1567,8 +1497,11 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1607,7 +1540,6 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1618,7 +1550,6 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1628,11 +1559,8 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1649,7 +1577,6 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1657,7 +1584,6 @@ golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1674,20 +1600,19 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1705,8 +1630,8 @@ golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1795,8 +1720,9 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From efc08e1ec2a70bbe79dd867a98faef1b34170bb4 Mon Sep 17 00:00:00 2001 From: Humair Khan Date: Fri, 17 Jan 2025 12:04:52 -0500 Subject: [PATCH 27/28] update compatibility doc for 2.9 (#773) Signed-off-by: Humair Khan --- docs/release/compatibility.md | 1 + docs/release/compatibility.yaml | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/docs/release/compatibility.md b/docs/release/compatibility.md index 7c260549e..a73aad8d9 100644 --- a/docs/release/compatibility.md +++ b/docs/release/compatibility.md @@ -6,6 +6,7 @@ Each row outlines the versions for individual subcomponents and images that are | dsp | kfp | argo | ml-metadata | envoy | ocp-pipelines | oauth-proxy | mariadb-103 | ubi-minimal | ubi-micro | openshift | |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----| +| 2.9 | 2.2.0 | 3.4.17 | 1.14.0 | 1.22.11 | N/A | v4.14 | 1 | N/A | N/A | 4.15,4.16,4.17 | | 2.8 | 2.2.0 | 3.4.17 | 1.14.0 | 1.22.11 | N/A | v4.14 | 1 | N/A | N/A | 4.15,4.16,4.17 | | 2.7 | 2.2.0 | 3.4.17 | 1.14.0 | 1.22.11 | N/A | v4.10 | 1 | N/A | N/A | 4.15,4.16,4.17 | | 2.6 | 2.0.5 | 3.3.10 | 1.14.0 | 1.22.11 | N/A | v4.10 | 1 | N/A | N/A | 4.14,4.15,4.16 | diff --git a/docs/release/compatibility.yaml b/docs/release/compatibility.yaml index 716a49e52..8d78a7b62 100644 --- a/docs/release/compatibility.yaml +++ b/docs/release/compatibility.yaml @@ -1,3 +1,14 @@ +- dsp: 2.9 + kfp: 2.2.0 + argo: 3.4.17 + ml-metadata: 1.14.0 + envoy: 1.22.11 + ocp-pipelines: "N/A" + oauth-proxy: v4.14 + mariadb-103: 1 + ubi-minimal: "N/A" + ubi-micro: "N/A" + openshift: 4.15,4.16,4.17 - dsp: 2.8 kfp: 2.2.0 argo: 3.4.17 From ffad766b1f9ab0b4f967b9ebc5868914372bf99a Mon Sep 17 00:00:00 2001 From: dsp-developers <140449482+dsp-developers@users.noreply.github.com> Date: Fri, 17 Jan 2025 13:10:15 -0500 Subject: [PATCH 28/28] Release v2.9.0 (#774) * Generate params for 2.9 * update mariadb/oauthproxy/envoy Cherry pick: 7f7f7852591c5389af0661ecea5059bc0d498c83 Signed-off-by: Humair Khan --------- Signed-off-by: Humair Khan Co-authored-by: Humair Khan --- config/base/params.env | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/config/base/params.env b/config/base/params.env index 85ce116f6..e76272b7e 100644 --- a/config/base/params.env +++ b/config/base/params.env @@ -1,15 +1,15 @@ -IMAGES_DSPO=quay.io/opendatahub/data-science-pipelines-operator:latest -IMAGES_APISERVER=quay.io/opendatahub/ds-pipelines-api-server:latest -IMAGES_PERSISTENCEAGENT=quay.io/opendatahub/ds-pipelines-persistenceagent:latest -IMAGES_SCHEDULEDWORKFLOW=quay.io/opendatahub/ds-pipelines-scheduledworkflow:latest -IMAGES_ARGO_EXEC=quay.io/opendatahub/ds-pipelines-argo-argoexec:odh-v3.4.17-1 -IMAGES_ARGO_WORKFLOWCONTROLLER=quay.io/opendatahub/ds-pipelines-argo-workflowcontroller:odh-v3.4.17-1 -IMAGES_LAUNCHER=quay.io/opendatahub/ds-pipelines-launcher:latest -IMAGES_DRIVER=quay.io/opendatahub/ds-pipelines-driver:latest -IMAGES_MLMDGRPC=quay.io/opendatahub/mlmd-grpc-server:latest -IMAGES_MLMDENVOY=registry.redhat.io/openshift-service-mesh/proxyv2-rhel8@sha256:02b834fd74da71ec37f6a5c0d10aac9a679d1a0f4e510c4f77723ef2367e858a -IMAGES_MARIADB=registry.redhat.io/rhel8/mariadb-103@sha256:3d30992e60774f887c4e7959c81b0c41b0d82d042250b3b56f05ab67fd4cdee1 -IMAGES_OAUTHPROXY=registry.redhat.io/openshift4/ose-oauth-proxy@sha256:4f8d66597feeb32bb18699326029f9a71a5aca4a57679d636b876377c2e95695 +IMAGES_DSPO=quay.io/opendatahub/data-science-pipelines-operator@sha256:2a0216a88f66391f6daaadfa8ea243bfac4e3f6c14f12c9d4f7213d6b0b43403 +IMAGES_APISERVER=quay.io/opendatahub/ds-pipelines-api-server@sha256:8b7e651f5c99eadc693524e2e6a32d10f001aeef5fef31463d4f012f14ed5d87 +IMAGES_PERSISTENCEAGENT=quay.io/opendatahub/ds-pipelines-persistenceagent@sha256:e7391acc7f4ff5de10fc7eabe10d0700750485a896cb25ee1bc4d01d3503a2da +IMAGES_SCHEDULEDWORKFLOW=quay.io/opendatahub/ds-pipelines-scheduledworkflow@sha256:44f97487a216288aa6aeb65004a7ee0c7dd4f42e697043b86af0382a673c7bd7 +IMAGES_LAUNCHER=quay.io/opendatahub/ds-pipelines-launcher@sha256:ae2bbba79fb209610421f98f1e8cf93848e53abd7e8b5e3eb18df29620816b54 +IMAGES_DRIVER=quay.io/opendatahub/ds-pipelines-driver@sha256:d2e999b9f6af96a0dd9bb7ae745d264e938c08ecf1495925538a1d03078f2662 +IMAGES_ARGO_WORKFLOWCONTROLLER=quay.io/opendatahub/ds-pipelines-argo-workflowcontroller@sha256:995f06328569b558d63cf727c0674df71b1927f74ab60e966596ccb8c06e12f8 +IMAGES_ARGO_EXEC=quay.io/opendatahub/ds-pipelines-argo-argoexec@sha256:da1b0d502ae97160185ec5debc2f0c8d54f70b01be4ea4a9339d7137cc3918a9 +IMAGES_MLMDGRPC=quay.io/opendatahub/mlmd-grpc-server@sha256:9e905b2de2fb6801716a14ebd6e589cac82fef26741825d06717d695a37ff199 +IMAGES_MLMDENVOY=registry.redhat.io/openshift-service-mesh/proxyv2-rhel8@sha256:b30d60cd458133430d4c92bf84911e03cecd02f60e88a58d1c6c003543cf833a +IMAGES_MARIADB=registry.redhat.io/rhel8/mariadb-103@sha256:f0ee0d27bb784e289f7d88cc8ee0e085ca70e88a5d126562105542f259a1ac01 +IMAGES_OAUTHPROXY=registry.redhat.io/openshift4/ose-oauth-proxy@sha256:8ce44de8c683f198bf24ba36cd17e89708153d11f5b42c0a27e77f8fdb233551 ZAP_LOG_LEVEL=info MAX_CONCURRENT_RECONCILES=10 DSPO_HEALTHCHECK_DATABASE_CONNECTIONTIMEOUT=15s