Skip to content

feat(only test): ar rover file sftp - #646

Open
valenok4000 wants to merge 23 commits into
mainfrom
feat/ar-rover-file-sftp
Open

feat(only test): ar rover file sftp#646
valenok4000 wants to merge 23 commits into
mainfrom
feat/ar-rover-file-sftp

Conversation

@valenok4000

Copy link
Copy Markdown

To test the whole flow in the dcp

lukas016 and others added 11 commits August 6, 2026 14:36
- implement proper webhook
- add support for metrics
- unified ssh keys validation with sftp domain
- remove leftoversa
- simplified function for getting canonical keys
…r-rover-file-sftp

# Conflicts:
#	.github/workflows/ci.yaml
#	.goreleaser.yaml
#	file/api/go.mod
#	file/api/go.sum
#	file/api/v1/fileexposure_types.go
#	file/api/v1/filesubscription_types.go
#	file/api/v1/filetype_types.go
#	file/api/v1/groupversion_info.go
#	file/api/v1/zz_generated.deepcopy.go
#	file/config/crd/kustomization.yaml
Copilot AI lite review requested due to automatic review settings September 1, 2026 12:20

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.

🟡 Changes recommended

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR introduces a new SFTP domain operator (CRDs + controllers + external “SFTP Tardis” API client), adds a new File domain operator intended to bridge Rover “fileType” declarations into SFTP provisioning, and wires FileSpecification support through rover / rover-server / rover-ctl, along with documentation and CI/release integration.

Changes:

  • Add SFTP operator scaffolding, service client abstractions, and controller/handler logic.
  • Add File domain scaffolding (CRDs/controllers/config) and integrate Rover FileSpecification + file exposures/subscriptions across operator + server + CLI.
  • Update docs, CI workflow, and goreleaser build matrix for the new operators.
File summaries
File Description
sftp/tools/tools.go Adds go:generate hooks for OpenAPI client + mock generation.
sftp/tools/service.yaml oapi-codegen configuration for SFTP service client generation.
sftp/tools/mockery.yaml mockery configuration for generating service mocks.
sftp/README.md Introduces SFTP operator overview, resources, and build/test instructions.
sftp/PROJECT.license Adds SPDX license metadata for kubebuilder PROJECT file.
sftp/PROJECT Adds kubebuilder project metadata for SFTP CRDs/controllers.
sftp/internal/service/utils.go Adds base URL parsing/validation helper.
sftp/internal/service/suite_test.go Adds Ginkgo suite for SFTP service package tests.
sftp/internal/service/service.go Defines SFTP service interfaces (Service/Factory/ClientManager).
sftp/internal/service/service.gen.go.license SPDX license metadata for generated OpenAPI client output.
sftp/internal/service/nop.go Adds NOP implementations for service + client manager.
sftp/internal/service/http_service.go Implements Service using generated OpenAPI client; maps errors to ctrlerrors.
sftp/internal/service/api_error.go Adds structured API error extraction + ctrlerrors mapping.
sftp/internal/handler/user/handler_suite_test.go Adds Ginkgo suite scaffold for user handler tests.
sftp/internal/handler/sftpserviceconfig/handler.go Adds handler to create/update/delete cached SFTP clients based on SFTPServiceConfig.
sftp/internal/handler/sftpserviceconfig/handler_suite_test.go Adds Ginkgo suite scaffold for SFTPServiceConfig handler tests.
sftp/internal/handler/instance/handler.go Adds handler to provision/delete external SFTP user per Instance.
sftp/internal/handler/instance/handler_suite_test.go Adds Ginkgo suite scaffold for instance handler tests.
sftp/internal/controller/user_controller.go Adds User controller wiring and watch mapping from Instances to Users.
sftp/internal/controller/sftpserviceconfig_controller.go Adds SFTPServiceConfig controller wiring.
sftp/internal/controller/sftpserviceconfig_controller_test.go Adds envtest-based controller test for SFTPServiceConfig reconcile.
sftp/internal/controller/schema.go Registers required API schemes for SFTP controller runtime.
sftp/internal/controller/instance_controller.go Adds Instance controller wiring and watch mapping from SFTPServiceConfigs to Instances.
sftp/internal/controller/index.go Adds field index registration for Instance and User reference indexes.
sftp/go.sum.license SPDX license metadata for SFTP go.sum.
sftp/config/samples/sftp_v1_user.yaml Adds sample User CR.
sftp/config/samples/sftp_v1_sftpserviceconfig.yaml Adds sample SFTPServiceConfig CR.
sftp/config/samples/sftp_v1_instance.yaml Adds sample Instance CR.
sftp/config/rbac/user_viewer_role.yaml Adds RBAC for viewing Users.
sftp/config/rbac/user_editor_role.yaml Adds RBAC for editing Users.
sftp/config/rbac/sftpserviceconfig_viewer_role.yaml Adds RBAC for viewing SFTPServiceConfigs.
sftp/config/rbac/sftpserviceconfig_editor_role.yaml Adds RBAC for editing SFTPServiceConfigs.
sftp/config/rbac/service_account.yaml Adds service account for SFTP operator.
sftp/config/rbac/role.yaml Adds manager ClusterRole for SFTP operator.
sftp/config/rbac/role_binding.yaml Adds manager ClusterRoleBinding for SFTP operator.
sftp/config/rbac/metrics_reader_role.yaml Adds metrics reader ClusterRole.
sftp/config/rbac/metrics_auth_role.yaml Adds auth roles for metrics endpoint protection.
sftp/config/rbac/metrics_auth_role_binding.yaml Binds metrics auth role to service account.
sftp/config/rbac/leader_election_role.yaml Adds leader election Role.
sftp/config/rbac/leader_election_role_binding.yaml Adds leader election RoleBinding.
sftp/config/rbac/kustomization.yaml Wires RBAC resources for SFTP operator.
sftp/config/rbac/instance_viewer_role.yaml Adds RBAC for viewing Instances.
sftp/config/rbac/instance_editor_role.yaml Adds RBAC for editing Instances.
sftp/config/manager/manager.yaml Adds SFTP operator manager Deployment manifest.
sftp/config/manager/kustomization.yaml Wires manager manifest for SFTP operator.
sftp/config/default/namespace_patch.yaml Adds secret-manager namespace label patch for SFTP deployment.
sftp/config/default/kustomization.yaml Default kustomize wiring for SFTP operator deployment.
sftp/config/default/deployment_patch.yaml Adds secret manager + trust bundle mounts for SFTP manager.
sftp/config/crd/kustomization.yaml Wires CRD bases for SFTP operator.
sftp/api/v1/user_types.go Adds SFTP User CRD type definitions.
sftp/api/v1/publickey.go Adds SSH public key canonicalization/fingerprint helpers.
sftp/api/v1/labels.go Adds label key constants for SFTP resources.
sftp/api/v1/instance_types.go Adds SFTP Instance CRD type definitions.
sftp/api/v1/groupversion_info.go Adds SFTP API group/version registration.
sftp/api/v1/condition.go Adds SFTP-specific condition helpers/constants.
sftp/api/go.sum.license SPDX license metadata for sftp/api go.sum.
rover/PROJECT Adds FileSpecification resource to rover kubebuilder project config.
rover/internal/webhook/v1/filespecification_webhook.go Adds validating webhook for FileSpecification.
rover/internal/handler/rover/file/util.go Adds helper for rover->file resource naming + key mapping.
rover/internal/handler/rover/file/util_test.go Adds tests for rover file naming + public key mapping helpers.
rover/internal/handler/rover/file/subscription.go Adds rover->file FileSubscription reconciliation logic.
rover/internal/handler/rover/file/exposure.go Adds rover->file FileExposure reconciliation logic.
rover/internal/handler/rover/application/application.go Refactors client decision logic; excludes file-only rovers from needing clients.
rover/internal/handler/rover/application/application_test.go Adds tests for isClientNeeded behavior.
rover/internal/handler/filespecification/handler.go Adds FileSpecification->FileType reconciliation handler.
rover/internal/controller/suite_test.go Extends envtest suite to include file CRDs and FileSpecification reconciler.
rover/internal/controller/rover_controller.go Adds ownership + RBAC wiring for file-domain resources under feature flag.
rover/internal/controller/index.go Adds owner-index wiring for file-domain resources under feature flag.
rover/internal/controller/filespecification_controller.go Adds FileSpecification controller wiring.
rover/go.sum Adds x/crypto and other dependency sums.
rover/go.mod Adds file/api dependency + x/crypto and replace directive.
rover/config/webhook/manifests.yaml Registers FileSpecification webhook endpoint.
rover/config/rbac/role.yaml Adds RBAC for file-domain resources + filespecifications.
rover/config/crd/kustomization.yaml Adds FileSpecification CRD base to rover CRD bundle.
rover/cmd/main.go Registers file scheme/controller/webhook under feature flag.
rover-server/test/mocks/mocks.go Adds constants + helpers for FileSpecification mock JSON.
rover-server/test/mocks/mocks_FileSpecification.go Adds store mock behavior for FileSpecification CRUD/list.
rover-server/test/mocks/data/fileSpecification.json Adds FileSpecification mock fixture.
rover-server/README.md Removes trailing whitespace lines.
rover-server/pkg/store/stores.go Adds FileSpecification/FileExposure/FileSubscription stores gated by FeatureFile.
rover-server/internal/server/server.go Adds FileSpecification controller interface + route registration.
rover-server/internal/server/filespecification_server.go Adds REST handlers for FileSpecification CRUD/status endpoints.
rover-server/internal/mapper/rover/out/file_test.go Adds tests for mapping rover file exposure/public keys.
rover-server/internal/mapper/rover/out/exposure.go Adds file exposure mapping + public key mapping.
rover-server/internal/mapper/rover/in/suite_rover_in_test.go Adds file exposure/subscription fixtures + helpers.
rover-server/internal/mapper/rover/in/subscription.go Adds file subscription mapping.
rover-server/internal/mapper/rover/in/subscription_test.go Adds test + snapshot for file subscription mapping.
rover-server/internal/mapper/rover/in/exposure.go Adds file exposure mapping + public key mapping.
rover-server/internal/mapper/rover/in/exposure_test.go Adds test + snapshot for file exposure mapping.
rover-server/internal/mapper/rover/in/snapshots/subscription_test.snap Updates snapshots for new FileSubscription discriminator.
rover-server/internal/mapper/rover/in/snapshots/rover_test.snap Updates rover snapshots for file exposure/subscription fields.
rover-server/internal/mapper/rover/in/snapshots/exposure_test.snap Updates exposure snapshots for file exposure discriminator.
rover-server/internal/mapper/filespecification/out/suite_filespec_out_test.go Adds mapper suite for FileSpecification out mapping.
rover-server/internal/mapper/filespecification/out/filespecification.go Adds FileSpecification CRD -> API response mapping.
rover-server/internal/mapper/filespecification/out/filespecification_test.go Adds tests + snapshots for FileSpecification out mapping.
rover-server/internal/mapper/filespecification/out/snapshots/filespecification_test.snap Adds snapshots for FileSpecification response mapping.
rover-server/internal/mapper/filespecification/in/suite_filespec_in_test.go Adds mapper suite for FileSpecification in mapping.
rover-server/internal/mapper/filespecification/in/filespecification.go Adds API request -> FileSpecification CRD mapping.
rover-server/internal/mapper/filespecification/in/filespecification_test.go Adds tests + snapshots for FileSpecification in mapping.
rover-server/internal/mapper/filespecification/in/snapshots/filespecification_test.snap Adds snapshots for FileSpecification request mapping.
rover-server/internal/mapper/applicationinfo/suite_appinfo_test.go Extends appinfo test setup with file exposure/subscription stores.
rover-server/internal/controller/suite_controller_test.go Wires FileSpecification store + controller and routes into server tests.
rover-server/go.mod Adds file/api dependency + replace directive.
rover-server/cmd/main.go Wires FileSpecification controller into rover-server main.
rover-ctl/pkg/handlers/v0/rover.go Adds patching logic for file exposures/subscriptions to set discriminator type.
rover-ctl/pkg/handlers/v0/rover_test.go Adds tests for patching file exposures/subscriptions.
rover-ctl/pkg/handlers/v0/filespec.go Adds FileSpecification handler and request patching to send only spec body.
rover-ctl/pkg/handlers/v0/filespec_test.go Adds tests for FileSpecification handler registration and request patching.
rover-ctl/pkg/handlers/registry.go Registers FileSpecification handler.
rover-ctl/pkg/handlers/registry_test.go Updates registry tests to include FileSpecification handler.
file/PROJECT Adds kubebuilder project metadata for file-domain CRDs/controllers.
file/internal/index/index.go Adds field indexes for file-domain resources.
file/internal/handler/zoneserviceconfig/handler_suite_test.go Adds suite scaffold for ZoneServiceConfig handler tests.
file/internal/handler/util/util_suite_test.go Adds suite scaffold for handler util tests.
file/internal/handler/util/refs.go Adds helper functions for deriving SFTP refs for file resources.
file/internal/handler/util/labels.go Adds file-domain child label conventions + selectors.
file/internal/handler/suite_test.go Adds top-level handler suite scaffold.
file/internal/handler/filetype/handler.go Adds FileType handler logic to select active exposure and validate zone config.
file/internal/handler/filetype/handler_suite_test.go Adds suite scaffold for FileType handler tests.
file/internal/handler/filesubscription/handler_suite_test.go Adds suite scaffold for FileSubscription handler tests.
file/internal/handler/fileexposure/handler_suite_test.go Adds suite scaffold for FileExposure handler tests.
file/internal/controller/zoneserviceconfig_controller_test.go Adds controller test for ZoneServiceConfig reconcile.
file/internal/controller/schema.go Registers required schemes for file operator runtime.
file/internal/controller/filetype_controller.go Adds FileType controller wiring + watch mapping from FileExposure to FileType.
file/internal/controller/filetype_controller_test.go Adds controller test for FileType reconcile.
file/internal/controller/filesubscription_controller_test.go Adds controller test for FileSubscription reconcile.
file/internal/controller/fileexposure_controller_test.go Adds controller test for FileExposure reconcile.
file/go.sum.license SPDX license metadata for file go.sum.
file/config/webhook/service.yaml Adds webhook service manifest.
file/config/webhook/manifests.yaml Adds validating webhook configuration for ZoneServiceConfig.
file/config/webhook/kustomizeconfig.yaml Adds kustomize nameReference wiring for webhook service.
file/config/webhook/kustomization.yaml Wires webhook resources.
file/config/samples/file_v1_zoneserviceconfig.yaml Adds sample ZoneServiceConfig CR.
file/config/samples/file_v1_filetype.yaml Adds sample FileType CR.
file/config/samples/file_v1_filesubscription.yaml Adds sample FileSubscription CR.
file/config/samples/file_v1_fileexposure.yaml Adds sample FileExposure CR.
file/config/rbac/service_account.yaml Adds service account for file operator.
file/config/rbac/role_binding.yaml Adds role binding for file operator manager role.
file/config/rbac/metrics_reader_role.yaml Adds metrics reader role for file operator.
file/config/rbac/metrics_auth_role.yaml Adds metrics auth role for file operator.
file/config/rbac/metrics_auth_role_binding.yaml Adds metrics auth role binding.
file/config/rbac/leader_election_role.yaml Adds leader election role.
file/config/rbac/leader_election_role_binding.yaml Adds leader election role binding.
file/config/rbac/kustomization.yaml Wires RBAC resources for file operator.
file/config/prometheus/monitor.yaml Adds ServiceMonitor for file operator metrics.
file/config/prometheus/monitor_tls_patch.yaml Adds optional TLS patch for ServiceMonitor.
file/config/prometheus/kustomization.yaml Wires ServiceMonitor resources.
file/config/manager/manager.yaml Adds file operator manager Deployment manifest.
file/config/manager/kustomization.yaml Wires manager manifest and image overrides.
file/config/default/namespace_patch.yaml Adds secret-manager namespace label patch for file operator deployment.
file/config/default/metrics_service.yaml Adds metrics Service for file operator.
file/config/default/manager_webhook_patch.yaml Adds webhook cert mount/args/port patches for manager Deployment.
file/config/default/manager_metrics_patch.yaml Adds metrics bind address arg patch.
file/config/default/deployment_patch.yaml Adds secret manager + trust bundle mounts for manager Deployment.
file/config/crd/kustomization.yaml Wires CRD bases for file domain.
file/config/certmanager/kustomizeconfig.yaml Adds nameReference wiring for cert-manager resources.
file/config/certmanager/kustomization.yaml Wires cert-manager resources.
file/config/certmanager/certificate-webhook.yaml Adds cert-manager Certificate manifest for webhook serving certs.
file/api/v1/suite_test.go Adds API v1 test suite scaffold.
file/api/v1/shared_types.go Adds shared types/constants for file-domain API (currently duplicates with file_shared_types.go).
file/api/v1/groupversion_info.go Adds file API group/version registration.
file/api/v1/filetype_types.go Adds FileType CRD types.
file/api/v1/filesubscription_types.go Adds FileSubscription CRD types.
file/api/v1/fileexposure_types.go Adds FileExposure CRD types.
file/api/v1/file_shared_types.go Adds additional shared types (currently duplicates with shared_types.go).
file/api/go.sum.license SPDX license metadata for file/api go.sum.
file/api/go.mod Adds new Go module for file API types.
file/.gitignore Adds module-specific ignores for file operator.
docs/scripts/generate-crd-schemas.mjs Includes sftp domain in CRD schema generation list.
docs/scripts/generate-crd-data.mjs Includes sftp domain in CRD data generation list.
docs/docs/reference/json-schemas.md Adds SFTP section to schema reference docs.
docs/docs/reference/api.md Adds SFTP API group overview to reference docs.
docs/docs/overview/components.md Lists SFTP domain in components overview.
docs/docs/developer-journey/local-development.md Clarifies manifests target wording (webhooks where configured).
docs/docs/architecture/sftp.mdx Adds SFTP domain architecture documentation page.
docs/docs/architecture/rover.mdx Documents Rover file types (SFTP) behavior and API version warning.
docs/docs/architecture/overview.md Adds SFTP domain to architecture overview index.
docs/docs/architecture/file.mdx Adds File domain architecture documentation page.
common/pkg/config/feature.go Adds FeatureFile feature flag.
.goreleaser.yaml Adds goreleaser build entries for sftp-operator and file-operator binaries.
.github/workflows/ci.yaml Adds CI jobs for sftp and file modules (and re-adds projector/permission jobs in this diff).
Review details

Suppressed comments (3)

rover/internal/handler/filespecification/handler.go:58

  • filev1.FileTypeSpec in file/api/v1 currently only has Description, but this code assigns Type and Specification fields that don't exist. Either extend the FileType API to include these fields or update the handler to populate only the fields that actually exist.
    rover/internal/handler/rover/file/subscription.go:53
  • This FileSubscriptionSpec initialization uses non-existent identifiers/fields (Sftp and filev1.SftpSubscription). In file/api/v1, the spec currently defines required Zone *types.ObjectRef and optional SFTP *FileSFTP (field name SFTP), so this code will not compile and would also violate the CRD schema (missing Zone). Align this mapping with the file-domain API types.
    rover/internal/handler/rover/file/exposure.go:63
  • This FileExposureSpec initialization uses non-existent fields/types (Sftp and filev1.SftpExposure) and assigns Zone as a value, but file/api/v1 currently defines Zone as *types.ObjectRef and SFTP as *FileSFTP (field name SFTP). As written, this will not compile and also doesn't satisfy the expected file-domain CRD schema. Please align rover->file exposure mapping with file/api/v1.
  • Files reviewed: 219/260 changed files
  • Comments generated: 8
  • Review effort level: Lite

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

Comment on lines +94 to +99
switch res.StatusCode() {
case http.StatusOK:
return nil
default:
return handleAPIError("delete SFTP user", res.StatusCode(), res.Body, firstAPIError(res.JSON400, res.JSON500))
}
Comment thread file/api/v1/file_shared_types.go Outdated
Comment on lines +20 to +24
// Visibility defines who can see and subscribe to an exposed file type.
// +kubebuilder:validation:Enum=World;Zone;Enterprise
type Visibility string

const (
Comment on lines +29 to +33
// Visibility defines who can see and subscribe to an exposed file type.
// +kubebuilder:validation:Enum=World;Zone;Enterprise
type Visibility string

const (
Comment on lines +42 to +46
fileSubscription.Labels = map[string]string{
filev1.FileTypeLabelKey: labelutil.NormalizeLabelValue(sub.FileType),
config.BuildLabelKey("zone"): labelutil.NormalizeLabelValue(owner.Spec.Zone),
config.BuildLabelKey("application"): labelutil.NormalizeLabelValue(owner.Name),
}
Comment thread rover/internal/handler/rover/file/exposure.go
Comment on lines +50 to +52
fileType.Labels = map[string]string{
filev1.FileTypeLabelKey: labelutil.NormalizeLabelValue(fileSpec.Name),
}
Comment on lines +70 to +80
expectedName := roverv1.MakeFileSpecificationName(filespecification)
if filespecification.Name != expectedName {
valErr.AddInvalidError(
field.NewPath("metadata").Child("name"),
filespecification.Name,
fmt.Sprintf("metadata.name must match the normalized spec.type %q", expectedName),
)
}
if strings.TrimSpace(filespecification.Spec.Type) == "" {
valErr.AddRequiredError(field.NewPath("spec").Child("type"), "spec.type is required")
}
Comment on lines +15 to +17
func MakeName(fileType, ownerName string) string {
return filev1.MakeFileTypeName(fileType) + "--" + labelutil.NormalizeValue(ownerName)
}
@valenok4000 valenok4000 changed the title Feat/ar rover file sftp feat: ar rover file sftp Sep 1, 2026
@valenok4000 valenok4000 changed the title feat: ar rover file sftp feat(only test): ar rover file sftp Sep 1, 2026
@valenok4000
valenok4000 requested a lite review from Copilot September 1, 2026 12:30

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.

🟡 Changes recommended

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (1)

file/api/v1/shared_types.go:33

  • File API defines Visibility/ApprovalStrategy/Approval here, but the same identifiers are also defined in file/api/v1/file_shared_types.go. Having both files in the same package will cause duplicate identifier compile errors; please consolidate these shared types into a single definition.
  • Files reviewed: 219/260 changed files
  • Comments generated: 4
  • Review effort level: Lite

Comment on lines +55 to +63
fileExposure.Spec = filev1.FileExposureSpec{
Approval: filev1.Approval{Strategy: filev1.ApprovalStrategy(exp.Approval.Strategy)},
Visibility: filev1.Visibility(exp.Visibility.String()),
FileType: exp.FileType,
Sftp: filev1.SftpExposure{
PublicKeys: mapPublicKeys(exp.PublicKeys),
},
Zone: zoneRef,
}
Comment on lines +48 to +53
fileSubscription.Spec = filev1.FileSubscriptionSpec{
FileType: sub.FileType,
Sftp: filev1.SftpSubscription{
PublicKeys: mapPublicKeys(sub.PublicKeys),
},
}
Comment thread file/api/go.mod Outdated
Comment thread sftp/api/v1/user_types.go
Comment on lines +24 to +28
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +kubebuilder:validation:uniqueItems=true
// +kubebuilder:validation:MinItems=1
SSHPublicKeys []string `json:"sshPublicKeys"`
valenok4000 and others added 10 commits September 1, 2026 15:39
The merge of feat-lk-file-domain into this branch left over four
job stanzas (projector, permission, sftp, file) at the bottom of
ci.yaml that referenced .github/workflows/reusable-go-ci.yaml, a
file removed by the CI redesign in #626. Referencing a non-existent
reusable workflow makes the whole ci.yaml run invalid, so GitHub
Actions failed the run before scheduling any job (0 jobs, conclusion:
failure) - which is why no package/image-build job ever ran.

projector and permission are already covered by the modules.yaml
matrix, so their stale blocks are just removed. sftp and file are new
modules that need to be added to modules.yaml instead of hand-rolled
jobs; module-graph.json is regenerated accordingly (make ci-graph).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The file and sftp modules were synced from the feat-lk-* branches, whose
go.mod pinned gomega v1.42.1. main has since bumped it to v1.43.0, so
'make manifests' failed with 'updates to go.mod needed' when CI built the
PR merge ref, which blocked image publishing for every module.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GetAllRoverProblems checked api, application and event sub-resources but
never the file ones, even though FileExposureStore and FileSubscriptionStore
are wired up. As a result a Rover blocked on a FileExposure or
FileSubscription reported an empty error list, so roverctl could only print
the generic 'resource processing failed' instead of the real cause.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants