Search before asking
Use case
As a team that tracks work in Linear (linear.app), I want DevLake to collect our Linear data so I can analyze engineering throughput, lead/cycle time, sprint (cycle) progress, and status changelogs alongside our other tools — without exporting data by hand. Today DevLake has no Linear integration.
Description
Add a first-class Linear data source plugin, following DevLake's standard 3-stage ETL and framework helpers:
- Collect (GraphQL →
_raw_linear_*) using the async GraphQL client with rate-limit pacing; incremental collection via a server-side updatedAt filter.
- Extract (
_raw_linear_* → _tool_linear_*).
- Convert (
_tool_linear_* → domain tables).
Scope = Linear Team → ticket.Board. Auth = personal API key. Status is mapped deterministically from WorkflowState.type (triage,backlog,unstarted → TODO; started → IN_PROGRESS; completed,canceled → DONE).
Domain mappings:
- Team →
boards
- Issues →
issues + board_issues + issue_assignees
- Comments →
issue_comments
- Labels →
issue_labels
- Cycles →
sprints + sprint_issues
- Issue history →
issue_changelogs (+ lead/cycle time derived from in-progress→done transitions)
- Users →
accounts
Also includes config-ui registration (connection form + Teams data scope via remote-scopes) and a Grafana dashboard (grafana/dashboards/Linear.json).
Related issues
Implemented by PR #8900.
Are you willing to submit a PR?
Code of Conduct
Search before asking
Use case
As a team that tracks work in Linear (linear.app), I want DevLake to collect our Linear data so I can analyze engineering throughput, lead/cycle time, sprint (cycle) progress, and status changelogs alongside our other tools — without exporting data by hand. Today DevLake has no Linear integration.
Description
Add a first-class Linear data source plugin, following DevLake's standard 3-stage ETL and framework helpers:
_raw_linear_*) using the async GraphQL client with rate-limit pacing; incremental collection via a server-sideupdatedAtfilter._raw_linear_*→_tool_linear_*)._tool_linear_*→ domain tables).Scope = Linear Team →
ticket.Board. Auth = personal API key. Status is mapped deterministically fromWorkflowState.type(triage,backlog,unstarted → TODO;started → IN_PROGRESS;completed,canceled → DONE).Domain mappings:
boardsissues+board_issues+issue_assigneesissue_commentsissue_labelssprints+sprint_issuesissue_changelogs(+ lead/cycle time derived from in-progress→done transitions)accountsAlso includes config-ui registration (connection form + Teams data scope via remote-scopes) and a Grafana dashboard (
grafana/dashboards/Linear.json).Related issues
Implemented by PR #8900.
Are you willing to submit a PR?
Code of Conduct