Skip to content

feat!: migrate helm binding to runtime.Typed credentials (gate 6)#2612

Merged
jakobmoellerdev merged 2 commits into
open-component-model:mainfrom
jakobmoellerdev:feat/1047-typed-credentials-gate6
May 22, 2026
Merged

feat!: migrate helm binding to runtime.Typed credentials (gate 6)#2612
jakobmoellerdev merged 2 commits into
open-component-model:mainfrom
jakobmoellerdev:feat/1047-typed-credentials-gate6

Conversation

@jakobmoellerdev

@jakobmoellerdev jakobmoellerdev commented May 22, 2026

Copy link
Copy Markdown
Member

Summary

Gate 6 of the phased ADR 0018 / issue #1047 credentials migration. Builds on gates 1–5 (PRs #2580, #2586, #2594, #2598, #2602).

Note: this branch also contains #2613 (plugin CredentialsFromHeader refactor). Once that merges, this PR will show only the helm changes.

helm binding changes

  • cmd/main.go, input/method.go: ProcessResource/ProcessSourceruntime.Typed
  • digest/digest.go: ProcessResourceDigestruntime.Typed; single ConvertCredentials call replaces two separate conversions
  • repository/resource/resource_repository.go: DownloadResource/UploadResourceruntime.Typed; var _ repository.ResourceRepository assertion restored
  • transformation/get_helm_chart.go: use upstream typed ResourceRepository interface; delete transformation/credentials.go
  • spec/credentials/v1/convert.go: new ConvertCredentials(runtime.Typed) (*HelmHTTPCredentials, *OCICredentials, error) — single scheme-based conversion returning both types
  • spec/credentials/scheme.go: package-level Scheme for helm credentials
  • spec/credentials/v1/helm_credentials.go: remove deprecated exported constants and FromDirectCredentials (now private)
  • go.mod: plugin → v0.0.16, blob → v0.0.13, repository → v0.0.9; no replace directives

Test plan

  • cd bindings/go/helm && go build ./... && go test ./... (cmd/* requires task build for plugin binary)
  • grep -rn "map\[string\]string" bindings/go/helm/ returns no credential parameter usages

Refs: #1047

@jakobmoellerdev jakobmoellerdev requested a review from a team as a code owner May 22, 2026 06:22
@netlify

netlify Bot commented May 22, 2026

Copy link
Copy Markdown

Deploy Preview for ocm-website canceled.

Name Link
🔨 Latest commit 11d5ae1
🔍 Latest deploy log https://app.netlify.com/projects/ocm-website/deploys/6a10346240197c000855734b

@github-actions github-actions Bot added !BREAKING-CHANGE! Breaking change in API or ocm-cli or spec kind/feature new feature, enhancement, improvement, extension labels May 22, 2026
@coderabbitai

coderabbitai Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Rate limit exceeded

@jakobmoellerdev has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 42 minutes and 39 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cc50e4ec-b0b4-45a4-9289-2bc2f57b6854

📥 Commits

Reviewing files that changed from the base of the PR and between 5d5d2dd and 11d5ae1.

⛔ Files ignored due to path filters (1)
  • bindings/go/helm/go.sum is excluded by !**/*.sum
📒 Files selected for processing (14)
  • bindings/go/helm/cmd/main.go
  • bindings/go/helm/digest/digest.go
  • bindings/go/helm/go.mod
  • bindings/go/helm/input/method.go
  • bindings/go/helm/internal/download/options.go
  • bindings/go/helm/repository/resource/resource_repository.go
  • bindings/go/helm/spec/credentials/scheme.go
  • bindings/go/helm/spec/credentials/v1/convert.go
  • bindings/go/helm/spec/credentials/v1/convert_test.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials_test.go
  • bindings/go/helm/transformation/credentials.go
  • bindings/go/helm/transformation/credentials_test.go
  • bindings/go/helm/transformation/get_helm_chart.go
📝 Walkthrough

Walkthrough

The PR migrates Helm binding credential handling from untyped map[string]string to runtime.Typed, adds a credential scheme and conversion for Helm HTTP/OCI credentials, updates input/digest/repository APIs to accept typed credentials and route them by repository scheme, removes map-based helpers/tests, and updates go.mod dependencies.

Changes

Helm Binding Typed Credential Migration

Layer / File(s) Summary
Credential scheme and conversion
bindings/go/helm/spec/credentials/scheme.go, bindings/go/helm/spec/credentials/v1/convert.go, bindings/go/helm/spec/credentials/v1/convert_test.go, bindings/go/helm/spec/credentials/v1/helm_credentials.go, bindings/go/helm/spec/credentials/v1/helm_credentials_test.go
Add exported Scheme, register v1 credential type, implement ConvertCredentials with table-driven tests covering passthrough, DirectCredentials mapping, raw payload handling, nil/no-type, and unknown-type error cases; remove map-based helper and exported credential key constants.
GetHelmChart credential resolution
bindings/go/helm/transformation/get_helm_chart.go
GetHelmChart.resolveCredentials now returns runtime.Typed and calls CredentialProvider.Resolve, treating credentials.ErrNotFound as “no credentials” and propagating other errors.
Input plugin and InputMethod
bindings/go/helm/cmd/main.go, bindings/go/helm/input/method.go
HelmInputPlugin.ProcessResource/ProcessSource and InputMethod.ProcessResource now accept credentials runtime.Typed. InputMethod converts typed credentials and selects a single credential option (WithCredentials or WithOCICredentials) passed to GetV1HelmBlob.
Digest processing and repository operations
bindings/go/helm/digest/digest.go, bindings/go/helm/repository/resource/resource_repository.go
DigestProcessor.ProcessResourceDigest, ResourceRepository.DownloadResource, and UploadResource accept runtime.Typed, convert typed credentials, and branch between OCI vs HTTP digest/download flows, forwarding appropriate credential options.
Cleanup and dependency updates
bindings/go/helm/internal/download/options.go, bindings/go/helm/transformation/credentials.go (removed), bindings/go/helm/transformation/credentials_test.go (removed), bindings/go/helm/go.mod
Removed deprecated exported credential key constants and FromDirectCredentials, deleted legacy credential resolution helper and its tests, and updated go.mod OCM binding versions and indirect dependencies.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • fabianburth
  • morri-son
  • piotrjanik

"I hopped through types with nimble feet,
maps gave way to Typed — a tidy feat.
OCI or HTTP, I sort with care,
helpers retired, conversions now fair.
A carrot for tests — the code breathes air!"

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 57.14% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat!: migrate helm binding to runtime.Typed credentials (gate 6)' accurately describes the main change: migrating the Helm binding's credential handling from map[string]string to runtime.Typed.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, covering the credentials migration across multiple files, API changes, module updates, and test plans.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@github-actions github-actions Bot added the size/l Large label May 22, 2026
@jakobmoellerdev jakobmoellerdev force-pushed the feat/1047-typed-credentials-gate6 branch 12 times, most recently from 4f463ff to 87fce1b Compare May 22, 2026 07:23
Comment thread bindings/go/helm/spec/credentials/v1/convert.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
bindings/go/helm/go.mod (1)

29-29: Update indirect dependency review: yaml/v4 is an RC, but security advisories don’t hit the pinned versions

  • go.yaml.in/yaml/v4 is pinned to v4.0.0-rc.2; Go module proxy shows only v4.0.0-rc.* variants (no stable v4.0.0), so treat this as a deliberate pre-release risk/upgrade tracking item.
  • The pinned indirect versions exist on the Go module proxy (including github.com/pb33f/ordered-map/v2 v2.3.1 and go.yaml.in/yaml/v4 v4.0.0-rc.2).
  • GitHub security advisories show no vulnerabilities for github.com/invopop/jsonschema, github.com/pb33f/ordered-map/v2, github.com/veqryn/slog-context, or go.yaml.in/yaml/v4; github.com/buger/jsonparser advisories apply to earlier versions (fixed starting at 1.1.2), and the pinned v1.2.0 is outside the vulnerable ranges.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@bindings/go/helm/go.mod` at line 29, The go.mod pins an RC of
go.yaml.in/yaml/v4 (v4.0.0-rc.2) which is a pre-release risk; update the repo
metadata to explicitly document this (e.g., add a short comment in go.mod or PR
description) noting the deliberate RC pin and plan to upgrade when a stable
release is available, confirm github.com/buger/jsonparser remains >= v1.1.2 (the
pinned v1.2.0 is OK), and verify other indirect pins
(github.com/pb33f/ordered-map/v2 v2.3.1, github.com/invopop/jsonschema,
github.com/veqryn/slog-context) are tracked for future updates so reviewers know
the RC/tracking decision.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@bindings/go/helm/go.mod`:
- Line 29: The go.mod pins an RC of go.yaml.in/yaml/v4 (v4.0.0-rc.2) which is a
pre-release risk; update the repo metadata to explicitly document this (e.g.,
add a short comment in go.mod or PR description) noting the deliberate RC pin
and plan to upgrade when a stable release is available, confirm
github.com/buger/jsonparser remains >= v1.1.2 (the pinned v1.2.0 is OK), and
verify other indirect pins (github.com/pb33f/ordered-map/v2 v2.3.1,
github.com/invopop/jsonschema, github.com/veqryn/slog-context) are tracked for
future updates so reviewers know the RC/tracking decision.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 45147385-2f5e-4745-a636-393a2385a49a

📥 Commits

Reviewing files that changed from the base of the PR and between f3a6699 and 7b047df.

⛔ Files ignored due to path filters (1)
  • bindings/go/helm/go.sum is excluded by !**/*.sum
📒 Files selected for processing (14)
  • bindings/go/helm/cmd/main.go
  • bindings/go/helm/digest/digest.go
  • bindings/go/helm/go.mod
  • bindings/go/helm/input/method.go
  • bindings/go/helm/internal/download/options.go
  • bindings/go/helm/repository/resource/resource_repository.go
  • bindings/go/helm/spec/credentials/scheme.go
  • bindings/go/helm/spec/credentials/v1/convert.go
  • bindings/go/helm/spec/credentials/v1/convert_test.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials_test.go
  • bindings/go/helm/transformation/credentials.go
  • bindings/go/helm/transformation/credentials_test.go
  • bindings/go/helm/transformation/get_helm_chart.go
💤 Files with no reviewable changes (5)
  • bindings/go/helm/transformation/credentials.go
  • bindings/go/helm/internal/download/options.go
  • bindings/go/helm/transformation/credentials_test.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials_test.go

@jakobmoellerdev jakobmoellerdev force-pushed the feat/1047-typed-credentials-gate6 branch 4 times, most recently from 5e0dfe8 to 1f441d4 Compare May 22, 2026 08:28
matthiasbruns
matthiasbruns previously approved these changes May 22, 2026
@jakobmoellerdev jakobmoellerdev force-pushed the feat/1047-typed-credentials-gate6 branch 3 times, most recently from a472315 to 7f3b020 Compare May 22, 2026 09:16
Comment thread bindings/go/helm/digest/digest.go Outdated
@jakobmoellerdev jakobmoellerdev force-pushed the feat/1047-typed-credentials-gate6 branch 2 times, most recently from c5e9430 to 5d5d2dd Compare May 22, 2026 10:30

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
bindings/go/helm/repository/resource/resource_repository.go (1)

105-130: 💤 Low value

Consider extracting credential conversion and scheme branching to a shared helper.

The credential conversion logic (convert → check prefix → type assert → append option) is duplicated verbatim in input/method.go, digest/digest.go, and this file. A helper in helmcredsv1 or helminternal could reduce repetition and centralize the OCI vs HTTP branching:

// Example signature in helmcredsv1 or helminternal:
func ResolveCredentialOptions(credentials runtime.Typed, repoURL string) ([]download.Option, error)

This is a minor concern given the phased migration; consider addressing in a follow-up consolidation pass.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@bindings/go/helm/repository/resource/resource_repository.go` around lines 105
- 130, Extract the duplicated credential conversion and scheme-branching into a
shared helper (e.g., helmcredsv1.ResolveCredentialOptions or
helminternal.ResolveCredentialOptions) that accepts the runtime.Typed
credentials and repo URL and returns ([]helmdownload.Option, error); move the
logic from resource_repository.go (the block using
helmcredsv1.ConvertCredentials, strings.HasPrefix(helmURL,"oci://"), type
assertions to *ocicredsv1.OCICredentials and *helmcredsv1.HelmHTTPCredentials,
and appending helmdownload.WithOCICredentials/WithCredentials) into that helper,
preserve the behavior of passing nil when converted is nil and returning
typed-errors on wrong type, then replace the inline block in
resource_repository.go (and similar blocks in input/method.go and
digest/digest.go) with a call to the new ResolveCredentialOptions helper and
append the returned options to opts.
bindings/go/helm/transformation/get_helm_chart.go (1)

129-134: ⚡ Quick win

Wrap credential resolution errors with operation context.

The fallback branch returns the resolver error unwrapped, which makes downstream logs less actionable.

♻️ Proposed improvement
 	typed, err := t.CredentialProvider.Resolve(ctx, consumerId)
 	if err != nil {
 		if errors.Is(err, credentials.ErrNotFound) {
 			return nil, nil
 		}
-		return nil, err
+		return nil, fmt.Errorf("failed resolving credentials for resource consumer identity: %w", err)
 	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@bindings/go/helm/transformation/get_helm_chart.go` around lines 129 - 134,
The credential resolver error returned in the fallback branch is propagated raw,
making logs unhelpful; update the error return in the block that checks
errors.Is(err, credentials.ErrNotFound) to wrap the non-ErrNotFound errors with
operation context (e.g., using fmt.Errorf("resolve credentials: %w", err)) so
callers of the function (getHelmChart or the credential resolution call site)
receive an error that includes "resolve credentials" context while preserving
the original error via %w.
bindings/go/helm/spec/credentials/v1/convert.go (1)

56-59: ⚡ Quick win

Include credential type in conversion error messages.

Current errors make triage harder when multiple credential types flow through this path. Include creds.GetType() (or converted type) in both failure branches.

♻️ Proposed improvement
-	typed, err := convertScheme.NewObject(creds.GetType())
+	credType := creds.GetType()
+	typed, err := convertScheme.NewObject(credType)
 	if err != nil {
-		return nil, fmt.Errorf("error converting credential type: %w", err)
+		return nil, fmt.Errorf("error creating credential object for type %q: %w", credType.String(), err)
 	}
 	if err = convertScheme.Convert(creds, typed); err != nil {
-		return nil, fmt.Errorf("error converting credential type: %w", err)
+		return nil, fmt.Errorf("error converting credential type %q: %w", credType.String(), err)
 	}
@@
-	return nil, fmt.Errorf("unsupported credential type %v", typed.GetType())
+	return nil, fmt.Errorf("unsupported converted credential type %q (from %q)", typed.GetType().String(), credType.String())

Also applies to: 71-71

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@bindings/go/helm/spec/credentials/v1/convert.go` around lines 56 - 59, Update
the error messages in the conversion failure branches to include the credential
type to aid triage: when the first conversion fails (before calling
convertScheme.Convert) and when convertScheme.Convert(creds, typed) returns an
error, include creds.GetType() (or the resolved type string) in the fmt.Errorf
calls so the messages read like "error converting credential type '%s': %w";
modify the error formatting in the blocks around convertScheme.Convert and the
earlier conversion branch (the conversion logic in convert.go that uses creds,
typed and convertScheme.Convert) and apply the same change to the other similar
failure at the later branch referenced near the second occurrence.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@bindings/go/helm/repository/resource/resource_repository.go`:
- Around line 105-130: Extract the duplicated credential conversion and
scheme-branching into a shared helper (e.g.,
helmcredsv1.ResolveCredentialOptions or helminternal.ResolveCredentialOptions)
that accepts the runtime.Typed credentials and repo URL and returns
([]helmdownload.Option, error); move the logic from resource_repository.go (the
block using helmcredsv1.ConvertCredentials, strings.HasPrefix(helmURL,"oci://"),
type assertions to *ocicredsv1.OCICredentials and
*helmcredsv1.HelmHTTPCredentials, and appending
helmdownload.WithOCICredentials/WithCredentials) into that helper, preserve the
behavior of passing nil when converted is nil and returning typed-errors on
wrong type, then replace the inline block in resource_repository.go (and similar
blocks in input/method.go and digest/digest.go) with a call to the new
ResolveCredentialOptions helper and append the returned options to opts.

In `@bindings/go/helm/spec/credentials/v1/convert.go`:
- Around line 56-59: Update the error messages in the conversion failure
branches to include the credential type to aid triage: when the first conversion
fails (before calling convertScheme.Convert) and when
convertScheme.Convert(creds, typed) returns an error, include creds.GetType()
(or the resolved type string) in the fmt.Errorf calls so the messages read like
"error converting credential type '%s': %w"; modify the error formatting in the
blocks around convertScheme.Convert and the earlier conversion branch (the
conversion logic in convert.go that uses creds, typed and convertScheme.Convert)
and apply the same change to the other similar failure at the later branch
referenced near the second occurrence.

In `@bindings/go/helm/transformation/get_helm_chart.go`:
- Around line 129-134: The credential resolver error returned in the fallback
branch is propagated raw, making logs unhelpful; update the error return in the
block that checks errors.Is(err, credentials.ErrNotFound) to wrap the
non-ErrNotFound errors with operation context (e.g., using fmt.Errorf("resolve
credentials: %w", err)) so callers of the function (getHelmChart or the
credential resolution call site) receive an error that includes "resolve
credentials" context while preserving the original error via %w.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e64e39c3-346c-48f0-b23f-663ff858b3e5

📥 Commits

Reviewing files that changed from the base of the PR and between 7f3b020 and 5d5d2dd.

⛔ Files ignored due to path filters (1)
  • bindings/go/helm/go.sum is excluded by !**/*.sum
📒 Files selected for processing (14)
  • bindings/go/helm/cmd/main.go
  • bindings/go/helm/digest/digest.go
  • bindings/go/helm/go.mod
  • bindings/go/helm/input/method.go
  • bindings/go/helm/internal/download/options.go
  • bindings/go/helm/repository/resource/resource_repository.go
  • bindings/go/helm/spec/credentials/scheme.go
  • bindings/go/helm/spec/credentials/v1/convert.go
  • bindings/go/helm/spec/credentials/v1/convert_test.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials_test.go
  • bindings/go/helm/transformation/credentials.go
  • bindings/go/helm/transformation/credentials_test.go
  • bindings/go/helm/transformation/get_helm_chart.go
💤 Files with no reviewable changes (5)
  • bindings/go/helm/internal/download/options.go
  • bindings/go/helm/transformation/credentials_test.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials_test.go
  • bindings/go/helm/transformation/credentials.go
  • bindings/go/helm/spec/credentials/v1/helm_credentials.go
✅ Files skipped from review due to trivial changes (2)
  • bindings/go/helm/spec/credentials/scheme.go
  • bindings/go/helm/go.mod

@jakobmoellerdev jakobmoellerdev force-pushed the feat/1047-typed-credentials-gate6 branch from 5d5d2dd to 752b5ab Compare May 22, 2026 10:38
Migrate bindings/go/helm from map[string]string credentials to
runtime.Typed as part of ADR 0018 / issue open-component-model#1047 (gate 6).

- Add spec/credentials/scheme.go: exported Scheme for HelmHTTPCredentials
- Add spec/credentials/v1/convert.go: ConvertCredentials(runtime.Typed)
  returning (*HelmHTTPCredentials, *OCICredentials, error) via a single
  scheme-based type switch; supports DirectCredentials, HelmHTTPCredentials,
  OCICredentials, and raw JSON input
- Add spec/credentials/v1/convert_test.go
- Remove transformation/credentials.go and transformation/credentials_test.go
  (superseded by ConvertCredentials)
- Update input/method.go, digest/digest.go, repository/resource/resource_repository.go,
  cmd/main.go to use runtime.Typed credential parameters and ConvertCredentials
- Remove deprecated credential constants from internal/download/options.go
  and spec/credentials/v1/helm_credentials.go

BREAKING CHANGE: ProcessResource, ProcessSource, DownloadResource, UploadResource,
and ProcessResourceDigest signatures change from map[string]string to runtime.Typed.

Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
On-behalf-of: @SAP <jakob.moeller@sap.com>
@jakobmoellerdev jakobmoellerdev force-pushed the feat/1047-typed-credentials-gate6 branch from 752b5ab to e9d9241 Compare May 22, 2026 10:45
@jakobmoellerdev jakobmoellerdev merged commit e4d3ffb into open-component-model:main May 22, 2026
21 checks passed
jakobmoellerdev added a commit that referenced this pull request May 26, 2026
…entials (gate 7) (#2616)

#### What this PR does / why we need it

Gate 7 of the typed credentials migration (ocm-project#1047).

Migrates `bindings/go/transfer` and `kubernetes/controller` to use
`runtime.Typed` credentials instead of `map[string]string`.

**bindings/go/transfer:**
- Bump `blob→v0.0.13`, `credentials→v0.0.12`, `oci→v0.0.43`,
`repository→v0.0.9`
- Update OCI identity import path: `oci/spec/credentials/identity/v1` →
`oci/spec/identity/v1`

**kubernetes/controller:**
- `resolveResourceCredentials` and `VerifyResource` return
`runtime.Typed` instead of `map[string]string`
- Replace `map[string]string` RSA credential literals with
`rsacredentialsv1.RSACredentials` structs
- Update import aliases for `oci/spec/credentials` and
`oci/spec/identity/v1`
- `GetComponentVersionRepository` call sites updated to pass
`runtime.Typed` credentials

#### Which issue(s) this PR fixes

Contributes:
- open-component-model/ocm-project#1047
- open-component-model/ocm-project#1055
- open-component-model/ocm-project#1056
- open-component-model/ocm-project#1057

#### Binding release order

| Gate | PRs | Modules | Status |
|------|-----|---------|--------|
| 1 | ✅ #2580 | blob, signing, rsa | merged |
| 2 | ✅ #2586 | repository, sigstore | merged |
| 3 | ✅ #2594 | oci | merged |
| 4 | ✅ #2598 | constructor | merged |
| 5 | ✅ #2602 | plugin, input/dir, input/file, input/utf8 | merged |
| 6 | ✅ #2612 | helm | merged |
| 7 | **this PR** | transfer, controller | 👈 |
| 8 | PR 8 | cli | — |

---------

Signed-off-by: Jakob Möller <contact@jakob-moeller.com>
Signed-off-by: Matthias Bruns <git@matthiasbruns.com>
Co-authored-by: Matthias Bruns <git@matthiasbruns.com>
@matthiasbruns matthiasbruns mentioned this pull request May 26, 2026
5 tasks
matthiasbruns added a commit that referenced this pull request May 26, 2026
On-behalf-of: SAP <matthias.bruns@sap.com>

<!-- markdownlint-disable MD041 -->
#### What this PR does / why we need it
Final PR of the breaking change chain for the credential migration.
This PR updated the CLI.

#### Which issue(s) this PR fixes
Fixed: open-component-model/ocm-project#1056

| Gate | PRs | Modules | Status |
|------|-----|---------|--------|
| 1 | ✅ #2580 | blob, signing, rsa | merged |
| 2 | ✅ #2586 | repository, sigstore | merged |
| 3 | ✅ #2594 | oci | merged |
| 4 | ✅ #2598 | constructor | merged |
| 5 | ✅ #2602 | plugin, input/dir, input/file, input/utf8 | merged |
| 6 | ✅ #2612 | helm | merged |
| 7 | ✅  #2616 | transfer, controller | merged |
| 8 | **this PR** | cli | 👈 |

#### Testing

##### How to test the changes

##### Verification

- [ ] I have added/updated tests for my changes (see [Test
Requirements](../CONTRIBUTING.md#test-requirements))
- [x] Tests pass locally (`task test` and `task test/integration` if
applicable)
- [ ] If touching multiple modules, `go work` is enabled (see `go.work`)
- [x] My changes do not decrease test coverage
- [ ] I have tested the changes locally by running `ocm`

---------

Signed-off-by: Matthias Bruns <git@matthiasbruns.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

!BREAKING-CHANGE! Breaking change in API or ocm-cli or spec kind/feature new feature, enhancement, improvement, extension size/l Large

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants