🚀 Added
- Added Jira Cloud vs Data Center compatibility guidance for Copilot code review (#568, [@lipkau])
- Added
-Forceparameter toGet-JiraServerInformationto bypass the server info cache - Added
Test-JiraCloudServerprivate function — thin boolean wrapper aroundGet-JiraServerInformationfor clean deployment type checks - Added
Invoke-PaginatedRequestprivate function — extracts pagination fromInvoke-JiraMethodand adds token-based pagination support for API v3 - Added HTTP 429 rate limit handling in
Test-ServerResponsewith automatic retry via recursion inInvoke-JiraMethod(respectsRetry-Afterheader, exponential backoff) - Added Jira Cloud compatibility — the module now auto-detects Cloud vs Data Center/Server via
Get-JiraServerInformationand adapts API calls accordingly - Added
-AccountIdparameter toGet-JiraUserfor Cloud's account-based user lookup - Added Cloud deployment test contexts across test files to cover both Server and Cloud code paths
- Added "Jira Cloud vs Data Center" section to the authentication documentation
⚙️ Changed
- Modernized test infrastructure and standardized helper utilities (#549, [@copilot])
- Removed redundant
-Scope Itfrom all test assertions (#562, [@lipkau]) - Simplified
Should -Invokeassertions in attachment tests (#563, [@lipkau]) - Added
-ExpectedMessageto all bareShould -Throwassertions (#564, [@lipkau]) - Used
-ErrorVariableto inspect non-terminating error inRemove-JiraIssuetest (#565, [@lipkau]) - Bumped
actions/upload-artifactfrom 6 to 7 (#557) - Bumped
actions/download-artifactfrom 7 to 8 (#559) - Bumped
dawidd6/action-download-artifactfrom 12 to 19 (#560, #561) Get-JiraServerInformationnow caches its result in module scope; subsequent calls return cached data (cleared onSet-JiraConfigServeror with-Force)ConvertTo-JiraServerInfodefaultsDeploymentTypetoServerwhen the field is absent (old Jira Server versions)Invoke-JiraMethoddelegates pagination toInvoke-PaginatedRequestTest-ServerResponsenow handles HTTP 429 rate limit detection with backoff and sleepGet-JiraUseruses?query=for search and?accountId=for exact lookup on Cloud;?username=on Data CenterSet-JiraUserandRemove-JiraUseruse?accountId=on CloudNew-JiraIssuereporter field uses@{ accountId = ... }on CloudSet-JiraIssueandInvoke-JiraIssueTransitionassignee fields use@{ accountId = ... }on CloudAdd-JiraGroupMemberPOST body uses@{ accountId = ... }on CloudRemove-JiraGroupMemberuses&accountId=query parameter on CloudAdd-JiraIssueWatcherandRemove-JiraIssueWatcheruseaccountIdon CloudGet-JiraIssueJQL search uses/rest/api/3/search/jqlwith token-based pagination on CloudGet-JiraIssueWatchernow pipes watchers throughConvertTo-JiraUserfor consistent typed outputConvertTo-JiraUser.ToString()falls back toDisplayNameorAccountIdwhenNameis empty (GDPR compliance)Resolve-JiraUserroutes byaccountIdpattern on Cloud- All deployment type checks use
Test-JiraCloudServerinstead of inline(Get-JiraServerInformation).DeploymentTypecalls