Skip to content

feat: support relative path, relative to Updatecli manifest files. - #10150

Merged
olblak merged 7 commits into
updatecli:mainfrom
olblak:issue/8300
Sep 24, 2026
Merged

olblak merged 7 commits into
updatecli:mainfrom
olblak:issue/8300

Conversation

@olblak

@olblak olblak commented Aug 28, 2026

Copy link
Copy Markdown
Member

Fix #8300

Relative paths in a manifest resolve against the directory updatecli was started from, never against the manifest that declared them. A manifest in updatecli.d/nodejs.yaml saying file: package.json means "package.json next to wherever the user happened to cd", which makes manifests non-relocatable: they cannot be moved, vendored into another repository, or pulled as an OCI policy without rewriting every path.

This pull request adds an opt-in way to say "resolve my paths against my own directory", the rule updatecli compose already applies to its own file (relativePathToFile in pkg/core/compose/file.go):

name: 'deps: bump nodejs'

options:
  relativepaths: manifest      # or "workingdirectory", the default

sources:
  version:
    kind: json
    spec:
      file: package.json       # resolved next to this manifest
      key: .version

It can also be set for a whole run with --relative-paths manifest or UPDATECLI_RELATIVE_PATHS=manifest; a manifest declaring the key wins over the command line. The default is unchanged, and is meant to stay that way: the dominant layout is updatecli.d/*.yaml referencing paths from the repository root, so flipping it would break nearly every existing manifest.

Only resources without an scmid are affected. A resource attached to an scm still resolves against the scm working directory, exactly as before.

Why this needed a refactor first

There was no single place that resolved a path. Each of the 43 resource kinds computed its own base directory and joined it itself, in five different ways:

On top of that, source.Run passed os.Getwd() when there was no scm, so six source implementations undid it with a copy-pasted block whose own comment asked for this fix:

The root cause: SanitizeFilePathWithWorkingDirectory conflated two different ideas into one workingDir argument — where relative paths resolve from and the boundary they must stay inside. Separating them is what makes manifest-relative resolution possible without weakening the containment fix:

// pkg/plugins/utils/resolver.go
type Resolver struct {
BaseDir string // where relative paths resolve from ("" = process working directory)
Boundary string // where they must stay inside ("" = no boundary)
}

Boundary is only ever set from an scm, so absolute paths keep being rejected inside a checkout and keep being accepted in local runs. Resolve is for files Updatecli reads or writes; Join is for locations it only needs in order to find something (a git repository, a chart directory, shell.workdir), which legitimately sit outside a checkout.

The Resolver is built once in pkg/core/pipeline and handed to every resource, which deleted the os.Getwd() branch and the sentinel hack along with it. SanitizeFilePathWithWorkingDirectory and JoinFilePathWithWorkingDirectoryPath are gone.

Bug fixed along the way

kind: json, toml, csv and toolversions currently fail on an absolute spec.file in a local run, reproducible on the released binary:

Test

To test this pull request, you can run the following commands:

cd pkg/plugins/utils          # the Resolver itself: BaseDir x Boundary matrix
go test
cd pkg/plugins/resources/containment   # containment across 12 file based kinds
go test
cd pkg/core/config            # the "options" section, merge rules and marshalling
go test
Or the whole suite from the repository root:

go test ./...

Additional Information

Checklist

  • I have updated the documentation via pull request in [website](https://github.com/updatecli/website) repository.
  • I have tested this pull request manually with a custom Updatecli build and it works as expected.

Evidence that the default path did not move:

  • updatecli manifest show --config updatecli.d on this repository is byte-identical to the released binary.
  • Eleven local e2e suites (file, yaml, json, toml, xml, csv, toolversions, hcl, terraform, golang, shell) produce identical results before and after.
  • manifest upgrade --in-place leaves a manifest without options untouched on disk, and preserves one that has it.

Tradeoff

Two behavior changes, both deliberate.

hcl, terraform/lock, terraform/provider, gomod, dockerfile, bazelmod and systemd used the uncontained join and could read or write outside an scm checkout through an absolute path. They are contained now, consistent with the other file based kinds. This is a tightening: a manifest using an absolute spec.file together with an scmid will now fail where it used to work. The GHSA fix clearly intended to cover these and simply missed them.

Conversely, json, toml, csv and toolversions become more permissive in local runs, which restores the behavior they had before the GHSA fix.

A large, mostly mechanical diff. The Resource interface gained a parameter, so all 43 kinds are touched (about two thirds are a signature change only). The alternative — resolving paths at manifest load time from struct tags — kept the diff small but fought with spec.searchpattern globs, helm's chart-relative file, and manifest show printing absolute paths. Paying once for explicit plumbing seemed better than a second implicit mechanism alongside the existing one.

options is opt-in forever, in practice. Because updatecli.d/*.yaml referencing repository-root paths is the dominant layout, the default cannot flip on a minor release. Revisiting it belongs to a major version.

Potential improvement

  • options is a namespace, not a single key. dryrun looks like the natural next tenant: a manifest declaring options.dryrun: true could guarantee it never applies, whatever the command line says. ManifestOptions.Merge is a method precisely so each setting can pick its own rule — relativepaths lets the manifest override the CLI, whereas dryrun would need a logical OR so the safer value always wins.
  • Values and secrets files passed with --values / --secrets are still resolved from the process working directory. Making them follow relativepaths would be a natural follow-up, and would bring the behavior fully in line with updatecli compose.
  • deprecatedFieldKeys only reflects the manifest top level, so a key deprecated inside options would be reported as unknown rather than deprecated. A comment marks the spot; it needs a change only once that case exists.
  • The shared FileContent.Read used by json/toml/csv/toolversions mutates FilePath in place. It is idempotent now, but keeping the resolved path separate from the manifest one would be cleaner.

@olblak olblak added the enhancement New feature or request label Aug 28, 2026
@olblak
olblak requested a balanced review from Copilot August 28, 2026 07:32

Copilot AI 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.

Pull request overview

Adds opt-in manifest-relative path resolution while preserving working-directory defaults and SCM containment.

Changes:

  • Introduces manifest/CLI path-base configuration and shared resolver plumbing.
  • Migrates resource implementations to centralized path resolution.
  • Adds containment, resolver, configuration, and end-to-end coverage.

Reviewed changes

Copilot reviewed 276 out of 276 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
cmd/{apply,diff,pipeline_apply,pipeline_diff}.go Adds the relative-path option to pipeline commands.
cmd/{compose_apply,compose_diff}.go Propagates the option through compose execution.
cmd/{env,flags,root}.go Defines the environment variable, flag, and shared state.
pkg/core/config/{main,defaults,options,schemavalidate_registry}.go Loads, validates, merges, and applies manifest path options.
pkg/core/config/{main,relativepath}_test.go Tests configuration precedence and base selection.
pkg/core/engine/{autodiscovery,configuration,manifest_validate,options}.go Carries manifest options through loading and autodiscovery.
pkg/core/pipeline/{main,scmdirectory}.go Computes and distributes each manifest’s base directory.
pkg/core/pipeline/{condition,source,target}/main.go Constructs resolvers for pipeline resources.
pkg/core/pipeline/resource/main.go Extends the resource interface with a resolver.
pkg/core/pipeline/main_test.go Updates pipeline configuration tests.
pkg/plugins/utils/{filepath,resolver}.go Replaces legacy path helpers with the shared resolver.
pkg/plugins/utils/resolver_test.go Covers resolution and containment behavior.
pkg/plugins/utils/dasel/{main,read}.go Adds idempotent path resolution to structured files.
pkg/plugins/utils/dasel/read_containment_test.go Tests local paths, containment, and idempotency.
pkg/plugins/utils/toolversions/{main,read}.go Adds idempotent .tool-versions path resolution.
pkg/plugins/utils/toolversions/read_containment_test.go Updates containment coverage.
pkg/plugins/autodiscovery/cargo/utils.go Uses the resolver-aware TOML reader.
pkg/plugins/resources/containment/containment_test.go Adds cross-resource containment regression tests.
pkg/plugins/resources/{file,yaml}/*.go Centralizes file and glob path resolution.
pkg/plugins/resources/{xml,json,toml,csv,toolversions}/*.go Migrates structured-file resources to resolvers.
pkg/plugins/resources/{hcl,dockerfile,systemd,bazelmod}/*.go Resolves and contains file-based resource paths.
pkg/plugins/resources/terraform/{lock,provider}/*.go Resolves Terraform files through the shared resolver.
pkg/plugins/resources/go/gomod/*.go Resolves go.mod paths consistently.
pkg/plugins/resources/helm/*.go Resolves chart, metadata, and local repository locations.
pkg/plugins/resources/shell/*.go Resolves shell working directories from the selected base.
pkg/plugins/resources/{gitbranch,gitcommit,gittag}/*.go Resolves local repository paths.
pkg/plugins/resources/cargopackage/*.go Resolves filesystem registry roots.
pkg/plugins/resources/{awsami,bazelregistry,dockerdigest,dockerimage,githubrelease,jenkins,maven,npm,pypi,temurin,updateclihttp}/*.go Updates resource interfaces for resolver propagation.
pkg/plugins/resources/go/{language,module}/*.go Updates Go resource interfaces and tests.
pkg/plugins/resources/gitea/{branch,release,tag}/*.go Updates Gitea resource interfaces and tests.
pkg/plugins/resources/gitlab/{branch,release,tag}/*.go Updates GitLab resource interfaces and tests.
pkg/plugins/resources/stash/{branch,release,tag}/*.go Updates Stash resource interfaces.
e2e/updatecli.d/success.d/relativepaths/{manifest,workingdirectory}.yaml Exercises both selectable path bases.
e2e/updatecli.d/success.d/relativepaths/data.txt Supplies manifest-relative fixture data.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread pkg/core/config/defaults.go Outdated
Comment thread pkg/plugins/resources/helm/utils.go Outdated
Signed-off-by: Olblak <me@olblak.com>
Signed-off-by: Olblak <me@olblak.com>
Signed-off-by: Olblak <me@olblak.com>
Signed-off-by: Olblak <me@olblak.com>
Signed-off-by: Olblak <me@olblak.com>
@coderabbitai

coderabbitai Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 297 files, which is 147 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 413f2d86-ed8d-40c0-a7a3-cdbd4653d021

📥 Commits

Reviewing files that changed from the base of the PR and between f59fbdd and 172ef1b.

📒 Files selected for processing (297)
  • cmd/apply.go
  • cmd/compose_apply.go
  • cmd/compose_diff.go
  • cmd/compose_show.go
  • cmd/diff.go
  • cmd/env.go
  • cmd/flags.go
  • cmd/manifest_show.go
  • cmd/manifest_validate.go
  • cmd/pipeline_apply.go
  • cmd/pipeline_diff.go
  • cmd/pipeline_prepare.go
  • cmd/prepare.go
  • cmd/root.go
  • cmd/show.go
  • e2e/updatecli.d/success.d/relativepaths/data.txt
  • e2e/updatecli.d/success.d/relativepaths/manifest.yaml
  • e2e/updatecli.d/success.d/relativepaths/workingdirectory.yaml
  • pkg/core/cache/source.go
  • pkg/core/cache/source_test.go
  • pkg/core/config/defaults.go
  • pkg/core/config/defaults_test.go
  • pkg/core/config/main.go
  • pkg/core/config/main_test.go
  • pkg/core/config/options.go
  • pkg/core/config/relativepath_test.go
  • pkg/core/config/schemavalidate_registry.go
  • pkg/core/engine/autodiscovery.go
  • pkg/core/engine/configuration.go
  • pkg/core/engine/manifest_validate.go
  • pkg/core/engine/options.go
  • pkg/core/pipeline/condition/main.go
  • pkg/core/pipeline/main.go
  • pkg/core/pipeline/main_test.go
  • pkg/core/pipeline/resource/main.go
  • pkg/core/pipeline/scm/config.go
  • pkg/core/pipeline/scm/config_test.go
  • pkg/core/pipeline/scmdirectory.go
  • pkg/core/pipeline/scmdirectory_test.go
  • pkg/core/pipeline/source/main.go
  • pkg/core/pipeline/target/main.go
  • pkg/plugins/autodiscovery/cargo/utils.go
  • pkg/plugins/resources/awsami/condition.go
  • pkg/plugins/resources/awsami/condition_test.go
  • pkg/plugins/resources/awsami/source.go
  • pkg/plugins/resources/awsami/source_test.go
  • pkg/plugins/resources/awsami/target.go
  • pkg/plugins/resources/bazelmod/condition.go
  • pkg/plugins/resources/bazelmod/condition_test.go
  • pkg/plugins/resources/bazelmod/source.go
  • pkg/plugins/resources/bazelmod/source_test.go
  • pkg/plugins/resources/bazelmod/target.go
  • pkg/plugins/resources/bazelmod/target_test.go
  • pkg/plugins/resources/bazelregistry/condition.go
  • pkg/plugins/resources/bazelregistry/condition_test.go
  • pkg/plugins/resources/bazelregistry/source.go
  • pkg/plugins/resources/bazelregistry/source_test.go
  • pkg/plugins/resources/bazelregistry/target.go
  • pkg/plugins/resources/cargopackage/condition.go
  • pkg/plugins/resources/cargopackage/condition_test.go
  • pkg/plugins/resources/cargopackage/source.go
  • pkg/plugins/resources/cargopackage/source_test.go
  • pkg/plugins/resources/cargopackage/target.go
  • pkg/plugins/resources/containment/containment_test.go
  • pkg/plugins/resources/csv/condition.go
  • pkg/plugins/resources/csv/condition_test.go
  • pkg/plugins/resources/csv/csvContent.go
  • pkg/plugins/resources/csv/source.go
  • pkg/plugins/resources/csv/source_test.go
  • pkg/plugins/resources/csv/target.go
  • pkg/plugins/resources/csv/target_test.go
  • pkg/plugins/resources/dockerdigest/condition.go
  • pkg/plugins/resources/dockerdigest/condition_test.go
  • pkg/plugins/resources/dockerdigest/source.go
  • pkg/plugins/resources/dockerdigest/source_test.go
  • pkg/plugins/resources/dockerdigest/target.go
  • pkg/plugins/resources/dockerfile/condition.go
  • pkg/plugins/resources/dockerfile/condition_test.go
  • pkg/plugins/resources/dockerfile/source.go
  • pkg/plugins/resources/dockerfile/source_test.go
  • pkg/plugins/resources/dockerfile/target.go
  • pkg/plugins/resources/dockerfile/target_test.go
  • pkg/plugins/resources/dockerimage/condition.go
  • pkg/plugins/resources/dockerimage/condition_test.go
  • pkg/plugins/resources/dockerimage/source.go
  • pkg/plugins/resources/dockerimage/source_test.go
  • pkg/plugins/resources/dockerimage/target.go
  • pkg/plugins/resources/file/condition.go
  • pkg/plugins/resources/file/condition_test.go
  • pkg/plugins/resources/file/main.go
  • pkg/plugins/resources/file/source.go
  • pkg/plugins/resources/file/source_test.go
  • pkg/plugins/resources/file/target.go
  • pkg/plugins/resources/file/target_containment_test.go
  • pkg/plugins/resources/file/target_test.go
  • pkg/plugins/resources/gitbranch/condition.go
  • pkg/plugins/resources/gitbranch/source.go
  • pkg/plugins/resources/gitbranch/source_test.go
  • pkg/plugins/resources/gitbranch/target.go
  • pkg/plugins/resources/gitbranch/target_test.go
  • pkg/plugins/resources/gitcommit/condition.go
  • pkg/plugins/resources/gitcommit/condition_test.go
  • pkg/plugins/resources/gitcommit/source.go
  • pkg/plugins/resources/gitcommit/source_test.go
  • pkg/plugins/resources/gitcommit/target.go
  • pkg/plugins/resources/gitea/branch/condition.go
  • pkg/plugins/resources/gitea/branch/condition_test.go
  • pkg/plugins/resources/gitea/branch/source.go
  • pkg/plugins/resources/gitea/branch/source_test.go
  • pkg/plugins/resources/gitea/branch/target.go
  • pkg/plugins/resources/gitea/release/condition.go
  • pkg/plugins/resources/gitea/release/condition_test.go
  • pkg/plugins/resources/gitea/release/source.go
  • pkg/plugins/resources/gitea/release/source_test.go
  • pkg/plugins/resources/gitea/release/target.go
  • pkg/plugins/resources/gitea/tag/condition.go
  • pkg/plugins/resources/gitea/tag/condition_test.go
  • pkg/plugins/resources/gitea/tag/source.go
  • pkg/plugins/resources/gitea/tag/source_test.go
  • pkg/plugins/resources/gitea/tag/target.go
  • pkg/plugins/resources/githubrelease/condition.go
  • pkg/plugins/resources/githubrelease/source.go
  • pkg/plugins/resources/githubrelease/source_test.go
  • pkg/plugins/resources/githubrelease/target.go
  • pkg/plugins/resources/gitlab/branch/condition.go
  • pkg/plugins/resources/gitlab/branch/condition_test.go
  • pkg/plugins/resources/gitlab/branch/source.go
  • pkg/plugins/resources/gitlab/branch/source_test.go
  • pkg/plugins/resources/gitlab/branch/target.go
  • pkg/plugins/resources/gitlab/release/condition.go
  • pkg/plugins/resources/gitlab/release/condition_test.go
  • pkg/plugins/resources/gitlab/release/source.go
  • pkg/plugins/resources/gitlab/release/source_test.go
  • pkg/plugins/resources/gitlab/release/target.go
  • pkg/plugins/resources/gitlab/tag/condition.go
  • pkg/plugins/resources/gitlab/tag/condition_test.go
  • pkg/plugins/resources/gitlab/tag/source.go
  • pkg/plugins/resources/gitlab/tag/source_test.go
  • pkg/plugins/resources/gitlab/tag/target.go
  • pkg/plugins/resources/gittag/condition.go
  • pkg/plugins/resources/gittag/condition_test.go
  • pkg/plugins/resources/gittag/source.go
  • pkg/plugins/resources/gittag/source_test.go
  • pkg/plugins/resources/gittag/target.go
  • pkg/plugins/resources/gittag/utils.go
  • pkg/plugins/resources/go/gomod/condition.go
  • pkg/plugins/resources/go/gomod/condition_test.go
  • pkg/plugins/resources/go/gomod/source.go
  • pkg/plugins/resources/go/gomod/source_test.go
  • pkg/plugins/resources/go/gomod/target.go
  • pkg/plugins/resources/go/gomod/target_test.go
  • pkg/plugins/resources/go/language/condition.go
  • pkg/plugins/resources/go/language/condition_test.go
  • pkg/plugins/resources/go/language/source.go
  • pkg/plugins/resources/go/language/source_test.go
  • pkg/plugins/resources/go/language/target.go
  • pkg/plugins/resources/go/module/condition.go
  • pkg/plugins/resources/go/module/condition_test.go
  • pkg/plugins/resources/go/module/source.go
  • pkg/plugins/resources/go/module/source_test.go
  • pkg/plugins/resources/go/module/target.go
  • pkg/plugins/resources/hcl/condition.go
  • pkg/plugins/resources/hcl/condition_test.go
  • pkg/plugins/resources/hcl/main.go
  • pkg/plugins/resources/hcl/main_test.go
  • pkg/plugins/resources/hcl/source.go
  • pkg/plugins/resources/hcl/source_test.go
  • pkg/plugins/resources/hcl/target.go
  • pkg/plugins/resources/hcl/target_test.go
  • pkg/plugins/resources/helm/condition.go
  • pkg/plugins/resources/helm/condition_test.go
  • pkg/plugins/resources/helm/source.go
  • pkg/plugins/resources/helm/source_oci.go
  • pkg/plugins/resources/helm/source_test.go
  • pkg/plugins/resources/helm/target.go
  • pkg/plugins/resources/helm/target_test.go
  • pkg/plugins/resources/helm/utils.go
  • pkg/plugins/resources/helm/utils_test.go
  • pkg/plugins/resources/jenkins/condition.go
  • pkg/plugins/resources/jenkins/condition_test.go
  • pkg/plugins/resources/jenkins/source.go
  • pkg/plugins/resources/jenkins/source_test.go
  • pkg/plugins/resources/jenkins/target.go
  • pkg/plugins/resources/json/condition.go
  • pkg/plugins/resources/json/condition_test.go
  • pkg/plugins/resources/json/source.go
  • pkg/plugins/resources/json/source_test.go
  • pkg/plugins/resources/json/target.go
  • pkg/plugins/resources/json/target_test.go
  • pkg/plugins/resources/maven/condition.go
  • pkg/plugins/resources/maven/condition_test.go
  • pkg/plugins/resources/maven/source.go
  • pkg/plugins/resources/maven/source_test.go
  • pkg/plugins/resources/maven/target.go
  • pkg/plugins/resources/npm/condition.go
  • pkg/plugins/resources/npm/condition_test.go
  • pkg/plugins/resources/npm/source.go
  • pkg/plugins/resources/npm/source_test.go
  • pkg/plugins/resources/npm/target.go
  • pkg/plugins/resources/pypi/condition.go
  • pkg/plugins/resources/pypi/condition_test.go
  • pkg/plugins/resources/pypi/source.go
  • pkg/plugins/resources/pypi/source_test.go
  • pkg/plugins/resources/pypi/target.go
  • pkg/plugins/resources/shell/condition.go
  • pkg/plugins/resources/shell/condition_test.go
  • pkg/plugins/resources/shell/main.go
  • pkg/plugins/resources/shell/main_test.go
  • pkg/plugins/resources/shell/source.go
  • pkg/plugins/resources/shell/source_test.go
  • pkg/plugins/resources/shell/target.go
  • pkg/plugins/resources/shell/target_test.go
  • pkg/plugins/resources/stash/branch/condition.go
  • pkg/plugins/resources/stash/branch/source.go
  • pkg/plugins/resources/stash/branch/target.go
  • pkg/plugins/resources/stash/release/condition.go
  • pkg/plugins/resources/stash/release/source.go
  • pkg/plugins/resources/stash/release/target.go
  • pkg/plugins/resources/stash/tag/condition.go
  • pkg/plugins/resources/stash/tag/source.go
  • pkg/plugins/resources/stash/tag/target.go
  • pkg/plugins/resources/systemd/condition.go
  • pkg/plugins/resources/systemd/condition_test.go
  • pkg/plugins/resources/systemd/source.go
  • pkg/plugins/resources/systemd/source_test.go
  • pkg/plugins/resources/systemd/target.go
  • pkg/plugins/resources/systemd/target_test.go
  • pkg/plugins/resources/temurin/condition.go
  • pkg/plugins/resources/temurin/condition_test.go
  • pkg/plugins/resources/temurin/source.go
  • pkg/plugins/resources/temurin/source_test.go
  • pkg/plugins/resources/temurin/target.go
  • pkg/plugins/resources/terraform/lock/condition.go
  • pkg/plugins/resources/terraform/lock/condition_test.go
  • pkg/plugins/resources/terraform/lock/main.go
  • pkg/plugins/resources/terraform/lock/main_test.go
  • pkg/plugins/resources/terraform/lock/source.go
  • pkg/plugins/resources/terraform/lock/target.go
  • pkg/plugins/resources/terraform/lock/target_test.go
  • pkg/plugins/resources/terraform/provider/condition.go
  • pkg/plugins/resources/terraform/provider/condition_test.go
  • pkg/plugins/resources/terraform/provider/main.go
  • pkg/plugins/resources/terraform/provider/main_test.go
  • pkg/plugins/resources/terraform/provider/source.go
  • pkg/plugins/resources/terraform/provider/target.go
  • pkg/plugins/resources/terraform/provider/target_test.go
  • pkg/plugins/resources/terraform/registry/condition.go
  • pkg/plugins/resources/terraform/registry/condition_test.go
  • pkg/plugins/resources/terraform/registry/source.go
  • pkg/plugins/resources/terraform/registry/source_test.go
  • pkg/plugins/resources/terraform/registry/target.go
  • pkg/plugins/resources/toml/condition.go
  • pkg/plugins/resources/toml/condition_test.go
  • pkg/plugins/resources/toml/source.go
  • pkg/plugins/resources/toml/source_test.go
  • pkg/plugins/resources/toml/target.go
  • pkg/plugins/resources/toml/target_test.go
  • pkg/plugins/resources/toolversions/condition.go
  • pkg/plugins/resources/toolversions/condition_test.go
  • pkg/plugins/resources/toolversions/source.go
  • pkg/plugins/resources/toolversions/source_test.go
  • pkg/plugins/resources/toolversions/target.go
  • pkg/plugins/resources/toolversions/target_test.go
  • pkg/plugins/resources/updateclihttp/condition.go
  • pkg/plugins/resources/updateclihttp/condition_test.go
  • pkg/plugins/resources/updateclihttp/source.go
  • pkg/plugins/resources/updateclihttp/source_test.go
  • pkg/plugins/resources/updateclihttp/target.go
  • pkg/plugins/resources/vulnerability/osv/condition.go
  • pkg/plugins/resources/vulnerability/osv/condition_test.go
  • pkg/plugins/resources/vulnerability/osv/source.go
  • pkg/plugins/resources/vulnerability/osv/source_test.go
  • pkg/plugins/resources/vulnerability/osv/target.go
  • pkg/plugins/resources/xml/condition.go
  • pkg/plugins/resources/xml/condition_test.go
  • pkg/plugins/resources/xml/source.go
  • pkg/plugins/resources/xml/source_test.go
  • pkg/plugins/resources/xml/target.go
  • pkg/plugins/resources/xml/target_test.go
  • pkg/plugins/resources/yaml/condition.go
  • pkg/plugins/resources/yaml/condition_test.go
  • pkg/plugins/resources/yaml/main.go
  • pkg/plugins/resources/yaml/source.go
  • pkg/plugins/resources/yaml/source_test.go
  • pkg/plugins/resources/yaml/target.go
  • pkg/plugins/resources/yaml/target_create_test.go
  • pkg/plugins/resources/yaml/target_test.go
  • pkg/plugins/utils/dasel/main.go
  • pkg/plugins/utils/dasel/read.go
  • pkg/plugins/utils/dasel/read_containment_test.go
  • pkg/plugins/utils/filepath.go
  • pkg/plugins/utils/filepath_test.go
  • pkg/plugins/utils/pathresolver/pathresolver.go
  • pkg/plugins/utils/pathresolver/pathresolver_test.go
  • pkg/plugins/utils/toolversions/main.go
  • pkg/plugins/utils/toolversions/read.go
  • pkg/plugins/utils/toolversions/read_containment_test.go

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


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.

Fix the regressions found while reviewing the relative paths work:

- keep the auto guessed "local" scm on its own clone instead of the
  user's working copy
- read helm Chart.yaml from the resolved chart directory without an scm
- resolve each scm "directory" once, in Init, Update and autodiscovery,
  including the typed specs of the githubsearch, gitlabsearch and
  azuredevopssearch scms
- keep accepting absolute and parent paths for the resources that never
  enforced the scm boundary, and read absolute dockerfile source and helm
  file:// paths under the checkout
- resolve the git resources "path" from the manifest directory, and open
  the process working directory when they name no scm, url or path
- create git branches in the resolved repository directory
- add the base directory to the source cache key
- register --relative-paths on prepare, show and manifest validate
- document what "relativepaths: manifest" changes

Signed-off-by: Olblak <me@olblak.com>
@olblak
olblak merged commit 37072fa into updatecli:main Sep 24, 2026
8 checks passed
@olblak olblak changed the title Support relative path, relative to Updatecli manifest files. feat: support relative path, relative to Updatecli manifest files. Sep 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature Request: Make relative path relative to Updatecli manifest.

2 participants