Skip to content

Conversation

@HumairAK
Copy link

@HumairAK HumairAK commented Nov 20, 2025

This is for code rabbit reviews

Summary by CodeRabbit

  • New Features

    • Added artifact management API with endpoints for creating, listing, and retrieving artifacts
    • Added task management endpoints for creating, updating, listing, and retrieving pipeline task details
    • Introduced support for bulk operations on artifacts and tasks
  • Bug Fixes & Improvements

    • Removed deprecated metadata-writer infrastructure component from deployment configurations
    • Updated artifact and task data models with enhanced field support for tracking state, metadata, and relationships
  • Chores

    • Updated build workflows to streamline image generation and API client compilation
    • Refreshed Go HTTP client libraries for artifact and task service APIs

✏️ Tip: You can customize this high-level summary in your review settings.

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
@coderabbitai
Copy link

coderabbitai bot commented Nov 20, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This 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

Cohort / File(s) Summary
Metadata-Writer & gRPC Specs Removal
.github/actions/deploy/action.yml, .github/resources/manifests/base/grpc-specs.yaml, .github/resources/manifests/kubernetes-native/default/kustomization.yaml, .github/resources/manifests/multiuser/*/kustomization.yaml, .github/resources/manifests/standalone/*/kustomization.yaml, .github/workflows/image-builds-*.yml
Removed kfp-metadata-writer and kfp-metadata-envoy image entries from build matrices, removed grpc-specs Deployment manifest entirely, removed associated DNS search patches and replacements from all kustomization overlays, and removed metadata-grpc-service from NO_PROXY environment variables in proxy configurations.
GitHub Actions & Workflow Updates
.github/actions/kfp-k8s/action.yml, .github/workflows/api-server-tests.yml, .github/workflows/image-builds-with-cache.yml, .github/workflows/kfp-sdk-client-tests.yml, .github/workflows/legacy-v2-api-integration-tests.yml, .github/workflows/upgrade-test.yml
Added kfp-server-api build step and source installation to kfp-k8s action with new build_version and generate_golang_proto inputs; removed metadata_writer path triggers from workflow PR filters; added SDK test step for installing kfp-server-api; removed port-forward step for MLMD in integration tests.
Protocol Buffer Definitions
api/v2alpha1/pipeline_spec.proto, backend/api/v2beta1/artifact.proto
Added artifact_id field to RuntimeArtifact message; introduced comprehensive ArtifactService definition with 7 RPC endpoints (ListArtifacts, GetArtifact, CreateArtifact, CreateArtifactsBulk, ListArtifactTasks, CreateArtifactTask, CreateArtifactTasksBulk), message types (Artifact, ArtifactTask, IOType, IOProducer), and HTTP/OpenAPI mappings.
Build Configuration
backend/api/Makefile, backend/api/hack/generator.sh, .golangci.yaml
Changed Docker mount from bind to labeled volume (SELinux support); added swagger code generation for v2beta1 artifact HTTP client; added staticcheck exclusion for SA1019 deprecation warnings.
Go Artifact Service Client
backend/api/v2beta1/go_http_client/artifact_client/*
Generated complete artifact service HTTP client including ArtifactClient, ArtifactService ClientService interface, and transport configuration.
Go Artifact Service Parameters & Responses
backend/api/v2beta1/go_http_client/artifact_client/artifact_service/*_parameters.go, *_responses.go
Generated parameter objects and response handlers for 7 artifact service endpoints (batch_create_artifact_tasks, batch_create_artifacts, create_artifact, create_artifact_task, get_artifact, list_artifact_tasks, list_artifacts).
Go Artifact Models
backend/api/v2beta1/go_http_client/artifact_model/*
Generated model types: ArtifactArtifactType enum, Artifact, ArtifactTask, IOProducer, IOType enum, create/list request/response types, with validation and (de)serialization support.
Go Run Service Extensions
backend/api/v2beta1/go_http_client/run_client/run_service/*_parameters.go, *_responses.go, run_service_client.go
Added 5 new task endpoints to RunService: BatchUpdateTasks, CreateTask, GetTask, ListTasks, UpdateTask with parameter and response handlers; added View parameter to GetRun and ListRuns operations.
Go Run Service Models
backend/api/v2beta1/go_http_client/run_model/*
Generated/modified models: ArtifactArtifactType, V2beta1Artifact, InputOutputsIOArtifact, InputOutputsIOParameter, PipelineTaskDetail (restructured with Inputs/Outputs/Pods/State), task-related types (TaskState, TaskType, TaskStatus, TaskPod), V2beta1Run (added PipelineReference, TaskCount, Tasks), view mode enums, bulk update/response types; removed V2beta1ArtifactList and V2beta1PipelineTaskExecutorDetail.
Python Client & Documentation
backend/api/v2beta1/python_http_client/README.md, backend/api/v2beta1/python_http_client/docs/*
Updated README with new ArtifactServiceApi and RunServiceApi endpoints; added documentation files for new models (V2beta1Artifact, InputOutputsIOArtifact, InputOutputsIOParameter, PipelineTaskDetailInputOutputs, PipelineTaskDetailStatusMetadata, etc.) and services.

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
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Scope & Heterogeneity: Large changes spanning CI/CD, proto definitions, generated clients, and models; mix of deletions (metadata-writer), substantial new APIs (artifact service), and model restructuring.
  • Logic Density: New ArtifactService introduces multiple endpoints with distinct semantics (CRUD, bulk operations, task linking); task API extends existing run service with new bulk operations and updated models.
  • Generated Code: Extensive homogeneous Go client generation (repetitive parameter/response handlers) lowers per-file review effort but requires validation of generator output.
  • Manifest Deletions: Consistent removal pattern across 10+ files but requires verification of completeness and impact on deployments.

Areas requiring extra attention:

  • Artifact service proto definition and HTTP/OpenAPI mappings (7 endpoints, custom request/response types)
  • V2beta1PipelineTaskDetail restructuring: field removals (ExecutionID, ExecutorDetail, PodName) and major restructuring (ExecutorDetail → Inputs, new Outputs/Pods/State fields)
  • Removal of metadata-writer from all deployment contexts; verify no runtime dependencies remain
  • kfp-k8s action additions: new build step sequencing and find-links path correctness
  • Generated Go models validation logic, especially nested validation for ArtifactTask and RunModel extensions

🐰 Artifacts now have homes, tasks get to know each other,
No more metadata whispers in the shadows—clarity gleams bright!
APIs bloom like spring flowers, structured and tight,
The pipeline hops forward with newfound delight! 🌸

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request description 'This is for code rabbit reviews' is vague and does not provide meaningful information about the changes, rationale, or implementation details required by the template. Provide a detailed description of the changes, explain the rationale for replacing MLMD with native storage, and document any breaking changes or migration considerations.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat(backend): replace MLMD with native artifact/task storage' clearly summarizes the main change in the changeset, which involves removing MLMD-related components and adding native artifact/task storage infrastructure.
Docstring Coverage ✅ Passed Docstring coverage is 92.41% which is sufficient. The required threshold is 80.00%.

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci openshift-ci bot requested review from gmfrasca and hbelmiro November 20, 2025 15:56
@openshift-ci
Copy link

openshift-ci bot commented Nov 20, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign humairak for approval. For more information see the Code Review Process.

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 /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@HumairAK
Copy link
Author

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Nov 20, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitai coderabbitai bot left a 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 Name with 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 PipelineTaskDetailChildTask
backend/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 generate target) now uses -v with :Z for SELinux relabeling, but lines 47 and 67 (in generate-kfp-server-api-package and generate-from-scratch targets) still use the older --mount type=bind syntax 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 generate target requires SELinux handling.

Also applies to: 47-47, 67-67

api/v2alpha1/pipeline_spec.proto (1)

972-975: RuntimeArtifact artifact_id addition looks correct; ensure generated code is refreshed

Adding 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 python
  • make -C api golang
backend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_producer.go (1)

15-54: V2beta1IOProducer model is straightforward; no issues from codegen

The IO producer model with optional iteration and task_name plus 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 ArtifactType and Artifact.type says “Required. The name of an ArtifactType. E.g. Dataset” and that TYPE_UNSPECIFIED should 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_UNSPECIFIED on 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 ## Properties and the Name | 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 ## Properties and the Name | 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 ## Properties and the Name | 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 ## Properties and the Name | 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: Redundant swag.IsZero check in contextValidateType (optional cleanup)

In contextValidateType, you first ensure m.Type != nil and then call swag.IsZero(m.Type). For a non-nil pointer, swag.IsZero will 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.IsZero check and just delegating to ContextValidate when Type is 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, validateArtifactTasks short-circuits when swag.IsZero(m.ArtifactTasks) and never emits a validation error, so callers can construct a request with a nil/empty ArtifactTasks slice 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.Required check rather than the current IsZero-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 WriteToRequest correctly propagate artifact_id and 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 empty ArtifactID before issuing the request, but this is not required for correctness.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0302125 and cb02722.

⛔ Files ignored due to path filters (7)
  • api/v2alpha1/go/pipelinespec/pipeline_spec.pb.go is excluded by !**/*.pb.go
  • backend/api/v2beta1/go_client/artifact.pb.go is excluded by !**/*.pb.go
  • backend/api/v2beta1/go_client/artifact.pb.gw.go is excluded by !**/*.pb.gw.go
  • backend/api/v2beta1/go_client/artifact_grpc.pb.go is excluded by !**/*.pb.go
  • backend/api/v2beta1/go_client/run.pb.go is excluded by !**/*.pb.go
  • backend/api/v2beta1/go_client/run.pb.gw.go is excluded by !**/*.pb.gw.go
  • backend/api/v2beta1/go_client/run_grpc.pb.go is 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.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_child_task.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_artifact.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_list_artifact_tasks_response.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/run_service_list_runs_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifacts_bulk_request.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_state.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/run_service_get_run_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_request.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_artifact_task.go
  • backend/api/v2beta1/go_http_client/run_model/input_outputs_i_o_parameter.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_tasks_bulk_response.go
  • backend/api/v2beta1/go_http_client/artifact_model/protobuf_any.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_i_o_producer.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_type.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/list_tasks_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_model/artifact_artifact_type.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_list_tasks_response.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_responses.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_input_outputs.go
  • backend/api/v2beta1/go_http_client/run_model/input_outputs_i_o_artifact.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_client.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_pod.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_type_attributes.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_request.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_update_tasks_bulk_request.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifact_task_request.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_status.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/get_artifact_responses.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifacts_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifacts_responses.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_list_artifact_response.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/batch_update_tasks_parameters.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_list_runs_request_view_mode.go
  • backend/api/v2beta1/go_http_client/artifact_model/protobuf_null_value.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/update_task_responses.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_artifact.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_producer.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/create_task_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_task_responses.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/get_artifact_parameters.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/run_service_client.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/artifact_service_client.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/get_task_responses.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_run.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifact_tasks_responses.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_i_o_type.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_update_tasks_bulk_response.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifact_tasks_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_model/googlerpc_status.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_create_artifacts_bulk_response.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/get_task_parameters.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/create_task_responses.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_get_run_request_view_mode.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/batch_update_tasks_responses.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifact_tasks_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_model/v2beta1_i_o_type.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_task_parameters.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifacts_responses.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/create_artifact_parameters.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/update_task_parameters.go
  • backend/api/v2beta1/go_http_client/run_model/pipeline_task_detail_task_pod_type.go
  • backend/api/v2beta1/go_http_client/run_client/run_service/list_tasks_responses.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/list_artifact_tasks_responses.go
  • backend/api/v2beta1/go_http_client/artifact_client/artifact_service/batch_create_artifacts_parameters.go
  • backend/api/v2beta1/go_http_client/run_model/v2beta1_pipeline_task_detail.go
  • backend/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

Comment on lines +77 to +78
- name: Install kfp-server-api from source
run: pip install -e backend/api/v2beta1/python_http_client
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
- 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.

Comment on lines +17 to +58
// 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"`
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Align field docs with actual validation semantics

A few doc/behavior mismatches here:

  • Name and Type are documented as “Required”, but Validate never enforces that Name is non‑empty or that Type is non‑nil (both are effectively optional today).
  • CreatedAt is described as “in millisecond since epoch” but is modeled as strfmt.DateTime with date-time format, 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.

Comment on lines +21 to +23
// Required. The artifact to create.
Artifact *V2beta1Artifact `json:"artifact,omitempty"`

Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 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
  • Validate only delegates to validateArtifact without 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 -5

Length 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 -10

Length 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 request

Length 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 -50

Length 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).

Comment on lines +16 to +23
// 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"`
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Comment on lines +80 to +102
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
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

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.

Comment on lines +86 to +108
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
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

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.

Comment on lines 64 to 69
// 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"`
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
// 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.

Comment on lines +22 to +64
// 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
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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"`
  • validateTasks treats Tasks as optional (swag.IsZero(m.Tasks) returns early and allows an empty/nil map), and there is no top-level validate.Required enforcing 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.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
- 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]
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant