Skip to content

feat(clickup): add ClickUp data-source plugin (folder-scope boards, sprints, DORA)#9009

Draft
elynch303 wants to merge 2 commits into
apache:mainfrom
elynch303:feat/clickup-connector
Draft

feat(clickup): add ClickUp data-source plugin (folder-scope boards, sprints, DORA)#9009
elynch303 wants to merge 2 commits into
apache:mainfrom
elynch303:feat/clickup-connector

Conversation

@elynch303

Copy link
Copy Markdown

⚠️ Pre-requisites

  • Check the current PRs to avoid duplicates
  • The commit message follows the conventional commits spec
  • All commits are signed off for the DCO (git commit -s)

Summary

Adds a new ClickUp data-source plugin so ClickUp workspaces feed DevLake's
issue-tracking and DORA/velocity metrics, modeled on the Jira and Linear
connectors. The plugin is registered as Beta.

Authentication is a ClickUp personal API token (pk_...), sent verbatim in
the Authorization header. OAuth is not yet supported.

Design: the folder is the board

The selected scope is a ClickUp folder (ClickUpFolder ≈ a Jira board), not
a single list. Every list inside the folder is collected on each sync, so
rolling and archived sprint lists never need to be re-scoped.

ClickUp DevLake domain
Folder board
Sprint list (name-matched) sprint + board_sprint
Task issue + board_issue
Task in a sprint list sprint_issue
Folder member account

What's included

Backend (backend/plugins/clickup)

  • Folder scope with hierarchical remote-scopes (Workspace → Space → Folder).
  • Sprint detection by list-name pattern (default (?i)sprint\s*\d+); start/end
    dates parsed from the name, with M/D/YY vs D/M/YY disambiguated by the
    ">12 must be the day" rule. Archived sprint lists are collected too.
  • Story points from ClickUp's native sprint points field, or a configured
    custom field.
  • Scope config (transformation): sprint-name pattern, story-point field,
    force-issue-type (flag a folder INCIDENT for DORA CFR/MTTR), and
    status/type overrides.
  • Migration 20260722 adds _tool_clickup_folders plus the sprint and
    story-point columns.
  • Unit tests for sprint name/date parsing and status/type/story-point mapping.

Config UI

  • ClickUp connection registration (token-paste form, Beta pill).
  • Boards data-scope picker + a scope-config transformation panel.
  • getPluginScopeId(clickup) → folderId so scope deletion and per-scope
    project selection target a single scope; also fixes a pre-existing
    Connections-page chunk() split that silently dropped some plugins.

Docs & dashboards

  • Plugin README.md (connection, folder scope, sprints, story points,
    incidents, scope config).
  • Branded ClickUp Grafana dashboard for both mysql and postgresql.

Evan Lynch and others added 2 commits July 20, 2026 18:39
Add a new DevLake data-source plugin for ClickUp, mirroring the linear
(structure) and trello (REST client) tracker plugins.

- models: ClickUpConnection (token auth, no Bearer prefix), ClickUpList
  scope (keyed by list id), ClickUpTask, ClickUpUser, ClickUpTaskComment
  (stub), ClickUpScopeConfig (status + type mapping)
- migrationscripts: register + addInitTables creating all _tool_clickup_*
  tables via migrationhelper.AutoMigrateTables
- tasks: task/user collectors (page-based + member REST), extractors,
  convertors to ticket.Issue/BoardIssue/IssueAssignee, crossdomain.Account
  and ticket.Board; shared status/type/time helpers
- api: connection CRUD + test-connection (GET /team), scope, scope-config,
  hierarchical remote-scopes (Team→Space→Folder→List), proxy, blueprint v200
- impl: all required plugin interfaces incl. GetTablesInfo listing every
  model, dependency-ordered SubTaskMetas and PrepareTaskData
- register clickup in plugins/table_info_test.go

go build ./plugins/clickup/... and go vet pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…s, and DORA

Add a new ClickUp data-source plugin so ClickUp workspaces feed DevLake's
issue-tracking and DORA/velocity metrics, modeled on the Jira/Linear connectors.

Backend:
- Folder is the data-source scope (ClickUpFolder ~= a Jira board); lists are
  child entities collected every sync, so rolling/archived sprint lists never
  need re-scoping.
- Sprint lists (name-matched) -> ticket.Sprint + board_sprints; start/end
  parsed from the list name (M/D vs D/M disambiguated by the >12 rule).
- Tasks -> issues + board_issues; sprint-list tasks also -> sprint_issues.
- Story points from ClickUp native sprint points (or a configured custom field).
- Scope config: sprint-name pattern, story-point field, force-issue-type
  (flag a folder INCIDENT for DORA CFR/MTTR), status/type overrides.
- remote-scopes walks Workspace -> Space -> Folder (folders selectable).
- migration 20260722 adds _tool_clickup_folders + sprint/story-point columns.
- Unit tests for sprint name/date parsing and status/type/story-point mapping.

Config UI:
- ClickUp connection registration (personal-token auth) with a Beta pill.
- Boards data-scope picker + scope-config transformation panel.
- getPluginScopeId(clickup) -> folderId so scope delete and per-scope project
  selection target one scope; fix a pre-existing Connections-page chunk() split
  that silently dropped plugins.

Docs & dashboards:
- Plugin README (connection, folder scope, sprints, story points, incidents).
- Branded ClickUp Grafana dashboard (grafana/dashboards/ClickUp.json).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Evan Lynch <e.lynch303@gmail.com>
@elynch303
elynch303 marked this pull request as draft July 21, 2026 22:12
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.

1 participant