Skip to content

Conversation

@michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Jan 14, 2026

Resolves #19670

Summary by CodeRabbit

  • New Features

    • Added 27 new Jira Data Center actions for managing boards, sprints, filters, issues, resolutions, and worklogs.
    • Dynamic property selection fields now populate live Jira data (projects, boards, sprints, issues, filters, worklogs, etc.).
    • Actions support create, read, list, update, delete, and move operations with pagination controls.
  • Chores

    • Component version bumped and platform dependency declared for runtime request support.

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Jan 14, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Review Updated (UTC)
pipedream-docs-redirect-do-not-edit Ignored Ignored Jan 14, 2026 8:51pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 14, 2026

Walkthrough

Adds 22 new Jira Data Center action modules (create, get, list, update, move, delete) and a major app update that implements propDefinitions, API wrapper methods, axios-based request layer, and pagination helpers; package version and dependency updated.

Changes

Cohort / File(s) Summary
Create / Mutation Actions
components/jira_data_center/actions/create-board/create-board.mjs, components/jira_data_center/actions/create-filter/create-filter.mjs, components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs
New actions to create boards, filters, and future sprints; define metadata, props, and run() delegating to jiraDataCenter.create* methods and exporting summaries.
Delete Actions
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs
New Delete Sprint action with destructive hint; prop resolvers for boardId→sprintId; run() calls jiraDataCenter.deleteSprint and exports summary.
Get / Retrieve Actions
components/jira_data_center/actions/get-board/get-board.mjs, components/jira_data_center/actions/get-resolution/get-resolution.mjs, components/jira_data_center/actions/get-sprint/get-sprint.mjs, components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs, components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs, components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs
New retrieval actions that call corresponding jiraDataCenter methods; include input validation (e.g., date parsing) and export summaries; props wired to app propDefinitions.
List Actions
components/jira_data_center/actions/list-boards/list-boards.mjs, components/jira_data_center/actions/list-board-issues/list-board-issues.mjs, components/jira_data_center/actions/list-resolutions/list-resolutions.mjs, components/jira_data_center/actions/list-sprints/list-sprints.mjs, components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs, components/jira_data_center/actions/list-epics/list-epics.mjs, components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs, components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs
New listing actions with pagination and optional filters (jql, type); run() calls jiraDataCenter.list* methods and exports counts.
Move / Update Actions
components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs, components/jira_data_center/actions/move-issues-to-sprint/move-issues-to-sprint.mjs, components/jira_data_center/actions/update-sprint-fully/update-sprint-fully.mjs, components/jira_data_center/actions/update-sprint-partially/update-sprint-partially.mjs
New actions to move issues and fully/partially update sprints; props mapped to Jira fields; run() delegates to jiraDataCenter move/update methods and exports summaries.
Core App & Packaging
components/jira_data_center/jira_data_center.app.mjs, components/jira_data_center/package.json
Large app module update: added many propDefinitions, axios import, DEFAULT_LIMIT, _makeRequest/_baseUrl and ~30 API wrapper methods (get*, list*, create*, update*, move*, delete*), plus dynamic option resolvers; package.json bumped to 0.1.0 and adds @pipedream/platform dependency.

Sequence Diagram(s)

sequenceDiagram
  participant Action as Action Module
  participant App as jiraDataCenter.app
  participant API as Jira REST API

  Action->>App: this.jiraDataCenter.createBoard({ $, data })
  App->>App: _makeRequest(path, opts) (build URL, headers)
  App->>API: HTTP POST /agile/1.0/board (axios request)
  API-->>App: HTTP 201 Created (response body)
  App-->>Action: return response
  Action->>Action: $.export("$summary", "Successfully created board with ID ...")
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested labels

action, User submitted

Suggested reviewers

  • jcortes
  • luancazarine
🚥 Pre-merge checks | ✅ 3 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request description is minimal, containing only a reference to issue #19670 without explaining the changes, their purpose, or how the implementation fulfills the requirements. The provided template asks for 'WHY' which is completely absent. Provide a detailed description explaining why these changes were made, what functionality was added, and how it addresses the issue requirements, using the template structure.
Title check ❓ Inconclusive The title 'Jira Data Center - new components' is vague and does not convey the specific functionality added. While technically related to the changeset, it uses generic phrasing that fails to highlight the primary changes (new actions for managing sprints, epics, boards, and worklogs). Revise the title to be more specific about the primary changes, e.g., 'Add Jira Data Center actions for sprints, epics, boards, and worklogs' or 'Implement Jira Data Center REST API integration for board and sprint management'.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The pull request implements all 21 required API operations specified in issue #19670: filter creation, worklog retrieval (updated and by IDs), resolution management, sprint operations (create, get, update, delete), issue movement, board operations, epic/issue listing, and backlog operations. All requirements have corresponding action modules with proper API integration.
Out of Scope Changes check ✅ Passed All changes are directly aligned with the requirements in issue #19670. The new action modules, updated jira_data_center.app.mjs with API wrappers and prop resolvers, and package.json dependency update are all necessary to support the specified Jira Data Center functionality. No unrelated or extraneous changes are present.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings


📜 Recent review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a5d993a and d948839.

📒 Files selected for processing (9)
  • components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs
  • components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs
  • components/jira_data_center/actions/list-board-issues/list-board-issues.mjs
  • components/jira_data_center/actions/list-boards/list-boards.mjs
  • components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs
  • components/jira_data_center/actions/list-resolutions/list-resolutions.mjs
  • components/jira_data_center/actions/list-sprints/list-sprints.mjs
  • components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs
  • components/jira_data_center/jira_data_center.app.mjs
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2024-07-04T18:11:59.822Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-07-04T18:11:59.822Z
Learning: When exporting a summary message in the `run` method of an action, ensure the message is correctly formatted. For example, in the `hackerone-get-members` action, the correct format is `Successfully retrieved ${response.data.length} members`.

Applied to files:

  • components/jira_data_center/actions/list-boards/list-boards.mjs
  • components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs
  • components/jira_data_center/actions/list-board-issues/list-board-issues.mjs
🧬 Code graph analysis (7)
components/jira_data_center/actions/list-boards/list-boards.mjs (16)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (36-43)
components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs (1)
  • response (36-42)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/create-filter/create-filter.mjs (1)
  • response (47-56)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (1)
  • response (60-71)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-board/get-board.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (5)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (36-43)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (8)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (36-43)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (2)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (36-43)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (16)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (36-43)
components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs (1)
  • response (36-42)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/create-filter/create-filter.mjs (1)
  • response (47-56)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (1)
  • response (60-71)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (3)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs (4)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (36-43)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Lint Code Base
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Publish TypeScript components
🔇 Additional comments (13)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)

1-24: LGTM!

The implementation is clean and follows the established patterns for Pipedream actions. The previous feedback regarding the misleading description has been addressed—it now correctly states "Lists all resolutions" rather than implying issue-specific resolutions. The annotations appropriately reflect the read-only nature of this operation, and the null-safe summary message handles edge cases correctly.

components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)

1-47: LGTM! Implementation is consistent with other list actions and addresses previous feedback.

The action correctly implements pagination support via maxResults and startAt props, matching the pattern used in list-boards.mjs and list-sprint-issues.mjs. The optional chaining for response.values?.length provides safe handling when the response structure varies. Annotations appropriately mark this as a read-only, non-destructive operation.

components/jira_data_center/jira_data_center.app.mjs (3)

105-117: Previous concern addressed: worklog time window now uses a 30-day lookback.

The fix correctly limits the worklog fetch to the last 30 days instead of fetching all worklogs since epoch, which addresses the performance concern.


119-143: Previous concern addressed: boardId guard added to epicId options.

The early-return guard at lines 126-128 prevents API errors when boardId is not selected, consistent with the pattern used in sprintId and issueId options.


219-233: Well-structured request layer implementation.

The _baseUrl and _makeRequest helpers correctly construct the API URL from auth data and pass through Bearer token authentication. The spread pattern for opts allows callers to override defaults cleanly.

components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)

42-54: Previous concern addressed: optional chaining added for defensive access.

The summary export now uses response.issues?.length || 0, preventing potential TypeError if the response shape is unexpected. Implementation is clean and follows the established pattern.

components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)

42-54: Previous concern addressed: defensive access pattern applied.

The implementation correctly uses response.issues?.length || 0 for safe access, consistent with other similar actions in this PR.

components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (2)

3-13: Previous concern addressed: description now accurately reflects the action's behavior.

The description correctly states "Gets the worklogs by IDs" matching the worklogIds prop usage.


23-31: Implementation looks correct with appropriate defensive coding.

The run method properly calls listWorklogsById with the worklog IDs and uses response?.length || 0 for safe summary generation.

components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (2)

14-40: Previous concern addressed: pagination support added for consistency.

The action now includes jql, maxResults, and startAt props matching the pattern used by list-board-issues, list-epic-issues, and list-sprint-issues. This enables users to control batch sizes and paginate through large result sets.


42-54: Clean implementation with defensive response handling.

The run method correctly passes pagination params to the API and uses optional chaining for safe summary generation.

components/jira_data_center/actions/list-boards/list-boards.mjs (1)

52-69: LGTM!

The run method is well-implemented with proper optional chaining (response.values?.length || 0) to handle potential undefined responses. The API call structure is consistent with other actions in this PR.

components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs (1)

1-46: LGTM!

The action is well-structured and follows the conventions established by other actions in this PR. The defensive check for this.issueIds?.length || 0 properly handles potential edge cases. The propDefinition reducer pattern at lines 26-28 correctly passes boardId context for dynamic issue selection.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 12

🤖 Fix all issues with AI agents
In
`@components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs`:
- Line 52: The summary export uses response.issues.length which can throw if
response.issues is null/undefined; update the $.export("$summary", ...) call to
use optional chaining and a fallback like response.issues?.length || 0 so it
safely reports "0" when issues is missing and keep the board id interpolation
(this.boardId) unchanged.

In
`@components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs`:
- Line 6: Update the action description in get-worklogs-by-id.mjs to accurately
state that it fetches worklogs by worklog IDs (using the worklogIds prop)
instead of by issue ID; reference the worklogIds prop and keep the existing docs
link, e.g., change the sentence that currently reads "Gets the worklogs for a
given issue ID" to clearly indicate it retrieves worklogs by one or more worklog
IDs.

In `@components/jira_data_center/actions/list-board-issues/list-board-issues.mjs`:
- Line 52: The summary export assumes response.issues exists; guard against
undefined by using optional chaining and a default (e.g.,
response.issues?.length ?? 0) when building the message in the
$.export("$summary") call in list-board-issues.mjs so it won't throw if the API
returns an unexpected shape; keep the existing message and this.boardId
reference but replace response.issues.length with a safe expression that falls
back to 0.

In `@components/jira_data_center/actions/list-boards/list-boards.mjs`:
- Around line 64-66: The summary export uses response.values.length directly and
can throw if response.values is undefined; update the $.export("$summary", ...)
call to defensively handle missing values by using optional chaining or a
fallback (e.g., treat response.values as an empty array) when computing the
count so the template string becomes safe for error/empty responses;
specifically change the expression that references response.values.length in the
$.export("$summary", ...) line to use response.values?.length ?? 0 (and adjust
the pluralization check to use the same safe count).
- Around line 29-38: Update the "type" input definition used by the list-boards
action so its options array includes "simple" alongside "kanban" and "scrum";
specifically modify the type object (the property named type with label "Type")
to have options: ["kanban","scrum","simple"] so team-managed boards returned as
"simple" are selectable.

In
`@components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs`:
- Around line 14-29: This action lacks pagination props; add maxResults,
startAt, and jql to the props object (matching the other list actions) and pass
them into the call to this.jiraDataCenter.listIssuesWithoutEpic({ $, boardId:
this.boardId, maxResults: this.maxResults, startAt: this.startAt, jql: this.jql
}); update the run method signature if needed and keep the $.export("$summary",
...) logic unchanged so callers can control batch size and paginate large result
sets.

In `@components/jira_data_center/actions/list-resolutions/list-resolutions.mjs`:
- Line 5: The action's description is misleading: update the description
property in the list-resolutions action metadata (the description string
currently saying "Lists the resolutions for a given issue") to accurately state
that it returns all system-level resolutions (e.g., "Lists all system-level
resolutions via GET /api/2/resolution") so it no longer implies an
issue-specific result.

In `@components/jira_data_center/actions/list-sprints/list-sprints.mjs`:
- Around line 14-29: Add pagination props and pass them through to the Jira
client: extend the props block to include maxResults and startAt (matching other
list actions) and update the run method to forward these props to
this.jiraDataCenter.listSprints so it calls listSprints({ $, boardId:
this.boardId, maxResults: this.maxResults, startAt: this.startAt }). Ensure
propDefinition usage mirrors list-boards/list-epics so types/validation stay
consistent and update the summary to reflect the paginated fetch if needed.

In
`@components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs`:
- Line 43: The summary export uses this.issueIds.length without guarding for
undefined and should use a safe fallback; update the template expression in the
$.export("$summary", ...) call to reference this.issueIds with optional chaining
and a default (e.g., this.issueIds?.length || 0) so the summary never throws
when issueIds is missing or null.

In
`@components/jira_data_center/actions/update-sprint-partially/update-sprint-partially.mjs`:
- Around line 59-88: The listed prop definitions in update-sprint-partially.mjs
(autoStartStop, goal, synced, activatedDate, completedDate) are missing
optional: true and thus enforce required input; update each property's config
object to include optional: true so these fields become optional for the partial
update action (i.e., add optional: true inside the prop definition for
autoStartStop, goal, synced, activatedDate, and completedDate).

In `@components/jira_data_center/jira_data_center.app.mjs`:
- Around line 105-116: The current worklogIds async options calls
getUpdatedWorkLogs with params: { since: 0 } which requests all history and can
be very slow; change this to a reasonable default time window (e.g., compute a
timestamp for 30 days ago and pass that as since) or implement pagination by
calling getUpdatedWorkLogs repeatedly using a cursor/offset until no more pages,
and expose a configurable setting for the window/page size; update the
worklogIds async options to use the new since value or paginated fetch and map
the returned values.map(({ worklogId }) => worklogId) as before.
- Around line 118-138: The epicId async options handler lacks the boardId guard
and calls listEpics unconditionally; add the same early-return check used by
sprintId and issueId (check if boardId is falsy) at the start of epicId's async
options and return an empty array (or the same empty-options shape those other
handlers return) to avoid calling listEpics when boardId is not selected.
📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 502e9b9 and a5d993a.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (24)
  • components/jira_data_center/actions/create-board/create-board.mjs
  • components/jira_data_center/actions/create-filter/create-filter.mjs
  • components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs
  • components/jira_data_center/actions/delete-sprint/delete-sprint.mjs
  • components/jira_data_center/actions/get-board/get-board.mjs
  • components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs
  • components/jira_data_center/actions/get-resolution/get-resolution.mjs
  • components/jira_data_center/actions/get-sprint/get-sprint.mjs
  • components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs
  • components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs
  • components/jira_data_center/actions/list-board-issues/list-board-issues.mjs
  • components/jira_data_center/actions/list-boards/list-boards.mjs
  • components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs
  • components/jira_data_center/actions/list-epics/list-epics.mjs
  • components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs
  • components/jira_data_center/actions/list-resolutions/list-resolutions.mjs
  • components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs
  • components/jira_data_center/actions/list-sprints/list-sprints.mjs
  • components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs
  • components/jira_data_center/actions/move-issues-to-sprint/move-issues-to-sprint.mjs
  • components/jira_data_center/actions/update-sprint-fully/update-sprint-fully.mjs
  • components/jira_data_center/actions/update-sprint-partially/update-sprint-partially.mjs
  • components/jira_data_center/jira_data_center.app.mjs
  • components/jira_data_center/package.json
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2024-12-12T19:23:09.039Z
Learnt from: jcortes
Repo: PipedreamHQ/pipedream PR: 14935
File: components/sailpoint/package.json:15-18
Timestamp: 2024-12-12T19:23:09.039Z
Learning: When developing Pipedream components, do not add built-in Node.js modules like `fs` to `package.json` dependencies, as they are native modules provided by the Node.js runtime.

Applied to files:

  • components/jira_data_center/package.json
🧬 Code graph analysis (15)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (16)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/create-filter/create-filter.mjs (1)
  • response (47-56)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (1)
  • response (60-71)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (16)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/create-filter/create-filter.mjs (1)
  • response (47-56)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (1)
  • response (60-71)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/move-issues-to-sprint/move-issues-to-sprint.mjs (3)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/list-epics/list-epics.mjs (5)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (4)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/create-filter/create-filter.mjs (11)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (5)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (16)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/create-filter/create-filter.mjs (1)
  • response (47-56)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (1)
  • response (60-71)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (3)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (5)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (7)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-boards/list-boards.mjs (4)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-board/get-board.mjs (1)
  • response (24-27)
components/jira_data_center/actions/create-board/create-board.mjs (16)
components/jira_data_center/actions/create-filter/create-filter.mjs (1)
  • response (47-56)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (1)
  • response (60-71)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
components/jira_data_center/actions/list-sprints/list-sprints.mjs (1)
  • response (24-27)
components/jira_data_center/actions/update-sprint-partially/update-sprint-partially.mjs (4)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs (16)
components/jira_data_center/actions/create-board/create-board.mjs (1)
  • response (38-45)
components/jira_data_center/actions/create-filter/create-filter.mjs (1)
  • response (47-56)
components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (1)
  • response (60-71)
components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-issues-from-backlog/get-issues-from-backlog.mjs (1)
  • response (43-51)
components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)
  • response (24-27)
components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)
  • response (33-36)
components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)
  • response (28-33)
components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)
  • response (24-29)
components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)
  • response (43-51)
components/jira_data_center/actions/list-boards/list-boards.mjs (1)
  • response (53-62)
components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)
  • response (52-61)
components/jira_data_center/actions/list-epics/list-epics.mjs (1)
  • response (36-43)
components/jira_data_center/actions/list-issues-without-epic/list-issues-without-epic.mjs (1)
  • response (24-27)
components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)
  • response (18-20)
components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)
  • response (52-60)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
  • GitHub Check: pnpm publish
  • GitHub Check: Lint Code Base
🔇 Additional comments (21)
components/jira_data_center/package.json (1)

3-17: LGTM!

Version bump to 0.1.0 is appropriate for this significant feature addition. The @pipedream/platform dependency is correctly added for the new action modules.

components/jira_data_center/actions/create-filter/create-filter.mjs (1)

1-60: LGTM!

The action module is well-structured with appropriate annotations (destructiveHint: false for creation, readOnlyHint: false). Props are properly defined with optional fields marked, and the run method correctly delegates to the app module. Summary export format is consistent with other actions in the PR.

components/jira_data_center/actions/get-board/get-board.mjs (1)

1-33: LGTM!

Clean implementation with correct readOnlyHint: true annotation for this read operation. The prop wiring and run method follow the established patterns seen in other actions like get-sprint and get-resolution.

components/jira_data_center/actions/delete-sprint/delete-sprint.mjs (1)

1-40: LGTM!

Well-implemented with destructiveHint: true correctly marking this as a destructive operation. The sprint selection is properly scoped to the board via the prop callback pattern, and the summary appropriately uses this.sprintId since delete responses may not include the deleted resource ID.

components/jira_data_center/actions/list-sprint-issues/list-sprint-issues.mjs (1)

1-64: LGTM!

The action follows the established patterns from list-epic-issues and list-board-issues. Props are properly wired with the board-to-sprint dependency, optional JQL filter, and pagination parameters. The summary safely handles potentially undefined issues with response.issues?.length || 0.

components/jira_data_center/actions/update-sprint-fully/update-sprint-fully.mjs (1)

3-106: LGTM!

The action correctly implements full update semantics with destructiveHint: true. The data payload includes all fields as expected for a PUT operation where omitted fields are nullified.

components/jira_data_center/actions/move-issues-to-sprint/move-issues-to-sprint.mjs (1)

3-55: LGTM!

Good use of excludeClosed: true to prevent moving issues to closed sprints. The prop override to string[] for multiple issue selection is well-structured.

components/jira_data_center/actions/list-epic-issues/list-epic-issues.mjs (1)

3-64: LGTM!

Clean implementation with proper prop dependencies and defensive null handling in the summary. The readOnlyHint: true annotation is appropriate for this list operation.

components/jira_data_center/jira_data_center.app.mjs (1)

215-410: LGTM!

The API wrapper methods are well-structured with consistent patterns. Proper HTTP methods are used for each operation, and the _makeRequest helper cleanly centralizes authentication and base URL handling.

components/jira_data_center/actions/list-resolutions/list-resolutions.mjs (1)

17-23: LGTM!

The run method is clean with proper defensive null handling in the summary.

components/jira_data_center/actions/create-board/create-board.mjs (1)

1-49: LGTM!

The action follows the established pattern, correctly sets readOnlyHint: false for a create operation, and provides appropriate board type options. The implementation is clean and consistent with other actions in this PR.

components/jira_data_center/actions/get-updated-work-logs/get-updated-work-logs.mjs (1)

23-33: Code correctly handles the date format.

The Jira Data Center worklog API expects the since parameter as a Unix timestamp in milliseconds (e.g., 1438013671562). The code uses Date.parse() to convert the ISO 8601 input string to milliseconds, which is exactly what the API requires. The validation and implementation are correct.

components/jira_data_center/actions/list-board-issues/list-board-issues.mjs (1)

3-54: Action structure follows established patterns.

The action metadata, annotations, and props are well-structured and consistent with other Jira Data Center actions in the PR. The read-only annotations correctly reflect the GET operation nature.

components/jira_data_center/actions/get-sprint/get-sprint.mjs (1)

14-39: Implementation looks correct.

The boardId prop serves as a filter for the sprintId dropdown via the resolver function, enabling users to select sprints from a specific board. The API call correctly only requires sprintId. This follows the established pattern seen in delete-sprint.mjs.

components/jira_data_center/actions/get-resolution/get-resolution.mjs (1)

3-30: LGTM!

Clean and straightforward implementation following the established pattern. The action correctly retrieves a resolution by ID with appropriate read-only annotations.

components/jira_data_center/actions/list-epics/list-epics.mjs (1)

3-46: LGTM!

Well-implemented action with defensive null handling in the summary (response.values?.length || 0). The structure is consistent with other listing actions in the PR.

components/jira_data_center/actions/create-future-sprint/create-future-sprint.mjs (2)

9-13: Annotations correctly reflect create operation.

The readOnlyHint: false and destructiveHint: false annotations are appropriate for a create operation that modifies state but doesn't delete existing resources.


59-74: LGTM!

The implementation correctly maps the boardId prop to originBoardId in the API payload and follows the established create action pattern from create-board.mjs.

components/jira_data_center/actions/get-worklogs-by-id/get-worklogs-by-id.mjs (1)

23-32: LGTM!

The run method correctly delegates to the app wrapper and handles the response with appropriate null-safe summary export.

components/jira_data_center/actions/move-issues-to-backlog/move-issues-to-backlog.mjs (1)

35-44: LGTM!

The run method follows the established pattern, correctly passes the $ context, boardId, and issue data to the API wrapper. The implementation is consistent with similar actions in this PR.

components/jira_data_center/actions/update-sprint-partially/update-sprint-partially.mjs (1)

94-104: Consider filtering undefined values for cleaner partial updates.

While JSON.stringify typically omits undefined values, explicitly filtering them makes the intent clearer and avoids potential edge cases with different serializers or middleware.

Suggested approach
+    const data = Object.fromEntries(
+      Object.entries({
+        name: this.name,
+        state: this.state,
+        startDate: this.startDate,
+        endDate: this.endDate,
+        autoStartStop: this.autoStartStop,
+        goal: this.goal,
+        synced: this.synced,
+        activatedDate: this.activatedDate,
+        completedDate: this.completedDate,
+      }).filter(([, v]) => v !== undefined),
+    );
     const response = await this.jiraDataCenter.updateSprintPartial({
       $,
       sprintId: this.sprintId,
-      data: {
-        name: this.name,
-        state: this.state,
-        startDate: this.startDate,
-        endDate: this.endDate,
-        autoStartStop: this.autoStartStop,
-        goal: this.goal,
-        synced: this.synced,
-        activatedDate: this.activatedDate,
-        completedDate: this.completedDate,
-      },
+      data,
     });
⛔ Skipped due to learnings
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 18362
File: components/leonardo_ai/actions/generate-image/generate-image.mjs:103-105
Timestamp: 2025-09-15T22:01:11.472Z
Learning: In Pipedream components, pipedream/platform's axios implementation automatically excludes undefined values from HTTP requests, so there's no need to manually check for truthiness before including properties in request payloads.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Copy link
Collaborator

@jcortes jcortes left a comment

Choose a reason for hiding this comment

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

Hi @michelle0927 lgtm! Ready for QA!

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.

[ACTION] Jira Data Center - Expand functionality to manage sprints, epics, boards, and worklogs.

3 participants