Skip to content

pipecd: Add applications list - #1301

Open
harshitghagre wants to merge 5 commits into
headlamp-k8s:mainfrom
harshitghagre:pipecd-applications-list
Open

harshitghagre wants to merge 5 commits into
headlamp-k8s:mainfrom
harshitghagre:pipecd-applications-list

Conversation

@harshitghagre

@harshitghagre harshitghagre commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

This PR adds the Applications page for the PipeCD plugin.

It lists PipeCD applications with their platform, sync status, last sync time and repository. Users can search by name or repo, and filter by platform. Each row links to the application in PipeCD.

Depends on #1300 .

Part of the LFX Mentorship 2026 Term 3, tracked in pipe-cd/pipecd#6706.

Screenshot

image image

@illume illume 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.

Thanks for these changes.

Can you please have a look at the git commits to see if they meet the contribution guidelines? We use a Linux kernel style of git commits. See the contributing guide for general context, and please see previous git commits with git log for examples.

Commits that need attention
  • pipecd: add initial plugin project structure — Description must start with a capital letter — e.g. frontend: HomeButton: Fix the button not frontend: HomeButton: fix the button.
  • pipecd: trim README to a placeholder — Description must start with a capital letter — e.g. frontend: HomeButton: Fix the button not frontend: HomeButton: fix the button.
  • pipecd: add Apache license header — Description must start with a capital letter — e.g. frontend: HomeButton: Fix the button not frontend: HomeButton: fix the button.
  • pipecd: add API client and settings page — Description must start with a capital letter — e.g. frontend: HomeButton: Fix the button not frontend: HomeButton: fix the button.
  • pipecd: add applications list — Description must start with a capital letter — e.g. frontend: HomeButton: Fix the button not frontend: HomeButton: fix the button.
Commit guidelines
  • Use atomic commits focused on a single change.
  • Use the title format <area>: <Description of changes> — description must start with a capital letter.
  • Keep the title under 72 characters (soft requirement).
  • Explain the intention and why the change is needed.
  • Make commit titles meaningful and describe what changed.
  • Do not add code that a later commit rewrites; squash or reorder commits instead.
  • Do not include Fixes #NN in commit messages.

Good examples:

  • frontend: HomeButton: Fix so it navigates to home
  • backend: config: Add enable-dynamic-clusters flag

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.

Copilot review overview

🟡 Changes recommended

Cloud Run filtering is broken, request cancellation is ineffective, and connection security and setup documentation need correction.

Review effort: Balanced
Findings: 1 High severity · 3 Medium severity · 1 Low severity

Open (5)
What changed in this PR

Adds the PipeCD plugin’s application listing, API integration, settings, navigation, generated protobuf bindings, and tests.

Changes:

  • Adds searchable, platform-filtered application status table.
  • Adds PipeCD gRPC-Web client and connection settings.
  • Registers plugin routes and includes supporting tests and generated models.
File Description
pipecd/​tsconfig.json Configures TypeScript.
pipecd/​src/​types/​pipecd.ts Defines domain types.
pipecd/​src/​index.tsx Registers navigation and routes.
pipecd/​src/​images.d.ts Declares PNG imports.
pipecd/​src/​headlamp-plugin.d.ts Declares plugin asset types.
pipecd/​src/​generated/​pkg/​model/​user_pb.ts Adds generated user bindings.
pipecd/​src/​generated/​pkg/​model/​role_pb.ts Adds generated role bindings.
pipecd/​src/​generated/​pkg/​model/​rbac_pb.ts Adds generated RBAC bindings.
pipecd/​src/​generated/​pkg/​model/​project_pb.ts Adds generated project bindings.
pipecd/​src/​generated/​pkg/​model/​planpreview_pb.ts Adds generated plan-preview bindings.
pipecd/​src/​generated/​pkg/​model/​piped_stat_pb.ts Adds generated Piped-stat bindings.
pipecd/​src/​generated/​pkg/​model/​piped_pb.ts Adds generated Piped bindings.
pipecd/​src/​generated/​pkg/​model/​logblock_pb.ts Adds generated log bindings.
pipecd/​src/​generated/​pkg/​model/​insight_pb.ts Adds generated insight bindings.
pipecd/​src/​generated/​pkg/​model/​event_pb.ts Adds generated event bindings.
pipecd/​src/​generated/​pkg/​model/​deployment_trace_pb.ts Adds generated trace bindings.
pipecd/​src/​generated/​pkg/​model/​deployment_pb.ts Adds generated deployment bindings.
pipecd/​src/​generated/​pkg/​model/​deployment_chain_pb.ts Adds generated chain bindings.
pipecd/​src/​generated/​pkg/​model/​common_pb.ts Adds shared generated models.
pipecd/​src/​generated/​pkg/​model/​command_pb.ts Adds generated command bindings.
pipecd/​src/​generated/​pkg/​model/​application_pb.ts Adds generated application bindings.
pipecd/​src/​generated/​pkg/​model/​apikey_pb.ts Adds generated API-key bindings.
pipecd/​src/​generated/​pkg/​model/​analysis_result_pb.ts Adds generated analysis bindings.
pipecd/​src/​components/​SyncStatusLabel.tsx Renders sync status labels.
pipecd/​src/​components/​SettingsPage.tsx Adds connection settings UI.
pipecd/​src/​components/​NotConfigured.tsx Adds configuration prompt.
pipecd/​src/​components/​KindBadge.tsx Renders platform badges.
pipecd/​src/​components/​ApplicationList.tsx Implements the applications page.
pipecd/​src/​api/​pipecd.ts Implements API access and mapping.
pipecd/​src/​__tests__/​SyncStatusLabel.test.tsx Tests status labels.
pipecd/​src/​__tests__/​SettingsPage.test.tsx Tests settings behavior.
pipecd/​src/​__tests__/​pipecd-api.test.ts Tests API integration.
pipecd/​src/​__tests__/​fixtures.ts Provides test fixtures.
pipecd/​src/​__tests__/​ApplicationList.test.tsx Tests application listing.
pipecd/​README.md Adds plugin heading.
pipecd/​package.json Defines package and dependencies.
pipecd/​locales/​en/​translation.json Initializes English translations.
pipecd/​AGENTS.md Documents development guidance.
pipecd/​.prettierignore Excludes generated sources.
pipecd/​.gitignore Excludes generated artifacts.

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

Comment thread pipecd/src/components/SettingsPage.tsx Outdated
Comment thread pipecd/src/api/pipecd.ts Outdated
Comment thread pipecd/src/api/pipecd.ts Outdated
Comment thread pipecd/src/api/pipecd.ts Outdated
Comment thread pipecd/README.md Outdated
Signed-off-by: harshitghagre <harshitghagre183@gmail.com>
@harshitghagre harshitghagre changed the title pipecd: add applications list pipecd: dd applications list Sep 30, 2026
@harshitghagre harshitghagre changed the title pipecd: dd applications list pipecd: Add applications list Sep 30, 2026
Signed-off-by: harshitghagre <harshitghagre183@gmail.com>
@harshitghagre

Copy link
Copy Markdown
Contributor Author

@illume fixed

Signed-off-by: harshitghagre <harshitghagre183@gmail.com>

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.

Comment thread pipecd/src/components/ApplicationList.tsx Outdated
Comment thread pipecd/src/components/NotConfigured.tsx Outdated
Comment thread pipecd/src/components/ApplicationList.tsx Outdated
Comment thread pipecd/src/components/ApplicationList.tsx
Comment thread pipecd/src/components/ApplicationList.tsx Outdated
Comment thread pipecd/src/components/SettingsPage.tsx
Comment thread pipecd/README.md Outdated
Comment thread pipecd/src/components/ApplicationList.tsx Outdated

@illume illume 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.

Thanks for the contribution.

There are some open Copilot review comments — could you take a look at them? Please mark each one as resolved once you've addressed it.

Signed-off-by: harshitghagre <harshitghagre183@gmail.com>
@harshitghagre
harshitghagre force-pushed the pipecd-applications-list branch from d5eb85b to 9154085 Compare October 11, 2026 11:32
@harshitghagre

harshitghagre commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor Author

@illume requested changes were fixed,
PATL

@illume illume added enhancement New feature or request pipecd labels Oct 11, 2026
@illume
illume requested a balanced review from Copilot October 11, 2026 14:36

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.

Comment thread pipecd/src/components/ApplicationList.tsx
Comment thread pipecd/src/components/KindBadge.tsx Outdated
Comment thread pipecd/src/components/SettingsPage.tsx
Comment thread pipecd/AGENTS.md
Comment thread pipecd/locales/en/translation.json Outdated

@illume illume 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.

Thanks for the contribution.

There are some open Copilot review comments — could you take a look at them? Please mark each one as resolved once you've addressed it.

Signed-off-by: harshitghagre <harshitghagre183@gmail.com>
@harshitghagre

harshitghagre commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor Author

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.

🔵 Needs a closer look

Unbounded API fetching and incorrect platform and relative-time handling can produce scalability and accuracy problems.

0 open findings

5 resolved since last review
Previously missed (5)

In code that hasn't changed since last review

Medium severity Custom plugin deployments are misclassified as Kubernetes

pipecd/​src/​api/​pipecd.ts:173

The fallback contradicts the function's own “only when there are none” contract. If deployTargetsByPlugin contains a custom or newly introduced plugin, no entry matches PLUGIN_KINDS, so the deprecated zero-valued a.kind makes that application appear as Kubernetes instead of Unknown. Only consult a.kind when the deploy-target map is empty.

Medium severity Deployment mapping mislabels plugin-based deployment platforms

pipecd/​src/​api/​pipecd.ts:273

Deployment mapping still reads the deprecated kind field, although plugin-architecture deployments expose their platform through deployTargetsByPlugin just like applications. Since the deprecated enum defaults to Kubernetes, Terraform, Lambda, Cloud Run, and ECS deployments can all be mislabeled. Resolve the recognized plugin name before falling back to the legacy enum.

Medium severity Default page size allows unbounded application queries

pipecd/​src/​api/​pipecd.ts:320

0 is not a bounded/default page size in PipeCD: the server forwards it to the datastore, whose MySQL and Firestore implementations only apply a limit when it is greater than zero. Consequently, the default call scans and serializes every application in the project at once, bypassing the cursor loop and creating an unbounded request for large projects. Use the API's documented page size so callers paginate predictably.

Medium severity Dismissing load error incorrectly shows empty state

pipecd/​src/​components/​ApplicationList.tsx:255

Clearing the load error makes an initial failed request immediately satisfy the empty-state condition below, so dismissing the alert falsely tells the user that PipeCD returned no applications. Keep the failure state distinct from alert visibility (or leave this initial error non-dismissible) so a network/API failure cannot become a successful empty result.

Medium severity Relative sync time does not update while page remains open

pipecd/​src/​components/​ApplicationList.tsx:327

This relative value is calculated only when React happens to render; there is no timer or clock state in this component. A row that says “just now” can therefore remain that way indefinitely while the page is open, making the Last Synced column inaccurate. Either schedule periodic rerenders or display the stable absolute timestamp here.

🧠 Review effort: Balanced

@illume
illume requested a balanced review from Copilot October 15, 2026 07:39

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

Application status, last-sync timestamps, and unknown-platform classification can display misleading information.

3 open findings

🧠 Review effort: Balanced

Comment thread pipecd/src/api/pipecd.ts
Comment on lines +169 to +173
for (const plugin of Object.keys(a.deployTargetsByPlugin ?? {})) {
const kind = PLUGIN_KINDS[plugin.toLowerCase()];
if (kind) return kind;
}
return KIND_MAP[a.kind] ?? 'UNKNOWN';
Comment thread pipecd/src/api/pipecd.ts
Comment on lines +214 to +221
syncState: a.syncState
? {
status: SYNC_STATUS_MAP[a.syncState.status] ?? 'UNKNOWN',
shortReason: a.syncState.shortReason,
reason: a.syncState.reason,
timestamp: toNumber(a.syncState.timestamp),
}
: undefined,
Comment on lines +33 to +46
/**
* When an application was last synced.
*
* The sync state carries the reliable timestamp, and it is what the detail page
* shows. PipeCD often omits completedAt on the deployment reference, so the
* deployment timestamps are only a fallback.
*/
function lastSyncedAt(app: Application): number | undefined {
return (
app.syncState?.timestamp ||
app.mostRecentSuccessfulDeployment?.completedAt ||
app.mostRecentSuccessfulDeployment?.startedAt
);
}

@illume illume 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.

Thanks for this PR.

There are git conflicts in this PR that need to be resolved.

How to resolve conflicts

Rebase or merge the latest main into your branch, resolve the conflicts, and push the updated branch.

The open review comments from Copilot still need attention — can you have a look? Once addressed, please mark them as resolved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request pipecd

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants