Skip to content

feat(gcp): add Cloud Scheduler adapter to Cloud Explorer - #185

Merged
fredpena merged 4 commits into
floci-io:mainfrom
snowyukitty:feat/gcp-cloud-scheduler
Sep 3, 2026
Merged

fredpena merged 4 commits into
floci-io:mainfrom
snowyukitty:feat/gcp-cloud-scheduler

Conversation

@snowyukitty

@snowyukitty snowyukitty commented Aug 18, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds Google Cloud Scheduler to the Cloud Explorer for GCP, providing job listing, inspection, creation, deletion, search filtering, and pagination against the Floci-GCP runtime emulator.

Closes #103

Backend (packages/api)

  • Added packages/api/src/cloud-spi/schedulerSchema.ts with schema definition, field validations, and table column descriptors for Cloud Scheduler.
  • Implemented packages/api/src/adapter-gcp/GcpSchedulerAdapter.ts covering list, get, create, and delete against /v1/projects/{project}/locations/{location}/jobs with nextPageToken pagination and search filtering.
  • Registered GcpSchedulerAdapter in cloudProxy.ts and added scheduler to serviceCatalog.ts under the Integration group with 'scheduler-job' resource typing.
  • Added comprehensive unit tests in packages/api/src/adapter-gcp/GcpSchedulerAdapter.test.ts.

Frontend (packages/frontend)

  • Added scheduler to KnownCloudServiceType in packages/frontend/src/types/cloud.ts.
  • Added scheduler icon mapping in packages/frontend/src/components/serviceIcons.ts.

Test Plan

  • Run unit test suite: pnpm test (all 493 tests pass).
  • Run TypeScript type checks: pnpm type-check (passes cleanly).
  • Run production build: pnpm run build (vite build succeeds).
  • Run linter: pnpm run lint (clean, 0 warnings).

@greptile-apps

greptile-apps Bot commented Aug 18, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR adds GCP Cloud Scheduler support to Cloud Explorer, including schema-driven CRUD operations, pagination, search, service registration, and shared frontend resource typing.

  • Registers Cloud Scheduler in the service catalog and GCP adapter registry.
  • Adds normalized scheduler job listing, inspection, creation, and deletion.
  • Updates the generated README service matrix and mirrors the scheduler resource type in the frontend.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
packages/api/src/adapter-gcp/GcpSchedulerAdapter.ts Implements Cloud Scheduler CRUD, pagination, search, validation, and normalized resource mapping without an eligible follow-up defect.
packages/api/src/cloud-spi/schedulerSchema.ts Defines schema-driven scheduler fields, actions, filters, and metadata-backed columns aligned with the adapter.
packages/api/src/cloud-spi/serviceCatalog.ts Registers Cloud Scheduler navigation metadata, with the corresponding generated README matrix now synchronized.
packages/api/src/cloudProxy.ts Registers the GCP scheduler adapter in the generic cloud-proxy dispatch path.
packages/frontend/src/types/resource.ts Mirrors scheduler-job in the frontend resource union while preserving the existing dynamodb-table member.
README.md Updates the generated service matrix consistently with the current catalog and registry.

Sequence Diagram

sequenceDiagram
  participant UI as Cloud Explorer
  participant API as Cloud Proxy
  participant Adapter as GcpSchedulerAdapter
  participant Runtime as Floci-GCP
  UI->>API: Scheduler resource operation
  API->>Adapter: Dispatch by gcp/scheduler
  Adapter->>Runtime: Cloud Scheduler v1 request
  Runtime-->>Adapter: Job or paginated job list
  Adapter-->>API: Normalized CloudResource
  API-->>UI: Scheduler job response
Loading

Reviews (3): Last reviewed commit: "chore(gcp): merge main into Cloud Schedu..." | Re-trigger Greptile

Comment thread packages/api/src/cloud-spi/types.ts Resolved

@hectorvent hectorvent left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you for this, and welcome! I ran it against a live runtime: creating a job returned a proper scheduler job with its cron expression, time zone and target URI, a missing name came back as a typed 400 rather than a 500, and a missing job gave a clean 404. The table you built is more useful than the minimum, showing the schedule and target rather than just a name.

Greptile has two open threads and I checked both. They are right:

(blocking) The README service matrix needs regenerating, since adding a catalog row changes the navigation: cd packages/api && bun run scripts/service-matrix.ts.

(blocking) The backend emits scheduler-job, but the frontend keeps its own copy of that union in packages/frontend/src/types/resource.ts and it does not list it yet. Adding it there keeps the two in step, which is what the other adapters do.

Also, this now conflicts with main because four PRs landed today. That one is on us, and a rebase is all it needs.

@hectorvent hectorvent left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you for turning that around so quickly. I rebuilt the stack at 9e2a4a7: the README row matches what service-matrix.ts generates, scheduler-job is in the frontend union, and creating a job through the console still comes back ENABLED with its schedule, time zone and target, and renders in the table. Both threads are resolved and the rebase is clean against today's main.

I have released the workflow runs on this push, and all of the checks came back green. No blockers from my side.

@fredpena
fredpena merged commit eb3214f into floci-io:main Sep 3, 2026
6 checks passed
@hectorvent

Copy link
Copy Markdown
Member

🎉 This PR is included in version 0.5.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

thomhurst pushed a commit to thomhurst/floci-ui that referenced this pull request Sep 16, 2026
# [0.5.0](floci-io/floci-ui@0.4.0...0.5.0) (2026-09-15)

### Bug Fixes

* **ci:** allow floci-ui to run on older cpus ([floci-io#189](floci-io#189)) ([1ee7b51](floci-io@1ee7b51)), closes [floci-io#188](floci-io#188)
* **frontend:** align dynamic form fields to top ([floci-io#202](floci-io#202)) ([9031bb6](floci-io@9031bb6))
* **frontend:** derive create-button label from schema capability ([floci-io#165](floci-io#165)) ([ffaddf0](floci-io@ffaddf0)), closes [floci-io#163](floci-io#163)
* **s3:** include bucket tags in storage resource metadata ([floci-io#203](floci-io#203)) ([234a933](floci-io@234a933))

### Features

* **cloud-spi:** add vendor-neutral child collections with AWS CloudWatch Logs ([floci-io#170](floci-io#170)) ([0de1513](floci-io@0de1513)), closes [floci-io#160](floci-io#160) [floci-io#162](floci-io#162)
* **containers:** add a containers category with GCP Cloud Run ([floci-io#160](floci-io#160)) ([95f0cc2](floci-io@95f0cc2)), closes [floci-io#156](floci-io#156) [floci-io#157](floci-io#157) [floci-io#158](floci-io#158) [floci-io#159](floci-io#159)
* **gcp:** add Cloud Scheduler adapter to Cloud Explorer ([floci-io#185](floci-io#185)) ([eb3214f](floci-io@eb3214f)), closes [floci-io#103](floci-io#103)
* **k8s:** add an Azure AKS adapter ([floci-io#164](floci-io#164)) ([12f344a](floci-io@12f344a))
* **kms:** add an AWS KMS adapter ([floci-io#158](floci-io#158)) ([c85d189](floci-io@c85d189)), closes [floci-io#156](floci-io#156) [floci-io#157](floci-io#157)
* **nosql:** add record creation ([floci-io#208](floci-io#208)) ([77cd563](floci-io@77cd563)), closes [floci-io#207](floci-io#207)
* **parameters:** add an AWS SSM Parameter Store adapter ([floci-io#159](floci-io#159)) ([8a28c2f](floci-io@8a28c2f)), closes [floci-io#156](floci-io#156) [floci-io#157](floci-io#157) [floci-io#158](floci-io#158)
* **rds:** implement RDS database and snapshot explorer ([floci-io#210](floci-io#210)) ([e2c8d5c](floci-io@e2c8d5c)), closes [floci-io#105](floci-io#105) [floci-io#211](floci-io#211)
* **rds:** support RDS instance updates and edit modal ([floci-io#211](floci-io#211)) ([e5cd879](floci-io@e5cd879)), closes [floci-io#210](floci-io#210) [floci-io#210](floci-io#210)
* **secrets:** add a secrets category with Secrets Manager and Secret Manager ([floci-io#156](floci-io#156)) ([a655e88](floci-io@a655e88)), closes [floci-io#155](floci-io#155) [floci-io#157](floci-io#157) [floci-io#157](floci-io#157)
* **workflows:** add an AWS Step Functions adapter ([floci-io#167](floci-io#167)) ([d443ddc](floci-io@d443ddc)), closes [floci-io#154](floci-io#154) [floci-io#154](floci-io#154) [floci-io#154](floci-io#154)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(gcp): Cloud Scheduler in Cloud Explorer

3 participants