Commit Graph
6965 Commits
Author SHA1 Message Date
Shubham Pampattiwar c4792779eb Fix concurrent map writes crash in pvcPvMap
BackupVolumesInformation lives on the shared backupRequest and every
ItemBlock worker goroutine reaches pvcPvMap.insert via addVolumeInfo
whenever it backs up a PersistentVolume. The map had no synchronization,
so with --item-block-worker-count greater than 1 and a backup containing
multiple PVs, two workers could write the map concurrently. That is an
unrecoverable Go runtime fatal error, which kills the Velero server and
abandons the in-flight backup.

Guard pvcPvMap.data with an RWMutex so insert and retrieve are safe for
concurrent use, and guard the lazy initialization in InsertPVMap so
concurrent callers cannot each install their own map and lose entries.

The restore-side RestoreVolumeInfoTracker already locks around
pvPvc.insert. This brings the backup path in line.

Adds a regression test that reproduces the crash under -race without the
fix.

Fixes #10634

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
2026-10-08 11:14:58 -07:00
Abhayraj JaiswalandGitHub 170085858e fix(uninstall): standardize error messages to Velero lowercase conventions (#10619)
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
e2e-test-kind.yaml / extract (push) Failing after 6s
Run the E2E test on kind / get-go-version (push) Failing after 7s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
Align error return statements in pkg/cmd/cli/uninstall/uninstall.go with Velero Code Standards by keeping error messages lower-cased.

Closes #10618

Signed-off-by: Abhayraj Jaiswal <abhayraj916146@gmail.com>
2026-10-08 13:59:32 +08:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Tiger Kaovilai
36fb29870a docs: use consistent excludedNames glob pattern in filter design examples (#10051)
Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Tiger Kaovilai <tkaovila@redhat.com>
2026-10-08 13:17:22 +08:00
KrishhnaTandGitHub ee89d7ff38 Fix the MinIO image cache key in the kind e2e workflow (#10631)
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
e2e-test-kind.yaml / extract (push) Failing after 6s
Run the E2E test on kind / get-go-version (push) Failing after 7s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
* Fix the MinIO image cache key in the kind e2e workflow

The build job restores the MinIO image with
minio-bitnami-${{ env.BITNAMI_CONTAINERS_COMMIT }} and the e2e jobs look
for the same key, but the save step writes
minio-bitnami-${{ steps.minio-version.outputs.dockerfile_sha }}. No step
has that id, so the expression is empty and the image is saved under a
key nothing ever reads.

Upstream only works because an entry under the right key is still in the
cache and kept alive by use; caches unused for seven days are evicted, so
a quiet week would leave every e2e job unable to load the image. A fork
has no such entry, so all of them fail at once:

  Loading MinIO image...
  ./minio-image.tar: No such file or directory

Save under the key the restores ask for.

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>

* Add changelog for #10631

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>

---------

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>
2026-10-07 13:28:12 -07:00
Abhayraj JaiswalandGitHub b57ed87f6b fix(controller): propagate context during backup request preparation (#10621)
Pass caller-provided context.Context through cluster API queries during backup request preparation and snapshot location validation, ensuring context cancellation and deadlines are properly respected.

Closes #10620

Signed-off-by: Abhayraj Jaiswal <abhayraj916146@gmail.com>
2026-10-07 11:36:54 -04:00
KrishhnaTandGitHub 1342339994 e2e: verify CSI snapshots on kind (#10593)
Run the E2E test on kind / setup-test-matrix (push) Failing after 7s
e2e-test-kind.yaml / extract (push) Failing after 14s
Run the E2E test on kind / get-go-version (push) Failing after 9m53s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 10s
Main CI / get-go-version (push) Failing after 10m23s
Main CI / Build (push) Skipped
Scorecard supply-chain security / Scorecard analysis (push) Skipped
* e2e: verify CSI snapshots on kind

Four snapshot cases cannot run on kind today. The backup itself succeeds
and the volume info lists the snapshots, but verification fails with
"Cloud provider kind is not valid": getProvider knows aws, vsphere, gcp
and azure, and CheckSnapshotsInProvider exempts only vanilla-zfs, so kind
falls through to a cloud lookup it has no API for.

Check kind in the cluster instead. A backup's VolumeSnapshotContents
exist only briefly while it is being created, so they cannot be counted
afterwards the way the cloud providers count snapshots; what Velero
recorded in the backup's volume info can be, one ready CSI snapshot per
volume. That is a weaker statement than the cloud checks make, since it
says the snapshots were taken and reported ready rather than that they
still exist in the storage provider. A backup expected to have none left,
after its deletion, is checked the other way round: nothing for it may
remain in the cluster, which reuses CheckVolumeSnapshotCR.

BuildSnapshotCheckPointFromVolumeInfo only collected those snapshot
handles for AWS and Azure, so on kind the checkpoint arrived with no
handles and EnableCSI false even with FEATURES=EnableCSI. Include kind.

This does not remove any of the CloudProvider == Kind skips; they need
Kibishii to offer a CSI StorageClass for kind as well.

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>

* Add changelog for #10593

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>

* e2e: check the snapshot handles rather than their count

Comparing the number of recorded snapshots against the number expected
cannot fail. BuildSnapshotCheckPointFromVolumeInfo already returns an
error when a volume is not ready to use, and again when the counts do not
match, and it appends to the list in that same loop, so the length is
settled before the check is reached.

It does not look at the handle it recorded, so a volume reported ready
with an empty snapshot handle passes today. Check that instead, which is
the difference between Velero saying a snapshot was taken and something
having been provisioned.

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>

---------

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>
2026-10-06 23:29:50 -04:00
hsdfatandGitHub 30114a6851 Fix Zip Slip path check accepting a sibling directory in archive extraction (#10212)
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Run the E2E test on kind / setup-test-matrix (push) Failing after 19m6s
push.yml / extract (push) Failing after 12s
Main CI / get-go-version (push) Failing after 26m20s
Main CI / Build (push) Skipped
e2e-test-kind.yaml / extract (push) Failing after 10m13s
Run the E2E test on kind / get-go-version (push) Failing after 38m37s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
* Fix Zip Slip path check accepting a sibling directory in archive extraction

sanitizeArchivePath confirmed an extracted tar entry stayed inside the
destination directory with strings.HasPrefix. HasPrefix has no separator
boundary, so a sibling directory whose name begins with the destination
directory's name - reached via a "../<destDir-name>-evil/x" entry -
satisfied the check and escaped the directory.

Verify containment with filepath.Rel instead, matching the check #10102
added to GetVersionedItemFilePath, rejecting a relative path equal to ".."
or under "../".

Fixes #10184

Signed-off-by: phatlc <phatle.hsd@gmail.com>

* Pin sanitizeArchivePath behaviour for entries naming destDir itself

An entry named "." or one with an empty name joins to destDir, so
filepath.Rel returns "." and the path is accepted. That is correct - it is
contained - but the table did not state it, and the returned path was not
asserted at all. Add the two rows and check targetPath on the accepted
cases so the containment boundary is pinned on both sides.

Signed-off-by: phatlc <phatle.hsd@gmail.com>

---------

Signed-off-by: phatlc <phatle.hsd@gmail.com>
2026-10-05 23:32:06 -04:00
KrishhnaTandGitHub e605fb2d3d Merge pull request #10596 from krishhna24/e2e-csi-hostpath-installer
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
e2e-test-kind.yaml / extract (push) Failing after 7s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Run the E2E test on kind / get-go-version (push) Failing after 8s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
e2e: add a script to install CSI snapshot support on kind
2026-10-04 10:06:20 -07:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
68b1f5322d Bump the github-actions group with 2 updates (#10622)
Run the E2E test on kind / setup-test-matrix (push) Failing after 4s
e2e-test-kind.yaml / extract (push) Failing after 11s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Run the E2E test on kind / get-go-version (push) Failing after 11s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 7s
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
Bumps the github-actions group with 2 updates: [korthout/backport-action](https://github.com/korthout/backport-action) and [github/codeql-action](https://github.com/github/codeql-action).


Updates `korthout/backport-action` from 4.6.1 to 4.7.0
- [Release notes](https://github.com/korthout/backport-action/releases)
- [Commits](https://github.com/korthout/backport-action/compare/6b65649031ac6d18ffdfd0c0820e9436f3fde22b...8560fb503c275d433c56f05a2f64850093baa9f7)

Updates `github/codeql-action` from 4.38.1 to 4.38.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.38.1...v4.38.2)

---
updated-dependencies:
- dependency-name: korthout/backport-action
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.38.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-04 09:27:00 -04:00
jxjandGitHub 2d13594af8 docs: fix contributor and maintainer guidance links (#10617)
e2e-test-kind.yaml / extract (push) Failing after 13s
Run the E2E test on kind / get-go-version (push) Failing after 17s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / setup-test-matrix (push) Failing after 4s
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
* docs: fix contributor and maintainer guidance links

Signed-off-by: xinjun.jiang <xinjun.jiang@daocloud.io>

* docs: add contributor guidance changelog

Record the contributor and maintainer documentation link corrections in the release notes.

Signed-off-by: jxj <xinjun.jiang@daocloud.io>

---------

Signed-off-by: xinjun.jiang <xinjun.jiang@daocloud.io>
Signed-off-by: jxj <xinjun.jiang@daocloud.io>
2026-10-02 11:57:48 -04:00
Shubham PampattiwarandGitHub 65623e7a08 Merge pull request #10572 from shubham-pampattiwar/docs/roadmap-architecture
Run the E2E test on kind / setup-test-matrix (push) Failing after 5s
e2e-test-kind.yaml / extract (push) Failing after 8s
Run the E2E test on kind / get-go-version (push) Failing after 10s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 9s
Main CI / get-go-version (push) Failing after 13s
Main CI / Build (push) Skipped
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Add architecture entry point and roadmap change process
2026-10-01 14:59:02 -07:00
Prasad JoshiandGitHub b60fb22929 fix: defer VGS cleanup until backup finalization (#10612)
Run the E2E test on kind / setup-test-matrix (push) Failing after 5s
e2e-test-kind.yaml / extract (push) Failing after 10s
Run the E2E test on kind / get-go-version (push) Failing after 12s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 7s
Main CI / get-go-version (push) Failing after 8s
Main CI / Build (push) Skipped
Scorecard supply-chain security / Scorecard analysis (push) Skipped
* fix: defer VGS cleanup until backup finalization

The CSI PVC backup action deleted the VolumeGroupSnapshot and bound
VolumeGroupSnapshotContent after creating and waiting for all group
member VolumeSnapshots. At that point, Velero had not necessarily
completed processing the member VolumeSnapshots, CSI async operations,
or archive finalization.

Deleting the VGS triggered external-snapshotter member cleanup and could
remove VolumeSnapshot API objects still referenced by the Backup
workflow.

Remove immediate VGS/VGSC deletion from getVolumeSnapshotReference and
retain the group until the Backup reaches a terminal phase. Continue
processing VGS member VolumeSnapshots through the existing normal CSI
finalization path.

Add the velero.io/volume-group-snapshot-cleanup Backup finalizer before
VGS creation. Label VGSC resources with the Backup name and UID, enforce
DeletionPolicy=Retain before cleanup, and delete VGS/VGSC resources from
terminal Backup reconciliation only.

Make cleanup idempotent and retryable, including recovery of labeled
orphan VGSC resources. Remove the Backup finalizer only after VGS/VGSC
cleanup verification succeeds. Block Backup deletion while cleanup is
pending.

Add unit and controller integration tests covering finalizer
registration, VGS creation, terminal cleanup, failed-Backup cleanup,
orphan VGSC cleanup, and finalizer removal.

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* add changelog

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Adress review feedback

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* remove stale VGS finalizer during snapshot restore

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Improve codecoverage

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* explain VGS member snapshot cleanup timing

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Second pass at review comment

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Third pass at review comment

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Dont swallow get errors

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Patch backup CR only when annotation is missing

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

---------

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>
2026-10-01 12:57:32 -04:00
Shubham Pampattiwar 212b205d0e Link file-system backup and data mover docs
Address review feedback from @Joeavaikath.

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
2026-09-30 19:11:47 -07:00
Shubham PampattiwarandGitHub cfd7752dfd Add Google Analytics 4 to the Velero website (#10583)
Run the E2E test on kind / setup-test-matrix (push) Failing after 4s
e2e-test-kind.yaml / extract (push) Failing after 8s
Run the E2E test on kind / get-go-version (push) Failing after 13s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 7s
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Adds a gtag.js partial wired into both site head templates (baseof.html and
head-docs.html) so every page on velero.io reports into a single GA4 property.

The Measurement ID (G-XX7MWLVX37) is a CNCF-provisioned property for the Velero
project (CNCF Service Desk CNCFSD-3824). The tag renders only in production
builds, so local development and Netlify PR previews are excluded from the data.

This also satisfies the CLOMonitor analytics check for our CNCF incubation
work.

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
2026-09-30 07:59:42 -07:00
Xun Jiang/Bruce JiangandGitHub e5d9354ddf Merge pull request #9950 from danhubern/patch-1
Run the E2E test on kind / setup-test-matrix (push) Failing after 4s
e2e-test-kind.yaml / extract (push) Failing after 7s
Run the E2E test on kind / get-go-version (push) Failing after 7s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
Fix typo in resource_modifiers_validator conditions error message
2026-09-30 15:32:29 +08:00
lyndon-liandGitHub 36d38256d8 Merge pull request #10607 from blackpiglet/jxun/10606_fix
Run the E2E test on kind / setup-test-matrix (push) Failing after 5s
e2e-test-kind.yaml / extract (push) Failing after 6s
Run the E2E test on kind / get-go-version (push) Failing after 8s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Main CI / get-go-version (push) Failing after 8s
Main CI / Build (push) Skipped
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Use GetGlobalResourcePolicies to replace GetResourcePoliciesFromBackup.
2026-09-30 11:09:32 +08:00
Abhayraj JaiswalandGitHub c7386dd0a9 fix(controller): propagate context in backup repository BSL invalidation (#10605)
In invalidateBackupReposForBSL, pass the caller-provided context.Context to r.List and r.patchBackupRepository so that context cancellation and deadlines are properly respected during BackupRepository invalidation on BSL changes.

Closes #10604

Signed-off-by: Abhayraj Jaiswal <abhayraj916146@gmail.com>
2026-09-29 18:00:41 -04:00
Xun Jiang/Bruce JiangandGitHub d94557081a Use go-client to replace kubectl if possible. (#10592)
Add stdOut and stdErr for the kubectl CLI output.
Delete some unused functions.

Signed-off-by: Xun Jiang <xun.jiang@broadcom.com>
2026-09-29 17:03:58 -04:00
56f7948287 fix: regenerate CRD manifests for the status.activities field (#10608)
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
e2e-test-kind.yaml / extract (push) Failing after 6s
Run the E2E test on kind / get-go-version (push) Failing after 8s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 8s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Main CI / get-go-version (push) Failing after 9s
Main CI / Build (push) Skipped
* fix: regenerate CRD manifests for the status.activities field

PR #10552 ("Move the progress messages to activities") added a new
Activities []string field to PodVolumeBackupStatus, PodVolumeRestoreStatus,
DataUploadStatus, and DataDownloadStatus, but the CRD YAML manifests under
config/crd/{v1,v2alpha1}/bases were never regenerated to match -- so main's
installed CRDs have been silently out of sync with their own Go types since
that PR merged. Anything validating status writes against a strict/vendored
copy of these CRDs (e.g. an admission webhook, or the new --crd-schema-check
startup check in #9910) would reject a legitimate .status.activities write
as an unknown field.

Regenerated via: GOPATH=~/go bash hack/update-3generated-crd-code.sh
(controller-gen v0.16.5, matching go.mod's sigs.k8s.io/controller-tools pin).
No manual edits; the deepcopy diffs are the expected byproduct of the new
[]string field.

Co-authored-by: Hermes Agent <noreply@hermes-agent>
Signed-off-by: Tiger Kaovilai <passawit.kaovilai@gmail.com>

* changelog: add entry for PR #10608

Co-authored-by: Hermes Agent <noreply@hermes-agent>
Signed-off-by: Tiger Kaovilai <passawit.kaovilai@gmail.com>

---------

Signed-off-by: Tiger Kaovilai <passawit.kaovilai@gmail.com>
Co-authored-by: Hermes Agent <noreply@hermes-agent>
2026-09-29 18:42:35 +00:00
d8facf81f8 Detect VolumeGroupSnapshot API version at runtime (v1/v1beta2/v1beta1) (#10601)
* Migrate VolumeGroupSnapshot API from v1beta2 to v1

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Add changelog

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>

* Detect VolumeGroupSnapshot API version at runtime

Velero hardcoded the VolumeGroupSnapshot (VGS) API version, so VGS backup and
restore failed on clusters that serve a different version than Velero expects.
For example OCP 5.0 serves only groupsnapshot.storage.k8s.io/v1 and OCP 4.22
serves only v1beta1, while Velero targeted a single version and failed with
"no matches for kind" on the others.

Detect the served VGS API version at runtime via the discovery client
(preferring v1 > v1beta2 > v1beta1) and perform all VGS, VGSClass and VGSContent
I/O through the dynamic client, converting to and from the canonical v1 typed
structs. The controller-runtime typed client cannot negotiate versions because
it sends the GVK of the Go type, so the dynamic client is used at the I/O
boundary instead. Owner-reference matching is now version-independent (Kind and
UID), since the CSI controller stamps refs with whatever version the cluster
serves.

This builds on the v1 migration and external-snapshotter client bump from the
previous commits.

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>

* Add changelog for VGS runtime version detection

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>

* docs: VGS supports v1/v1beta2/v1beta1 via runtime detection

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>

* Remove superseded changelog for #10600 (covered by #10601)

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>

* Use crClient + unstructured for VGS access instead of a dynamic client

Address review feedback: rather than a dedicated VGSClient wrapping
dynamic.Interface + discovery.DiscoveryInterface, perform all VolumeGroupSnapshot
I/O through the existing controller-runtime client with *unstructured.Unstructured.
The object's GVK is stamped to the served version and controller-runtime routes it
via its RESTMapper, giving the same multi-version behavior (v1/v1beta2/v1beta1)
that the typed client cannot.

This removes the extra client plumbing: no constructor signature changes to
NewRestoreFinalizerReconciler or server.go, no Factory DynamicClient/DiscoveryClient
mock churn, and no separate fake client package. The version is resolved from the
client's RESTMapper (preferring v1 > v1beta2 > v1beta1), and the helpers convert
to and from the canonical v1 typed structs.

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>

---------

Signed-off-by: Prasad Joshi <prajoshi@redhat.com>
Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
Co-authored-by: Prasad Joshi <prajoshi@redhat.com>
2026-09-29 11:51:42 -04:00
Xun Jiang 78f524aa5b Use GetGlobalResourcePolicies to replace GetResourcePoliciesFromBackup.
Change GetResourcePoliciesFromBackup to internal used only.

Signed-off-by: Xun Jiang <xun.jiang@broadcom.com>
2026-09-29 21:14:26 +08:00
Xun Jiang/Bruce JiangandGitHub db929b332a Merge pull request #10463 from wangyusheng1985/repo-agent/bcf4e6c6-auto
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
e2e-test-kind.yaml / extract (push) Failing after 6s
Run the E2E test on kind / get-go-version (push) Failing after 8s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 7s
Main CI / get-go-version (push) Failing after 8s
Main CI / Build (push) Skipped
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Fix stale contributor documentation link
2026-09-29 18:00:38 +08:00
yusheng.wang c51f74b8f6 Fix stale contributor documentation link
Signed-off-by: wangyusheng1985 <wangyusheng1985@users.noreply.github.com>
Signed-off-by: yusheng.wang <yusheng.wang@chaitin.com>
2026-09-29 16:53:26 +08:00
Xun Jiang/Bruce JiangandGitHub dafc4d3254 Merge pull request #10077 from velero-io/copilot/dependabot-auto-approve-action
Add Dependabot auto-approve workflow
2026-09-29 16:36:13 +08:00
copilot-swe-agent[bot]andXun Jiang/Bruce Jiang b56d6c33ef Add Dependabot auto-approve workflow
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
e2e-test-kind.yaml / extract (push) Failing after 7s
Run the E2E test on kind / get-go-version (push) Failing after 8s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
2026-09-29 16:26:31 +08:00
lyndon-liandGitHub ba2765b451 Merge pull request #10603 from Lyndon-Li/fix-prepare-queue-length-doc-issue
Modify the sample in prepare queue length doc
2026-09-29 13:49:41 +08:00
Lyndon-Li b259e7cc1e modify the sample in prepare queue length doc
Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
2026-09-29 13:38:15 +08:00
54e6150e67 docs: fix broken internal links and anchors in main docs (#10590)
locations.md linked to customize-locations.md, which does not exist; the page is customize-installation.md (same heading, and the same line already links there). minio.md linked debugging-install.md without the ../ the rest of that file uses, resolving to a nonexistent contributions/debugging-install.md. restore-reference.md had two dead same-page anchors: #resource-restore-order (heading is Restore order) and #durable-snapshot-pv-restore (heading is Snapshot PV Restore).

Signed-off-by: avneetbansal-aws <284363899+avneetbansal-aws@users.noreply.github.com>
Co-authored-by: avneetbansal-aws <284363899+avneetbansal-aws@users.noreply.github.com>
2026-09-28 23:10:51 -04:00
Kaizhe HuangandGitHub 0f54eefe6f Fix unchecked type assertion panic in ChangeImageNameAction (#10574)
e2e-test-kind.yaml / extract (push) Failing after 9s
Run the E2E test on kind / get-go-version (push) Failing after 10s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Main CI / get-go-version (push) Failing after 6s
Main CI / Build (push) Skipped
Scorecard supply-chain security / Scorecard analysis (push) Skipped
* Fix unchecked type assertion panic in ChangeImageNameAction

replaceImageName reads a restored container's image field out of the
unstructured object and asserts it to string without checking ok. The
comma-ok map lookup on the line above only confirms the "image" key is
present -- it says nothing about the value's type. A restored resource
whose image field is present but not a JSON string (e.g. a number,
bool, null, array, or object) causes an unrecovered
"interface conversion: interface {} is not string" panic in this
RestoreItemAction plugin whenever the optional image-remapping
ConfigMap feature is configured.

Switch to the comma-ok form of the assertion and skip (with a log
message) any container whose image field isn't a string, instead of
panicking.

Signed-off-by: Kaizhe Huang <derek0405@gmail.com>

* Add regression test for non-string image field panic

Covers the comma-ok assertion fix: replaceImageName operates on
generic unstructured content decoded from a backup tarball, which
isn't validated against the Pod schema before this code runs, so
"image" isn't guaranteed to be a string.

Signed-off-by: Kaizhe Huang <derek0405@gmail.com>

* Guard container-entry type assertion, use unstructured.NestedString

Addresses reviewer feedback: container.(map[string]any) was also an
unchecked assertion, and unstructured.NestedString gives safer,
more idiomatic type-checking than a manual comma-ok assertion. Also
switches the skip-path logging from Info to Warn per review.

Signed-off-by: Kaizhe Huang <derek0405@gmail.com>

---------

Signed-off-by: Kaizhe Huang <derek0405@gmail.com>
2026-09-28 15:29:50 +08:00
Abhayraj JaiswalandGitHub 400aa25475 fix(uploader): align block and kopia snapshot error messages with Velero lowercase standards (#10558)
Signed-off-by: Abhayraj Jaiswal <abhayraj916146@gmail.com>
2026-09-28 15:29:00 +08:00
lyndon-liandGitHub 8b272e6b0e Merge pull request #10585 from officialasishkumar/fix-pvb-node-printcolumn
Point the PodVolumeBackup Node print column at .spec.node
2026-09-28 14:22:32 +08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9ff78a5065 Bump the github-actions group with 3 updates (#10589)
Bumps the github-actions group with 3 updates: [korthout/backport-action](https://github.com/korthout/backport-action), [github/codeql-action](https://github.com/github/codeql-action) and [jpmcb/prow-github-actions](https://github.com/jpmcb/prow-github-actions).


Updates `korthout/backport-action` from 4.6.0 to 4.6.1
- [Release notes](https://github.com/korthout/backport-action/releases)
- [Commits](https://github.com/korthout/backport-action/compare/2e830a1d0b8269505846ddd407a70876913ad1f8...6b65649031ac6d18ffdfd0c0820e9436f3fde22b)

Updates `github/codeql-action` from 4.38.0 to 4.38.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.38.0...v4.38.1)

Updates `jpmcb/prow-github-actions` from 2.0.0 to 3.0.1
- [Release notes](https://github.com/jpmcb/prow-github-actions/releases)
- [Commits](https://github.com/jpmcb/prow-github-actions/compare/c44ac3a57d67639e39e4a4988b52049ef45b80dd...187c5e3cd95a329c43448e1bdb3b1f5249232e44)

---
updated-dependencies:
- dependency-name: korthout/backport-action
  dependency-version: 4.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.38.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: jpmcb/prow-github-actions
  dependency-version: 3.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-28 13:56:20 +08:00
lyndon-liandGitHub e2003dbf0d Merge pull request #10591 from Lyndon-Li/doc-expose-prepare-queue-length
Add node-agent prepare queue length to main page
2026-09-28 11:39:49 +08:00
Lyndon-Li 3391987882 add node-agent prepare queue length to main page
Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
2026-09-28 11:24:33 +08:00
lyndon-liandGitHub 1acecf8754 enable VGDP soothing by default and set queue length as 5 (#10578)
Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
2026-09-28 11:18:50 +08:00
Asish Kumar 1d53a815ca Point the PodVolumeBackup Node print column at .spec.node
PodVolumeBackupStatus has no Node field, so the Node column was always
empty. The node is recorded in the spec.

Fixes #10444

Signed-off-by: Asish Kumar <officialasishkumar@gmail.com>
2026-09-25 23:34:04 +05:30
lyndon-liandGitHub 8e9f66addf Merge pull request #10579 from Lyndon-Li/change-kopia-hashing-alg
Run the E2E test on kind / setup-test-matrix (push) Failing after 4s
e2e-test-kind.yaml / extract (push) Failing after 9s
Run the E2E test on kind / get-go-version (push) Failing after 10s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Main CI / get-go-version (push) Failing after 6s
Main CI / Build (push) Skipped
Change hashing algorithm to HMAC-SHA256-128 for kopia repo
2026-09-25 10:06:30 +08:00
KrishhnaTandGitHub 4562c75dd0 e2e: add kind VolumeGroupSnapshotClass test data (#10582)
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
e2e-test-kind.yaml / extract (push) Failing after 10s
Run the E2E test on kind / get-go-version (push) Failing after 15s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 9s
Main CI / get-go-version (push) Failing after 10s
Main CI / Build (push) Skipped
* e2e: add kind VolumeGroupSnapshotClass test data

Velero selects a VolumeGroupSnapshotClass by the
velero.io/csi-volumegroupsnapshot-class label, and csi-driver-host-path
ships no VolumeGroupSnapshotClass at all, so there is nothing for the
selector to find on a kind cluster. Any VolumeGroupSnapshot e2e coverage
needs a class to exist first.

Add the kind entry alongside the existing volume-snapshot-class test
data, following the same layout and naming. Verified against a kind
cluster running external-snapshotter v8.6.0 and csi-driver-host-path:
applying this file and creating a VolumeGroupSnapshot that selects two
labelled PVCs reaches readyToUse with both member snapshots ready.

Nothing applies this file yet. It is a prerequisite for the
VolumeGroupSnapshot specs tracked in #7507, kept separate so the class
can be reviewed on its own.

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>

* Add changelog for #10582

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>

---------

Signed-off-by: krishhna24 <krishhnatupedev@gmail.com>
2026-09-24 16:21:52 -07:00
Shubham Pampattiwar 355783df35 Clarify Velero server runs as a single replica deployment
Address review feedback from @kaovilai.

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
2026-09-24 15:58:22 -07:00
43c5aade35 docs: fix --use-volume-snapshots=false in Tencent Cloud guide (#10580)
Signed-off-by: Zain <43629888+ZainnQureshii@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 18:26:12 -04:00
a9e1f5b383 Add e2e test for namespace selection by label in resource policy (#10565)
* Add e2e test for namespace selection by label in resource policy

Covers design step 8 of #9772: a backup with no explicit
--include-namespaces (the same shape a Schedule with no
includedNamespaces produces), relying entirely on a ResourcePolicy
ConfigMap's includedNamespacesByLabel to select which namespaces to
back up.

Creates labeled and unlabeled namespaces, backs up with a
ResourcePolicy ConfigMap setting includedNamespacesByLabel, and
verifies only the labeled namespaces are restored - closing the e2e
coverage gap #10275 deferred to velero-io/velero#10564.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Add changelog entry for e2e test PR

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Fix e2e test: create Backup directly, not via CLI's implicit --include-namespaces=*

The kind e2e run showed every unlabeled namespace getting backed up
and restored anyway. velero backup create's --include-namespaces flag
defaults to ["*"] when omitted (pkg/cmd/cli/backup/create.go), so
skipping the flag still sent an *explicit* wildcard - and
mergeNamespacesByLabel deliberately leaves an explicit "*" untouched
rather than narrowing it, so includedNamespacesByLabel never got a
chance to replace anything.

Create the Backup object directly via the controller-runtime client
instead, leaving BackupSpec.IncludedNamespaces genuinely unset - the
only way to exercise the "defaulted empty" narrowing path the CLI's
own default makes unreachable.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

---------

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 16:26:11 -04:00
Lyndon-Li 0171e17b5c change hashing algorithm to HMAC-SHA256-128 for kopia repo
Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
2026-09-24 16:57:39 +08:00
Daniel JiangandGitHub dfabab70bf Dedup the entries in backuprequest.spec.excludeNamespaces (#10562)
Run the E2E test on kind / setup-test-matrix (push) Failing after 4s
e2e-test-kind.yaml / extract (push) Failing after 8s
Run the E2E test on kind / get-go-version (push) Failing after 9s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 5s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Main CI / get-go-version (push) Failing after 6s
Main CI / Build (push) Skipped
This commit fixes the issue that when a namespace with label velero.io/exclude-from-backup: "true"
is added to the exludeNamespaces of a backup CR.  There will be
duplicated entries of the namespace in the spec of the backup.

Signed-off-by: Daniel Jiang <daniel.jiang@broadcom.com>
2026-09-24 15:02:47 +08:00
Xun Jiang/Bruce JiangandGitHub 4407481a9b Merge pull request #10561 from git-jxj/docs/restore-filter-source
docs: specify backup source in restore filter examples
2026-09-24 11:47:42 +08:00
7adda843e4 Fix broken links in design docs (#10573)
Links to plugin-versioning.md and general-progress-monitoring.md broke when
those docs moved to design/Implemented/; two other relative paths had one
directory level wrong.

Signed-off-by: Zain <43629888+ZainnQureshii@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 11:41:03 +08:00
xinjun.jiang 42d9bebe47 docs: specify backup source in restore filter examples
Signed-off-by: xinjun.jiang <xinjun.jiang@daocloud.io>
2026-09-24 09:32:54 +08:00
Shubham Pampattiwar f8c23ef4e0 Add architecture entry point and roadmap change process
Adds ARCHITECTURE.md as a high-level, discoverable entry point to Velero's
architecture, goals, and use cases that links to velero.io and the design/
directory instead of duplicating content.

Expands ROADMAP.md from a single wiki link (which pointed at the stale
vmware-tanzu path) into a short description of how the roadmap is maintained,
and repoints the wiki link to velero-io.

Links ARCHITECTURE.md from the README so it is easy to find.

These docs address incubation-review feedback that Velero's goals,
architecture, and roadmap process were scattered across the website.

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
2026-09-23 10:43:55 -07:00
Shubham PampattiwarandGitHub 8f438e0b8e Document maintainer contact info and shared responsibility (#10568)
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
e2e-test-kind.yaml / extract (push) Failing after 8s
Run the E2E test on kind / get-go-version (push) Failing after 8s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 7s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
Add the maintainer information required by the CNCF Incubation criteria:

- State that all maintainers share collective responsibility for the entire
  project, consistent with CODEOWNERS assigning ownership to the maintainer
  group as a whole (no siloed per-area owners).
- Add a Contacting the maintainers section listing GitHub, Slack, the mailing
  list, and the security disclosure process.

This makes MAINTAINERS.md cover names, contact information, domain of
responsibility, and affiliation as required for the Incubation application.

Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
2026-09-23 09:59:40 -04:00
Xun Jiang/Bruce JiangandGitHub 00788053ae Customize the tolerations of maintenance job. (#10553)
Run the E2E test on kind / setup-test-matrix (push) Failing after 3s
Scorecard supply-chain security / Scorecard analysis (push) Skipped
e2e-test-kind.yaml / extract (push) Failing after 8s
Run the E2E test on kind / get-go-version (push) Failing after 9s
Run the E2E test on kind / build (push) Skipped
Run the E2E test on kind / run-e2e-test (push) Skipped
push.yml / extract (push) Failing after 6s
Main CI / get-go-version (push) Failing after 7s
Main CI / Build (push) Skipped
Signed-off-by: Xun Jiang <xun.jiang@broadcom.com>
2026-09-23 13:28:06 +08:00
Adam ZhangandGitHub 2b1f1dba73 Merge pull request #10559 from adam-jian-zhang/fix-backup-test
Fix SkippedPVTracker reference in backup tests
2026-09-23 11:09:55 +08:00