-
Notifications
You must be signed in to change notification settings - Fork 13
feat(backend): replace MLMD with native artifact/task storage #234
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: mlmd-removal
Are you sure you want to change the base?
Conversation
Remove ML Metadata (MLMD) service dependency and implement artifact and task tracking directly in the KFP database via the API server. This architectural change eliminates the external MLMD service (metadata-grpc, metadata-writer) and consolidates all metadata operations through the KFP API. Major changes: - Add v2beta1 artifact service API with storage layer implementation - Extend run service with task CRUD endpoints and ViewMode - Extend run response object with detailed task information - Refactor driver/launcher to use KFP API client instead of MLMD client - Remove all MLMD-related deployments and manifests - Remove object store session info storage in metadata layer - Add comprehensive test coverage for new storage and API layers This simplifies deployment, reduces operational complexity, and provides better control over metadata storage performance and schema. Signed-off-by: Humair Khan <[email protected]> # Conflicts: # backend/api/v2beta1/go_client/run.pb.go # backend/api/v2beta1/go_client/run.pb.gw.go # backend/api/v2beta1/go_client/run_grpc.pb.go # backend/api/v2beta1/swagger/kfp_api_single_file.swagger.json # backend/metadata_writer/src/metadata_helpers.py # backend/src/apiserver/resource/resource_manager.go # backend/src/v2/cmd/driver/main.go # backend/src/v2/compiler/argocompiler/container.go # backend/src/v2/compiler/argocompiler/importer.go # backend/src/v2/driver/driver.go # backend/src/v2/driver/driver_test.go # backend/src/v2/metadata/env.go # manifests/kustomize/env/cert-manager/base-tls-certs/kfp-api-cert.yaml # manifests/kustomize/env/cert-manager/platform-agnostic-standalone-tls/patches/metadata-writer-deployment.yaml # test_data/compiled-workflows/components_with_optional_artifacts.yaml # test_data/compiled-workflows/modelcar.yaml # test_data/compiled-workflows/pipeline_with_dynamic_importer_metadata.yaml # test_data/compiled-workflows/pipeline_with_google_artifact_type.yaml # test_data/compiled-workflows/pipeline_with_importer.yaml # test_data/compiled-workflows/pipeline_with_importer_and_gcpc_types.yaml # test_data/compiled-workflows/pipeline_with_string_machine_fields_task_output.yaml # test_data/compiled-workflows/pythonic_artifact_with_single_return.yaml # test_data/compiled-workflows/ray_job_integration_compiled.yaml
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThis pull request removes metadata-writer and grpc-specs components from CI/CD pipelines and Kubernetes manifests, adds a new v2beta1 Artifact Service API with CRUD operations for artifacts and artifact-task relationships, introduces v2beta1 task management endpoints (create, get, list, update tasks), and generates corresponding Go HTTP clients and models. Also updates the kfp-k8s action to build and install kfp-server-api from source, and includes proto definitions and Python API documentation for the new services. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant ArtifactService
participant Backend
Client->>ArtifactService: CreateArtifact(request)
activate ArtifactService
ArtifactService->>Backend: Store artifact
Backend-->>ArtifactService: artifact_id, metadata
ArtifactService-->>Client: Artifact response
deactivate ArtifactService
Client->>ArtifactService: CreateArtifactTask(artifact_task)
activate ArtifactService
ArtifactService->>Backend: Link artifact to task
Backend-->>ArtifactService: Task metadata
ArtifactService-->>Client: ArtifactTask response
deactivate ArtifactService
Client->>ArtifactService: ListArtifacts(filters)
activate ArtifactService
ArtifactService->>Backend: Query artifacts
Backend-->>ArtifactService: Paginated list
ArtifactService-->>Client: ListArtifactResponse
deactivate ArtifactService
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes
Areas requiring extra attention:
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_child_task.go (1)
15-22: Update the comment to reference the current field name.The comment on line 16 mentions "pod_name", but the actual field is now
Namewith JSON tag "name". This inconsistency between the documentation and the implementation could confuse developers.Since this is a generated file, update the source OpenAPI/Swagger specification to reflect the correct field name in the description.
// PipelineTaskDetailChildTask A dependent task that requires this one to succeed. -// Represented by either task_id or pod_name. +// Represented by either task_id or name. // // swagger:model PipelineTaskDetailChildTaskbackend/api/v2beta1/python_http_client/docs/PipelineTaskDetailChildTask.md (1)
3-3: Update the description to reference the current field name.The description mentions "pod_name", but the actual field is now "name". This inconsistency could confuse API consumers.
Since this is generated documentation, update the source OpenAPI/Swagger specification to reflect the correct field name.
-A dependent task that requires this one to succeed. Represented by either task_id or pod_name. +A dependent task that requires this one to succeed. Represented by either task_id or name.
🧹 Nitpick comments (12)
backend/api/Makefile (1)
37-37: Inconsistent mount strategies across generate targets.Line 37 (in
generatetarget) now uses-vwith:Zfor SELinux relabeling, but lines 47 and 67 (ingenerate-kfp-server-api-packageandgenerate-from-scratchtargets) still use the older--mount type=bindsyntax without SELinux labeling.For consistency and to ensure all targets benefit from SELinux support, consider updating lines 47 and 67 to match line 37, or document why only the primary
generatetarget requires SELinux handling.Also applies to: 47-47, 67-67
api/v2alpha1/pipeline_spec.proto (1)
972-975: RuntimeArtifactartifact_idaddition looks correct; ensure generated code is refreshedAdding
string artifact_id = 8;as a new field is backward compatible for existing consumers and aligns with server-generated artifact IDs introduced in v2beta1 APIs. No issues with the schema itself.Per project guidelines for
api/**/*.proto, make sure the Python and Go bindings are regenerated so downstream clients see this field:
make -C api pythonmake -C api golangbackend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_producer.go (1)
15-54:V2beta1IOProducermodel is straightforward; no issues from codegenThe IO producer model with optional
iterationandtask_nameplus the standard swagger-generated (de)serialization hooks is clean and self-consistent. If, in the future, either field needs to be required or constrained, that should be expressed in the OpenAPI spec so the generator can emit the appropriate validation.backend/api/v2beta1/artifact.proto (1)
342-359: Tighten ArtifactType documentation to match the actual field.The comment on
ArtifactTypeandArtifact.typesays “Required. The name of an ArtifactType. E.g. Dataset” and thatTYPE_UNSPECIFIEDshould be “rejected if unset”, but the field is an enum and the proto itself cannot enforce non‑TYPE_UNSPECIFIED.To avoid confusion, consider:
- Rephrasing to “Required. The artifact type.” (and listing examples in the enum docs), and
- Explicitly documenting that the server validates and rejects
TYPE_UNSPECIFIEDon create/update.This is purely a docs/API‑contract refinement; wire format is fine.
backend/api/v2beta1/python_http_client/docs/InputOutputsIOParameter.md (1)
3-9: Add a blank line before the properties table to satisfy markdownlint.markdownlint (MD058) flags that tables should be surrounded by blank lines. Add an empty line between
## Propertiesand theName | Type | ...header (and keep the blank line after the table) to silence the lint and keep docs consistent.backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailStatusMetadata.md (1)
3-7: Surround the table with blank lines for markdownlint compliance.Insert an empty line between
## Propertiesand theName | Type | ...row so the table is surrounded by blank lines (MD058). Content is fine; this is just a formatting cleanup.backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailInputOutputs.md (1)
3-7: Insert a blank line before the properties table.To satisfy markdownlint (MD058), add an empty line between
## Propertiesand theName | Type | ...header row. Content is correct; this is just formatting.backend/api/v2beta1/python_http_client/docs/InputOutputsIOArtifact.md (1)
3-9: Address table spacing for markdownlint.Add a blank line between
## Propertiesand theName | Type | ...table header so the table is surrounded by blank lines (MD058). Everything else in the doc looks consistent.backend/api/v2beta1/python_http_client/docs/ArtifactServiceApi.md (1)
1-568: Consider handling markdownlint issues via generator or linter config instead of manual edits.This file appears to be generated (typical of Python client/docs from swagger/OpenAPI generators), and markdownlint is flagging many structural issues (heading levels, table pipe style/column counts, bare URLs, list indentation, blanks‑around‑tables, etc.).
Manually editing a generated file will be fragile. Instead, I’d suggest either:
- Adjusting the doc generator configuration/template to emit markdownlint‑compliant output, or
- Configuring markdownlint to ignore
backend/api/v2beta1/python_http_client/docs/ArtifactServiceApi.md(or the whole generated docs directory).That keeps CI green without introducing hand‑edited drift from the generated artifact.
backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_pod.go (1)
78-97: Redundantswag.IsZerocheck incontextValidateType(optional cleanup)In
contextValidateType, you first ensurem.Type != niland then callswag.IsZero(m.Type). For a non-nil pointer,swag.IsZerowill never report zero, so this condition is effectively dead:if m.Type != nil { if swag.IsZero(m.Type) { // not required return nil } if err := m.Type.ContextValidate(ctx, formats); err != nil { ... } }You can simplify by dropping the
swag.IsZerocheck and just delegating toContextValidatewhenTypeis non-nil:func (m *PipelineTaskDetailTaskPod) contextValidateType(ctx context.Context, formats strfmt.Registry) error { - if m.Type != nil { - - if swag.IsZero(m.Type) { // not required - return nil - } - - if err := m.Type.ContextValidate(ctx, formats); err != nil { + if m.Type != nil { + if err := m.Type.ContextValidate(ctx, formats); err != nil { ... } } return nil }Purely a readability/clarity tweak; behavior today is already correct.
backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_request.go (1)
20-24: Field is documented as “Required” but validation treats it as optional (spec-level consideration)The comment says:
// Required. The list of artifact-task relationships to create. ArtifactTasks []*V2beta1ArtifactTask `json:"artifact_tasks"`However,
validateArtifactTasksshort-circuits whenswag.IsZero(m.ArtifactTasks)and never emits a validation error, so callers can construct a request with a nil/emptyArtifactTasksslice without client-side validation failing.If the intent is to enforce this as required on the client side, you’ll likely need to adjust the OpenAPI/Swagger spec so that go-swagger generates a
validate.Requiredcheck rather than the currentIsZero-only behavior, and then re-generate the client.backend/api/v2beta1/go_http_client/artifact_client/artifact_service/get_artifact_parameters.go (1)
19-151: GetArtifactParams looks correct; optional client-side validation could be driven from the spec.The params struct and
WriteToRequestcorrectly propagateartifact_idand standard client options. If you want stricter client-side safety, you could consider (via the OpenAPI spec rather than manual edits here) generating validation that rejects emptyArtifactIDbefore issuing the request, but this is not required for correctness.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (7)
api/v2alpha1/go/pipelinespec/pipeline_spec.pb.gois excluded by!**/*.pb.gobackend/api/v2beta1/go_client/artifact.pb.gois excluded by!**/*.pb.gobackend/api/v2beta1/go_client/artifact.pb.gw.gois excluded by!**/*.pb.gw.gobackend/api/v2beta1/go_client/artifact_grpc.pb.gois excluded by!**/*.pb.gobackend/api/v2beta1/go_client/run.pb.gois excluded by!**/*.pb.gobackend/api/v2beta1/go_client/run.pb.gw.gois excluded by!**/*.pb.gw.gobackend/api/v2beta1/go_client/run_grpc.pb.gois excluded by!**/*.pb.go
📒 Files selected for processing (107)
.github/actions/deploy/action.yml(1 hunks).github/actions/kfp-k8s/action.yml(3 hunks).github/resources/manifests/base/grpc-specs.yaml(0 hunks).github/resources/manifests/kubernetes-native/default/kustomization.yaml(0 hunks).github/resources/manifests/multiuser/artifact-proxy/kustomization.yaml(0 hunks).github/resources/manifests/multiuser/cache-disabled/kustomization.yaml(0 hunks).github/resources/manifests/multiuser/default/kustomization.yaml(0 hunks).github/resources/manifests/multiuser/minio/kustomization.yaml(0 hunks).github/resources/manifests/standalone/cache-disabled-proxy-minio/apiserver-env.yaml(1 hunks).github/resources/manifests/standalone/cache-disabled-proxy/apiserver-env.yaml(1 hunks).github/resources/manifests/standalone/cache-disabled/kustomization.yaml(0 hunks).github/resources/manifests/standalone/default/kustomization.yaml(0 hunks).github/resources/manifests/standalone/minio/kustomization.yaml(0 hunks).github/resources/manifests/standalone/proxy-minio/apiserver-env.yaml(1 hunks).github/resources/manifests/standalone/proxy-minio/kustomization.yaml(0 hunks).github/resources/manifests/standalone/proxy/apiserver-env.yaml(1 hunks).github/resources/manifests/standalone/proxy/kustomization.yaml(0 hunks).github/resources/manifests/standalone/tls-enabled/kustomization.yaml(0 hunks).github/workflows/api-server-tests.yml(0 hunks).github/workflows/image-builds-master.yml(0 hunks).github/workflows/image-builds-release.yml(0 hunks).github/workflows/image-builds-with-cache.yml(0 hunks).github/workflows/kfp-sdk-client-tests.yml(1 hunks).github/workflows/legacy-v2-api-integration-tests.yml(2 hunks).github/workflows/upgrade-test.yml(0 hunks).golangci.yaml(2 hunks)api/v2alpha1/pipeline_spec.proto(1 hunks)backend/api/Makefile(1 hunks)backend/api/hack/generator.sh(1 hunks)backend/api/v2beta1/artifact.proto(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_client.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/artifact_service_client.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifact_tasks_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifact_tasks_responses.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifacts_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifacts_responses.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_responses.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_task_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_task_responses.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/get_artifact_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/get_artifact_responses.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifact_tasks_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifact_tasks_responses.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifacts_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifacts_responses.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/artifact_artifact_type.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/googlerpc_status.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/protobuf_any.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/protobuf_null_value.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_artifact.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_artifact_task.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_request.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_task_request.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_request.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_response.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifacts_bulk_request.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifacts_bulk_response.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_producer.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_type.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_list_artifact_response.go(1 hunks)backend/api/v2beta1/go_http_client/artifact_model/v2beta1_list_artifact_tasks_response.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/batch_update_tasks_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/batch_update_tasks_responses.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/create_task_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/create_task_responses.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/get_task_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/get_task_responses.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/list_tasks_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/list_tasks_responses.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/run_service_client.go(2 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/run_service_get_run_parameters.go(4 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/run_service_list_runs_parameters.go(4 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/update_task_parameters.go(1 hunks)backend/api/v2beta1/go_http_client/run_client/run_service/update_task_responses.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/artifact_artifact_type.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/input_outputs_i_o_artifact.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/input_outputs_i_o_parameter.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_child_task.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_input_outputs.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_status_metadata.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_pod.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_pod_type.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_state.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_status.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_type.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_type_attributes.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_artifact.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_artifact_list.go(0 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_get_run_request_view_mode.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_i_o_producer.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_i_o_type.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_list_runs_request_view_mode.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_list_tasks_response.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_pipeline_task_detail.go(12 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_pipeline_task_executor_detail.go(0 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_run.go(11 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_update_tasks_bulk_request.go(1 hunks)backend/api/v2beta1/go_http_client/run_model/v2beta1_update_tasks_bulk_response.go(1 hunks)backend/api/v2beta1/python_http_client/README.md(5 hunks)backend/api/v2beta1/python_http_client/docs/ArtifactArtifactType.md(1 hunks)backend/api/v2beta1/python_http_client/docs/ArtifactServiceApi.md(1 hunks)backend/api/v2beta1/python_http_client/docs/InputOutputsIOArtifact.md(1 hunks)backend/api/v2beta1/python_http_client/docs/InputOutputsIOParameter.md(1 hunks)backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailChildTask.md(1 hunks)backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailInputOutputs.md(1 hunks)backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailStatusMetadata.md(1 hunks)
⛔ Files not processed due to max files limit (30)
- backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailTaskPod.md
- backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailTaskPodType.md
- backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailTaskState.md
- backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailTaskStatus.md
- backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailTaskType.md
- backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailTypeAttributes.md
- backend/api/v2beta1/python_http_client/docs/RunServiceApi.md
- backend/api/v2beta1/python_http_client/docs/V2beta1Artifact.md
- backend/api/v2beta1/python_http_client/docs/V2beta1ArtifactTask.md
- backend/api/v2beta1/python_http_client/docs/V2beta1CreateArtifactRequest.md
- backend/api/v2beta1/python_http_client/docs/V2beta1CreateArtifactTaskRequest.md
- backend/api/v2beta1/python_http_client/docs/V2beta1CreateArtifactTasksBulkRequest.md
- backend/api/v2beta1/python_http_client/docs/V2beta1CreateArtifactTasksBulkResponse.md
- backend/api/v2beta1/python_http_client/docs/V2beta1CreateArtifactsBulkRequest.md
- backend/api/v2beta1/python_http_client/docs/V2beta1CreateArtifactsBulkResponse.md
- backend/api/v2beta1/python_http_client/docs/V2beta1GetRunRequestViewMode.md
- backend/api/v2beta1/python_http_client/docs/V2beta1IOProducer.md
- backend/api/v2beta1/python_http_client/docs/V2beta1IOType.md
- backend/api/v2beta1/python_http_client/docs/V2beta1ListArtifactResponse.md
- backend/api/v2beta1/python_http_client/docs/V2beta1ListArtifactTasksResponse.md
- backend/api/v2beta1/python_http_client/docs/V2beta1ListRunsRequestViewMode.md
- backend/api/v2beta1/python_http_client/docs/V2beta1ListTasksResponse.md
- backend/api/v2beta1/python_http_client/docs/V2beta1PipelineTaskDetail.md
- backend/api/v2beta1/python_http_client/docs/V2beta1PipelineTaskExecutorDetail.md
- backend/api/v2beta1/python_http_client/docs/V2beta1Run.md
- backend/api/v2beta1/python_http_client/docs/V2beta1UpdateTasksBulkRequest.md
- backend/api/v2beta1/python_http_client/docs/V2beta1UpdateTasksBulkResponse.md
- backend/api/v2beta1/python_http_client/kfp_server_api/init.py
- backend/api/v2beta1/python_http_client/kfp_server_api/api/init.py
- backend/api/v2beta1/python_http_client/kfp_server_api/api/artifact_service_api.py
💤 Files with no reviewable changes (19)
- .github/workflows/image-builds-release.yml
- .github/resources/manifests/multiuser/artifact-proxy/kustomization.yaml
- .github/resources/manifests/kubernetes-native/default/kustomization.yaml
- .github/resources/manifests/standalone/proxy/kustomization.yaml
- .github/workflows/image-builds-with-cache.yml
- backend/api/v2beta1/go_http_client/run_model/v2beta1_artifact_list.go
- .github/workflows/upgrade-test.yml
- .github/resources/manifests/multiuser/default/kustomization.yaml
- backend/api/v2beta1/go_http_client/run_model/v2beta1_pipeline_task_executor_detail.go
- .github/resources/manifests/standalone/proxy-minio/kustomization.yaml
- .github/resources/manifests/standalone/cache-disabled/kustomization.yaml
- .github/resources/manifests/multiuser/minio/kustomization.yaml
- .github/resources/manifests/multiuser/cache-disabled/kustomization.yaml
- .github/resources/manifests/standalone/default/kustomization.yaml
- .github/workflows/api-server-tests.yml
- .github/workflows/image-builds-master.yml
- .github/resources/manifests/standalone/tls-enabled/kustomization.yaml
- .github/resources/manifests/base/grpc-specs.yaml
- .github/resources/manifests/standalone/minio/kustomization.yaml
🧰 Additional context used
📓 Path-based instructions (2)
api/**/*.proto
📄 CodeRabbit inference engine (AGENTS.md)
When modifying pipeline spec Protobufs under api/, regenerate Python and Go code (make -C api python && make -C api golang)
Files:
api/v2alpha1/pipeline_spec.proto
backend/**/*.go
📄 CodeRabbit inference engine (AGENTS.md)
Run golangci-lint on Go backend code to enforce Go linting rules
Files:
backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_status_metadata.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_child_task.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_artifact.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_list_artifact_tasks_response.gobackend/api/v2beta1/go_http_client/run_client/run_service/run_service_list_runs_parameters.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifacts_bulk_request.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_state.gobackend/api/v2beta1/go_http_client/run_client/run_service/run_service_get_run_parameters.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_request.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_artifact_task.gobackend/api/v2beta1/go_http_client/run_model/input_outputs_i_o_parameter.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_response.gobackend/api/v2beta1/go_http_client/artifact_model/protobuf_any.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_i_o_producer.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_type.gobackend/api/v2beta1/go_http_client/run_client/run_service/list_tasks_parameters.gobackend/api/v2beta1/go_http_client/artifact_model/artifact_artifact_type.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_list_tasks_response.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_responses.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_input_outputs.gobackend/api/v2beta1/go_http_client/run_model/input_outputs_i_o_artifact.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_client.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_pod.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_type_attributes.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_request.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_update_tasks_bulk_request.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_task_request.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_status.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/get_artifact_responses.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifacts_parameters.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifacts_responses.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_list_artifact_response.gobackend/api/v2beta1/go_http_client/run_client/run_service/batch_update_tasks_parameters.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_list_runs_request_view_mode.gobackend/api/v2beta1/go_http_client/artifact_model/protobuf_null_value.gobackend/api/v2beta1/go_http_client/run_client/run_service/update_task_responses.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_artifact.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_producer.gobackend/api/v2beta1/go_http_client/run_client/run_service/create_task_parameters.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_task_responses.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/get_artifact_parameters.gobackend/api/v2beta1/go_http_client/run_client/run_service/run_service_client.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/artifact_service_client.gobackend/api/v2beta1/go_http_client/run_client/run_service/get_task_responses.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_run.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifact_tasks_responses.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_i_o_type.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_update_tasks_bulk_response.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifact_tasks_parameters.gobackend/api/v2beta1/go_http_client/artifact_model/googlerpc_status.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifacts_bulk_response.gobackend/api/v2beta1/go_http_client/run_client/run_service/get_task_parameters.gobackend/api/v2beta1/go_http_client/run_client/run_service/create_task_responses.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_get_run_request_view_mode.gobackend/api/v2beta1/go_http_client/run_client/run_service/batch_update_tasks_responses.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifact_tasks_parameters.gobackend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_type.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_task_parameters.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifacts_responses.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_parameters.gobackend/api/v2beta1/go_http_client/run_client/run_service/update_task_parameters.gobackend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_pod_type.gobackend/api/v2beta1/go_http_client/run_client/run_service/list_tasks_responses.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifact_tasks_responses.gobackend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifacts_parameters.gobackend/api/v2beta1/go_http_client/run_model/v2beta1_pipeline_task_detail.gobackend/api/v2beta1/go_http_client/run_model/artifact_artifact_type.go
🪛 Checkov (3.2.334)
.github/resources/manifests/standalone/proxy/apiserver-env.yaml
[medium] 1-16: Containers should not run with allowPrivilegeEscalation
(CKV_K8S_20)
[medium] 1-16: Minimize the admission of root containers
(CKV_K8S_23)
.github/resources/manifests/standalone/cache-disabled-proxy-minio/apiserver-env.yaml
[medium] 1-18: Containers should not run with allowPrivilegeEscalation
(CKV_K8S_20)
[medium] 1-18: Minimize the admission of root containers
(CKV_K8S_23)
🪛 markdownlint-cli2 (0.18.1)
backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailStatusMetadata.md
4-4: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
backend/api/v2beta1/python_http_client/docs/InputOutputsIOArtifact.md
4-4: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
backend/api/v2beta1/python_http_client/docs/ArtifactArtifactType.md
3-3: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailInputOutputs.md
4-4: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
backend/api/v2beta1/python_http_client/docs/ArtifactServiceApi.md
3-3: Bare URL used
(MD034, no-bare-urls)
21-21: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
69-69: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
69-69: Table column count
Expected: 4; Actual: 3; Too few cells, row will be missing data
(MD056, table-column-count)
81-81: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
82-82: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
85-85: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
85-85: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
85-85: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
86-86: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
86-86: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
87-87: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
88-88: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
90-90: No empty links
(MD042, no-empty-links)
97-97: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
145-145: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
145-145: Table column count
Expected: 4; Actual: 3; Too few cells, row will be missing data
(MD056, table-column-count)
157-157: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
158-158: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
161-161: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
161-161: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
161-161: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
162-162: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
162-162: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
163-163: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
164-164: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
166-166: No empty links
(MD042, no-empty-links)
173-173: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
221-221: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
221-221: Table column count
Expected: 4; Actual: 3; Too few cells, row will be missing data
(MD056, table-column-count)
233-233: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
234-234: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
237-237: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
237-237: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
237-237: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
238-238: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
238-238: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
239-239: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
240-240: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
242-242: No empty links
(MD042, no-empty-links)
249-249: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
297-297: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
297-297: Table column count
Expected: 4; Actual: 3; Too few cells, row will be missing data
(MD056, table-column-count)
309-309: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
310-310: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
313-313: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
313-313: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
313-313: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
314-314: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
314-314: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
315-315: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
316-316: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
318-318: No empty links
(MD042, no-empty-links)
325-325: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
373-373: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
373-373: Table column count
Expected: 4; Actual: 3; Too few cells, row will be missing data
(MD056, table-column-count)
385-385: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
386-386: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
389-389: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
389-389: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
389-389: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
390-390: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
390-390: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
391-391: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
392-392: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
394-394: No empty links
(MD042, no-empty-links)
401-401: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
475-475: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
476-476: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
479-479: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
479-479: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
479-479: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
480-480: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
480-480: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
481-481: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
482-482: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
484-484: No empty links
(MD042, no-empty-links)
491-491: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
559-559: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
560-560: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
563-563: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
563-563: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
563-563: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
564-564: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe
(MD055, table-pipe-style)
564-564: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe
(MD055, table-pipe-style)
565-565: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
566-566: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
568-568: No empty links
(MD042, no-empty-links)
backend/api/v2beta1/python_http_client/docs/InputOutputsIOParameter.md
4-4: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
backend/api/v2beta1/python_http_client/README.md
147-147: Table pipe style
Expected: no_leading_or_trailing; Actual: trailing_only; Unexpected trailing pipe
(MD055, table-pipe-style)
147-147: Table column count
Expected: 4; Actual: 3; Too few cells, row will be missing data
(MD056, table-column-count)
152-152: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
153-153: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
154-154: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
155-155: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
156-156: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
157-157: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
158-158: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
159-159: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
160-160: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
161-161: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
162-162: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
163-163: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
164-164: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
165-165: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
166-166: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
167-167: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
168-168: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
169-169: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
170-170: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
171-171: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
172-172: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
173-173: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
174-174: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
175-175: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
176-176: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
177-177: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
178-178: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
179-179: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
180-180: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
181-181: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
182-182: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
183-183: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
184-184: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
185-185: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
186-186: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
187-187: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
188-188: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
189-189: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
190-190: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
191-191: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
192-192: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
193-193: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
194-194: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
195-195: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
196-196: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
197-197: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
198-198: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
215-215: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
216-216: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (33)
- GitHub Check: build / image-build-with-cache (launcher, backend/Dockerfile.launcher, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (launcher, backend/Dockerfile.launcher, .)
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (launcher, backend/Dockerfile.launcher, .)
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (driver, backend/Dockerfile.driver, .)
- GitHub Check: build / image-build-with-cache (driver, backend/Dockerfile.driver, .)
- GitHub Check: build / image-build-with-cache (launcher, backend/Dockerfile.launcher, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (driver, backend/Dockerfile.driver, .)
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (launcher, backend/Dockerfile.launcher, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (driver, backend/Dockerfile.driver, .)
- GitHub Check: Workflow Compiler Tests
- GitHub Check: build / image-build-with-cache (frontend, frontend/Dockerfile, .)
- GitHub Check: build / image-build-with-cache (apiserver, backend/Dockerfile, .)
- GitHub Check: sdk-unit-tests (3.9)
- GitHub Check: sdk-unit-tests (3.13)
- GitHub Check: sdk-tests (3.13)
- GitHub Check: sdk-tests (3.9)
- GitHub Check: validate-generated-files
- GitHub Check: validate-backwards-compabitiblity
- GitHub Check: check_ci_status
| - name: Install kfp-server-api from source | ||
| run: pip install -e backend/api/v2beta1/python_http_client |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add conditional execution to match "Run tests" step requirements.
This step should be gated by the same conditions as the "Run tests" step (line 82), which requires successful port forwarding. Currently, the step lacks a condition and will execute even if prior critical steps fail, potentially wasting CI resources or masking setup failures.
Apply this diff to add the appropriate condition:
- name: Install kfp-server-api from source
+ if: ${{ steps.forward-api-port.outcome == 'success' }}
run: pip install -e backend/api/v2beta1/python_http_client📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Install kfp-server-api from source | |
| run: pip install -e backend/api/v2beta1/python_http_client | |
| - name: Install kfp-server-api from source | |
| if: ${{ steps.forward-api-port.outcome == 'success' }} | |
| run: pip install -e backend/api/v2beta1/python_http_client |
🤖 Prompt for AI Agents
.github/workflows/kfp-sdk-client-tests.yml lines 77-78: the "Install
kfp-server-api from source" step is missing the conditional used by the "Run
tests" step (line 82) and should be gated by the same condition that ensures
successful port-forwarding; update this step to include the identical if:
expression used on line 82 (copy that exact if: conditional into this step),
keeping correct YAML indentation and spacing so the step only runs when the
port-forward/test prerequisites are met.
| // V2beta1Artifact Not to be confused with RuntimeArtifact in PipelineSpec | ||
| // | ||
| // swagger:model v2beta1Artifact | ||
| type V2beta1Artifact struct { | ||
|
|
||
| // Output only. The unique server generated id of the artifact. | ||
| // Note: Updated id name to be consistent with other api naming patterns (with prefix) | ||
| // Read Only: true | ||
| ArtifactID string `json:"artifact_id,omitempty"` | ||
|
|
||
| // Output only. Create time of the artifact in millisecond since epoch. | ||
| // Note: The type and name is updated from mlmd artifact to be consistent with other backend apis. | ||
| // Read Only: true | ||
| // Format: date-time | ||
| CreatedAt strfmt.DateTime `json:"created_at,omitempty"` | ||
|
|
||
| // description | ||
| Description string `json:"description,omitempty"` | ||
|
|
||
| // Optional. User provided custom properties which are not defined by its type. | ||
| Metadata map[string]interface{} `json:"metadata,omitempty"` | ||
|
|
||
| // Required. The client provided name of the artifact. | ||
| // Note: in MLMD when name was set, it had to be unique for that type_id | ||
| // this restriction is removed here | ||
| // If this is a "Metric" artifact, the name of the metric | ||
| // is treated as the Key in its K/V pair. | ||
| Name string `json:"name,omitempty"` | ||
|
|
||
| // namespace | ||
| Namespace string `json:"namespace,omitempty"` | ||
|
|
||
| // Used primarily for metrics | ||
| NumberValue float64 `json:"number_value,omitempty"` | ||
|
|
||
| // Required. The name of an ArtifactType. E.g. Dataset | ||
| Type *ArtifactArtifactType `json:"type,omitempty"` | ||
|
|
||
| // The uniform resource identifier of the physical artifact. | ||
| // May be empty if there is no physical artifact. | ||
| URI string `json:"uri,omitempty"` | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Align field docs with actual validation semantics
A few doc/behavior mismatches here:
NameandTypeare documented as “Required”, butValidatenever enforces thatNameis non‑empty or thatTypeis non‑nil (both are effectively optional today).CreatedAtis described as “in millisecond since epoch” but is modeled asstrfmt.DateTimewithdate-timeformat, which is an RFC3339 timestamp instead of a raw epoch millis value.
If the API contract expects these to be truly required or epoch‑millis, consider fixing the proto/OpenAPI definitions (and regenerating) so the generated Go model and comments match the actual contract. Otherwise, adjusting the comments to match current behavior would reduce confusion.
🤖 Prompt for AI Agents
In backend/api/v2beta1/go_http_client/artifact_model/v2beta1_artifact.go around
lines 17-58, the field comments disagree with the current model/validation: Name
and Type are labeled "Required" but not validated as such, and CreatedAt text
says "millisecond since epoch" while the field is a strfmt.DateTime (RFC3339).
Either (A) make them truly required by adding validation checks (Require Name to
be non-empty string and Type to be non-nil in the model's Validate method) and,
if epoch millis is desired, change CreatedAt's type to an integer millis type in
the API/proto and regenerate; or (B) if current behavior is correct, update the
comments to remove "Required." for Name and Type and change CreatedAt comment to
indicate it is an RFC3339 timestamp (date-time) to match strfmt.DateTime.
Implement the appropriate option and keep comments and validation in sync with
the API contract.
| // Required. The artifact to create. | ||
| Artifact *V2beta1Artifact `json:"artifact,omitempty"` | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify required-ness of Artifact vs current validation/JSON behavior
The Artifact field is documented as “Required. The artifact to create.” but:
- The tag is
json:"artifact,omitempty"and Validateonly delegates tovalidateArtifactwithout enforcing non‑nil / non‑zero.
If the API truly requires an artifact, consider marking it required in the OpenAPI/proto spec so that the generated model enforces this (non‑omitempty tag and a required check), rather than relying solely on server‑side validation. Otherwise, the “Required” wording in the comment may be misleading.
Also applies to: 47-63
I'll verify this review comment by examining the file structure and validation logic.
---
🏁 Script executed:
```shell
#!/bin/bash
# Inspect the full file to see Artifact field and Validate method
cat "backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_request.go"
Length of output: 4502
🏁 Script executed:
#!/bin/bash
# Search for the proto file that may have generated this
fd -e proto | xargs grep -l "CreateArtifactRequest" 2>/dev/null | head -5Length of output: 86
🏁 Script executed:
#!/bin/bash
# Check for any related OpenAPI/swagger definitions
fd -E node_modules -E ".git" \( -name "*.yaml" -o -name "*.yml" -o -name "*.json" \) -path "*artifact*" | head -10Length of output: 230
🏁 Script executed:
#!/bin/bash
# Look at similar request types in the same directory to understand patterns
ls -la backend/api/v2beta1/go_http_client/artifact_model/ | grep requestLength of output: 361
I need to check the proto source file to understand the intent and determine the root cause.
---
🏁 Script executed:
```shell
#!/bin/bash
# Find and inspect the proto definition for CreateArtifactRequest
rg -A 20 "message CreateArtifactRequest" backend/api/v2beta1/artifact.proto
Length of output: 706
🏁 Script executed:
#!/bin/bash
# Check if there's a proto option indicating required fields
rg -B 5 -A 15 "artifact_model" backend/api/v2beta1/artifact.proto | head -50Length of output: 0
Fix the proto spec to resolve inconsistency between comment and field definition
The proto source (backend/api/v2beta1/artifact.proto) shows the inconsistency: the artifact field in CreateArtifactRequest has the comment // Required. The artifact to create. but is not marked with the required keyword. In proto3, fields without required are optional, which is why the generated Go code correctly includes json:"artifact,omitempty" and treats the field as not required during validation.
Either mark the field as required in the proto if it truly must be provided, or remove/clarify the "Required" comment if it is genuinely optional. The same applies to the Type field (lines 47–63).
| // V2beta1CreateArtifactTaskRequest Request to create an artifact-task relationship | ||
| // | ||
| // swagger:model v2beta1CreateArtifactTaskRequest | ||
| type V2beta1CreateArtifactTaskRequest struct { | ||
|
|
||
| // Required. The artifact-task relationship to create. | ||
| ArtifactTask *V2beta1ArtifactTask `json:"artifact_task,omitempty"` | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clarify ArtifactTask requiredness vs validation behavior
The field is documented as “Required” but is tagged with omitempty and validateArtifactTask treats it as optional (swag.IsZero short‑circuits with no error). If the API truly requires artifact_task, consider updating the proto/OpenAPI so the generator enforces non‑nil here; otherwise, drop the “Required.” wording to avoid confusing callers.
🤖 Prompt for AI Agents
In
backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_task_request.go
around lines 16 to 23, the struct field ArtifactTask is documented as "Required"
but the JSON tag uses `omitempty` and the generated validateArtifactTask treats
nil as allowed; either make the field truly required or remove the misleading
"Required." text: to require it, remove `omitempty` from the
`json:"artifact_task,omitempty"` tag (so it becomes `json:"artifact_task"`) and
update the proto/OpenAPI to mark the field required so the generator and
validation enforce non-nil, or if the field is optional, change the comment to
drop "Required." to accurately reflect optional behavior; apply whichever change
matches the API contract and regenerate client code if necessary.
| func (m *V2beta1CreateArtifactTasksBulkRequest) contextValidateArtifactTasks(ctx context.Context, formats strfmt.Registry) error { | ||
|
|
||
| for i := 0; i < len(m.ArtifactTasks); i++ { | ||
|
|
||
| if m.ArtifactTasks[i] != nil { | ||
|
|
||
| if swag.IsZero(m.ArtifactTasks[i]) { // not required | ||
| return nil | ||
| } | ||
|
|
||
| if err := m.ArtifactTasks[i].ContextValidate(ctx, formats); err != nil { | ||
| if ve, ok := err.(*errors.Validation); ok { | ||
| return ve.ValidateName("artifact_tasks" + "." + strconv.Itoa(i)) | ||
| } else if ce, ok := err.(*errors.CompositeError); ok { | ||
| return ce.ValidateName("artifact_tasks" + "." + strconv.Itoa(i)) | ||
| } | ||
| return err | ||
| } | ||
| } | ||
|
|
||
| } | ||
|
|
||
| return nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Early return nil in contextValidateArtifactTasks prevents validating remaining items
contextValidateArtifactTasks currently exits the whole function as soon as it encounters a zero-valued element, so later ArtifactTasks entries are never context-validated:
for i := 0; i < len(m.ArtifactTasks); i++ {
if m.ArtifactTasks[i] != nil {
if swag.IsZero(m.ArtifactTasks[i]) { // not required
return nil
}
if err := m.ArtifactTasks[i].ContextValidate(ctx, formats); err != nil {
...
}
}
}To match the behavior of validateArtifactTasks (which skips zero elements but continues validating others), this should use continue instead of return nil:
- if swag.IsZero(m.ArtifactTasks[i]) { // not required
- return nil
- }
+ if swag.IsZero(m.ArtifactTasks[i]) { // not required
+ continue
+ }This keeps zero-valued entries optional while still validating all non-zero artifact-task relationships in the bulk request.
🤖 Prompt for AI Agents
In
backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_request.go
around lines 80 to 102, the loop returns nil when it encounters a zero-valued
ArtifactTasks entry, which aborts validation for remaining items; change the
logic so that when swag.IsZero(m.ArtifactTasks[i]) is true you continue the loop
instead of returning, so zero entries are skipped but subsequent non-zero
entries still get ContextValidate called and any validation errors are
propagated as before.
| func (m *V2beta1ListArtifactTasksResponse) contextValidateArtifactTasks(ctx context.Context, formats strfmt.Registry) error { | ||
|
|
||
| for i := 0; i < len(m.ArtifactTasks); i++ { | ||
|
|
||
| if m.ArtifactTasks[i] != nil { | ||
|
|
||
| if swag.IsZero(m.ArtifactTasks[i]) { // not required | ||
| return nil | ||
| } | ||
|
|
||
| if err := m.ArtifactTasks[i].ContextValidate(ctx, formats); err != nil { | ||
| if ve, ok := err.(*errors.Validation); ok { | ||
| return ve.ValidateName("artifact_tasks" + "." + strconv.Itoa(i)) | ||
| } else if ce, ok := err.(*errors.CompositeError); ok { | ||
| return ce.ValidateName("artifact_tasks" + "." + strconv.Itoa(i)) | ||
| } | ||
| return err | ||
| } | ||
| } | ||
|
|
||
| } | ||
|
|
||
| return nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Early return nil in contextValidateArtifactTasks likely skips validation of later items
In contextValidateArtifactTasks, this block:
if m.ArtifactTasks[i] != nil {
if swag.IsZero(m.ArtifactTasks[i]) { // not required
return nil
}
if err := m.ArtifactTasks[i].ContextValidate(ctx, formats); err != nil {
...
}
}returns from the whole function as soon as a zero-valued element is encountered, so any remaining ArtifactTasks entries are never context-validated. This differs from validateArtifactTasks, which uses continue to just skip the zero element.
Consider changing return nil to continue so all non-zero entries are validated:
- if swag.IsZero(m.ArtifactTasks[i]) { // not required
- return nil
- }
+ if swag.IsZero(m.ArtifactTasks[i]) { // not required
+ continue
+ }🤖 Prompt for AI Agents
In
backend/api/v2beta1/go_http_client/artifact_model/v2beta1_list_artifact_tasks_response.go
around lines 86 to 108, the function contextValidateArtifactTasks returns nil as
soon as it encounters a zero-valued ArtifactTasks element which prematurely
stops validation of subsequent items; change the early "return nil" to
"continue" so the loop skips the zero element but continues validating remaining
entries, leaving the rest of the existing ContextValidate error handling intact.
| // The scope of this task within the | ||
| // pipeline spec. Each entry represents | ||
| // either a Dag Task or a Container task. | ||
| // Note that Container task will are | ||
| // always the last entry in a scope_path. | ||
| ScopePath []string `json:"scope_path"` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo in comment.
Line 67 contains a grammatical error: "Note that Container task will are" should be "Note that Container tasks are" or "Note that Container task will always be".
Apply this diff to fix the typo:
// The scope of this task within the
// pipeline spec. Each entry represents
// either a Dag Task or a Container task.
- // Note that Container task will are
+ // Note that Container tasks are
// always the last entry in a scope_path.
ScopePath []string `json:"scope_path"`📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // The scope of this task within the | |
| // pipeline spec. Each entry represents | |
| // either a Dag Task or a Container task. | |
| // Note that Container task will are | |
| // always the last entry in a scope_path. | |
| ScopePath []string `json:"scope_path"` | |
| // The scope of this task within the | |
| // pipeline spec. Each entry represents | |
| // either a Dag Task or a Container task. | |
| // Note that Container tasks are | |
| // always the last entry in a scope_path. | |
| ScopePath []string `json:"scope_path"` |
🤖 Prompt for AI Agents
In backend/api/v2beta1/go_http_client/run_model/v2beta1_pipeline_task_detail.go
around lines 64 to 69, fix the grammatical typo in the comment: change "Note
that Container task will are" to a correct phrasing such as "Note that Container
tasks are always the last entry in a scope_path." Update the comment text
accordingly so it reads clearly and grammatically correct.
| // Required. Map of task ID to task detail for bulk update. | ||
| // Key: task_id, Value: PipelineTaskDetail to update | ||
| Tasks map[string]V2beta1PipelineTaskDetail `json:"tasks,omitempty"` | ||
| } | ||
|
|
||
| // Validate validates this v2beta1 update tasks bulk request | ||
| func (m *V2beta1UpdateTasksBulkRequest) Validate(formats strfmt.Registry) error { | ||
| var res []error | ||
|
|
||
| if err := m.validateTasks(formats); err != nil { | ||
| res = append(res, err) | ||
| } | ||
|
|
||
| if len(res) > 0 { | ||
| return errors.CompositeValidationError(res...) | ||
| } | ||
| return nil | ||
| } | ||
|
|
||
| func (m *V2beta1UpdateTasksBulkRequest) validateTasks(formats strfmt.Registry) error { | ||
| if swag.IsZero(m.Tasks) { // not required | ||
| return nil | ||
| } | ||
|
|
||
| for k := range m.Tasks { | ||
|
|
||
| if err := validate.Required("tasks"+"."+k, "body", m.Tasks[k]); err != nil { | ||
| return err | ||
| } | ||
| if val, ok := m.Tasks[k]; ok { | ||
| if err := val.Validate(formats); err != nil { | ||
| if ve, ok := err.(*errors.Validation); ok { | ||
| return ve.ValidateName("tasks" + "." + k) | ||
| } else if ce, ok := err.(*errors.CompositeError); ok { | ||
| return ce.ValidateName("tasks" + "." + k) | ||
| } | ||
| return err | ||
| } | ||
| } | ||
|
|
||
| } | ||
|
|
||
| return nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bulk task update request validation vs. “Required” doc
The implementation is internally consistent, but there’s a small mismatch between the comment and the generated validation:
-
The field is documented as:
// Required. Map of task ID to task detail for bulk update. Tasks map[string]V2beta1PipelineTaskDetail `json:"tasks,omitempty"`
-
validateTaskstreatsTasksas optional (swag.IsZero(m.Tasks)returns early and allows an empty/nil map), and there is no top-levelvalidate.Requiredenforcing that at least one task is present.
If the API truly requires callers to send at least one task in each bulk update, that requirement should be captured in the OpenAPI/Swagger specification so the generator can emit a required constraint on the tasks map itself. Otherwise, you may want to soften the comment to reflect that an empty bulk update is allowed.
Given this is generated code, any change should be made in the API definition rather than editing the file directly.
Also applies to: 81-94
🤖 Prompt for AI Agents
backend/api/v2beta1/go_http_client/run_model/v2beta1_update_tasks_bulk_request.go
lines 22-64 (also applies to lines 81-94): the comment marks Tasks as "Required"
but the generated validation treats the map as optional; to fix, update the
OpenAPI/Swagger spec to mark the tasks field as required (ensuring the generator
emits a top-level validate.Required check) if the API actually requires at least
one task, regenerate the client, or if empty/nil tasks are allowed, change the
comment in the API spec to remove "Required" and regenerate so the doc and
generated validation match.
| # ArtifactArtifactType | ||
|
|
||
| A list of artifact metadata. | ||
| - TYPE_UNSPECIFIED: default; treated as \"not set\" reject if unset. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix markdown list indentation.
The unordered list item should have zero indentation. The static analysis tool flagged this as a markdown linting violation (MD007).
Apply this diff to fix the indentation:
- - TYPE_UNSPECIFIED: default; treated as \"not set\" reject if unset.
+ - TYPE_UNSPECIFIED: default; treated as \"not set\" reject if unset.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - TYPE_UNSPECIFIED: default; treated as \"not set\" reject if unset. | |
| - TYPE_UNSPECIFIED: default; treated as \"not set\" reject if unset. |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
3-3: Unordered list indentation
Expected: 0; Actual: 1
(MD007, ul-indent)
🤖 Prompt for AI Agents
In backend/api/v2beta1/python_http_client/docs/ArtifactArtifactType.md around
line 3, the unordered list item is incorrectly indented which triggers
markdown-lint MD007; remove the leading space so the list marker starts at
column 1 (zero indentation) and ensure the rest of list items follow the same
top-level indentation to satisfy the linter.
| ------------ | ------------- | ------------- | ------------- | ||
| **task_id** | **str** | System-generated ID of a task. | [optional] | ||
| **pod_name** | **str** | Name of the corresponding pod assigned by the orchestration engine. Also known as node_id. | [optional] | ||
| **name** | **str** | | [optional] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a description for the "name" field.
The "name" field has an empty description, which provides no guidance to API consumers about its purpose or usage.
Update the source OpenAPI/Swagger specification to include a meaningful description for this field (e.g., "Name of the dependent task" or similar).
-**name** | **str** | | [optional]
+**name** | **str** | Name of the dependent task. | [optional]Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In backend/api/v2beta1/python_http_client/docs/PipelineTaskDetailChildTask.md
around line 8, the "name" field is missing a description; update the
OpenAPI/Swagger source for PipelineTaskDetailChildTask to add a concise,
meaningful description (for example "Name of the dependent task" or similar),
regenerate the docs so this description appears in the generated Markdown, and
ensure the description accurately reflects whether this field is required/unique
and any formatting constraints.
Signed-off-by: Humair Khan <[email protected]>
…s for test files Signed-off-by: Humair Khan <[email protected]>
Signed-off-by: Humair Khan <[email protected]>
Signed-off-by: Humair Khan <[email protected]>
Signed-off-by: Humair Khan <[email protected]>
Signed-off-by: Humair Khan <[email protected]>
Signed-off-by: Humair Khan <[email protected]>
Signed-off-by: Humair Khan <[email protected]>
This is for code rabbit reviews
Summary by CodeRabbit
New Features
Bug Fixes & Improvements
Chores
✏️ Tip: You can customize this high-level summary in your review settings.