一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
417 行
32 KiB
JSON
417 行
32 KiB
JSON
{
|
||
"issue": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/14317",
|
||
"repository_url": "https://api.github.com/repos/laurent22/joplin",
|
||
"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14317/labels{/name}",
|
||
"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14317/comments",
|
||
"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14317/events",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14317",
|
||
"id": 3917756705,
|
||
"node_id": "PR_kwDOBLftOs7Cjc_h",
|
||
"number": 14317,
|
||
"title": "Desktop: Resolves #13794: Add Close Window shortcut and menu item on Windows/Linux",
|
||
"user": {
|
||
"login": "him2him2",
|
||
"id": 10393491,
|
||
"node_id": "MDQ6VXNlcjEwMzkzNDkx",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/10393491?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/him2him2",
|
||
"html_url": "https://github.com/him2him2",
|
||
"followers_url": "https://api.github.com/users/him2him2/followers",
|
||
"following_url": "https://api.github.com/users/him2him2/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/him2him2/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/him2him2/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/him2him2/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/him2him2/orgs",
|
||
"repos_url": "https://api.github.com/users/him2him2/repos",
|
||
"events_url": "https://api.github.com/users/him2him2/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/him2him2/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"labels": [],
|
||
"state": "closed",
|
||
"locked": false,
|
||
"assignees": [],
|
||
"milestone": null,
|
||
"comments": 4,
|
||
"created_at": "2026-02-09T19:15:46Z",
|
||
"updated_at": "2026-02-10T10:59:26Z",
|
||
"closed_at": "2026-02-10T10:14:29Z",
|
||
"assignee": null,
|
||
"author_association": "CONTRIBUTOR",
|
||
"active_lock_reason": null,
|
||
"draft": false,
|
||
"pull_request": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/pulls/14317",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14317",
|
||
"diff_url": "https://github.com/laurent22/joplin/pull/14317.diff",
|
||
"patch_url": "https://github.com/laurent22/joplin/pull/14317.patch",
|
||
"merged_at": "2026-02-10T10:14:28Z"
|
||
},
|
||
"body": "## Summary\n\nOn macOS, secondary windows (opened via \"Open note in new window\") can be closed with `Cmd+W` using the existing \"Close Window\" menu item. On Windows and Linux, there is no equivalent keyboard shortcut or menu item, making it impossible to close secondary windows without window decorations (common on tiling window managers).\n\nThis PR adds:\n- A **`Ctrl+W` keyboard shortcut** mapped to `closeWindow` in the Windows/Linux default keymap\n- A **\"Close Window\" menu item** in the File menu on Windows/Linux\n\nThe shortcut and menu item close whichever window is currently focused. For secondary windows, this closes the window. For the main window, this follows the existing platform behavior (hide to tray if tray icon is shown or secondary windows exist, otherwise quit).\n\n## How it works\n\nThe implementation leverages the existing `closeWindow` infrastructure that was already in place for macOS:\n\n1. **KeymapService default keymaps** (`packages/lib/services/KeymapService.ts`): Added `{ accelerator: 'Ctrl+W', command: 'closeWindow' }` to the `default` (Windows/Linux) keymap array. The macOS keymap already has `Cmd+W` mapped to `closeWindow`.\n\n2. **File menu** (`packages/app-desktop/gui/MenuBar.tsx`): Added a \"Close Window\" menu item to the Windows/Linux File menu, placed between the profiles section and the quit section. The click handler calls `bridge().activeWindow()?.close()`, which returns `BrowserWindow.getFocusedWindow()` and triggers the existing close event handlers:\n - **Secondary windows**: The `window.once('close')` handler in `ElectronAppWrapper.ts` removes the window from tracking, and the React Portal cleanup dispatches the `WINDOW_CLOSE` Redux action to clean up state.\n - **Main window**: The `win_.on('close')` handler in `ElectronAppWrapper.ts` applies the existing platform-specific behavior (hide if tray or secondary windows exist, otherwise initiate quit).\n\n3. **Automated tests** (`packages/lib/services/KeymapService.test.js`): Added assertions verifying `closeWindow` returns `Ctrl+W` on Linux and Win32, and `Cmd+W` on macOS.\n\nNo new files were created. No new commands were added to the CommandService — `closeWindow` follows the same pattern as `quit`, `hideApp`, and `minimizeWindow`, which are keymap-only entries handled directly as menu items.\n\n## Manual testing plan\n\nSince the MenuBar component has no existing test infrastructure, the following manual tests should be performed on Windows or Linux:\n\n### Feature tests\n\n1. **Secondary window — keyboard shortcut**: Open a note in a new window (`Ctrl+Alt+N`). Focus the secondary window. Press `Ctrl+W`. **Expected**: The secondary window closes. The main window remains open with its original note.\n\n2. **Secondary window — menu item**: Open a note in a new window. Focus the secondary window. Click File > Close Window. **Expected**: The secondary window closes.\n\n3. **Multiple secondary windows**: Open two notes in separate new windows. Close one with `Ctrl+W`. **Expected**: Only the focused secondary window closes. The other secondary window and the main window remain.\n\n4. **Main window with tray icon**: Enable the tray icon (Options > Appearance > Show tray icon). Focus the main window. Press `Ctrl+W`. **Expected**: The main window hides to the tray. The app continues running.\n\n5. **Main window with secondary windows open**: Open a secondary window. Focus the main window. Press `Ctrl+W`. **Expected**: The main window hides. The secondary window remains visible.\n\n6. **Main window alone**: Ensure no tray icon and no secondary windows. Press `Ctrl+W`. **Expected**: The application quits.\n\n7. **Shortcut customization**: Go to Options > Keyboard Shortcuts. Verify `closeWindow` appears with `Ctrl+W` as default. Change it. **Expected**: The new shortcut works; `Ctrl+W` no longer does.\n\n### Regression tests\n\n8. **macOS unchanged**: `Cmd+W` still works. The new menu item is not visible on macOS.\n9. **Quit shortcut**: `Ctrl+Q` still quits the application.\n10. **Open in new window**: `Ctrl+Alt+N` still opens notes in a new window.\n11. **Editor shortcuts**: `Ctrl+C`, `Ctrl+V`, `Ctrl+Z`, `Ctrl+B`, etc. still work. No conflict with `Ctrl+W`.\n\n## Notes\n\n- The test file `KeymapService.test.js` is JavaScript. Per the coding style guide, JS files should ideally be converted to TypeScript before modification. Since this PR adds only 3 assertions to an existing 345-line test file, converting the entire file would be out of scope for this PR.\n- KosmKero volunteered to work on this issue on Jan 1, but no PR has been submitted in over 5 weeks and the issue remains unassigned.\n\nResolves #13794\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n * Added a Close Window menu option in the File menu for Windows and Linux users.\n * Implemented keyboard shortcuts for closing windows: Ctrl+W on Windows/Linux and Cmd+W on macOS.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->",
|
||
"closed_by": {
|
||
"login": "laurent22",
|
||
"id": 1285584,
|
||
"node_id": "MDQ6VXNlcjEyODU1ODQ=",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/laurent22",
|
||
"html_url": "https://github.com/laurent22",
|
||
"followers_url": "https://api.github.com/users/laurent22/followers",
|
||
"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/laurent22/orgs",
|
||
"repos_url": "https://api.github.com/users/laurent22/repos",
|
||
"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/laurent22/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/14317/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"timeline_url": "https://api.github.com/repos/laurent22/joplin/issues/14317/timeline",
|
||
"performed_via_github_app": null,
|
||
"state_reason": null
|
||
},
|
||
"comments": [
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3873416194",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14317#issuecomment-3873416194",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14317",
|
||
"id": 3873416194,
|
||
"node_id": "IC_kwDOBLftOs7m36QC",
|
||
"user": {
|
||
"login": "coderabbitai[bot]",
|
||
"id": 136622811,
|
||
"node_id": "BOT_kgDOCCSy2w",
|
||
"avatar_url": "https://avatars.githubusercontent.com/in/347564?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/coderabbitai%5Bbot%5D",
|
||
"html_url": "https://github.com/apps/coderabbitai",
|
||
"followers_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/followers",
|
||
"following_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/orgs",
|
||
"repos_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/repos",
|
||
"events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/received_events",
|
||
"type": "Bot",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-09T19:16:39Z",
|
||
"updated_at": "2026-02-09T19:34:59Z",
|
||
"body": "<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n## Walkthrough\n\nChanges add a Close Window menu item to the File menu for non-macOS platforms and introduce a Ctrl+W keyboard shortcut (Cmd+W on macOS) to enable closing secondary windows. Includes corresponding test assertions for the keyboard shortcut mappings across platforms.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Menu UI** <br> `packages/app-desktop/gui/MenuBar.tsx`|Adds a separator and Close Window menu item with accelerator and click handler to the File menu for non-macOS platforms.|\n|**Keyboard Shortcut Configuration** <br> `packages/lib/services/KeymapService.ts`, `packages/lib/services/KeymapService.test.js`|Defines new default keyboard shortcut for closeWindow (Ctrl+W on Linux/Windows) and adds platform-specific test assertions verifying the accelerator mappings (Cmd+W on macOS, Ctrl+W on other platforms).|\n\n## Estimated code review effort\n\n🎯 2 (Simple) | ⏱️ ~12 minutes\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n<details>\n<summary>❌ Failed checks (1 warning)</summary>\n\n| Check name | Status | Explanation | Resolution |\n| :----------------: | :--------- | :----------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n</details>\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n| Check name | Status | Explanation |\n| :------------------------: | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled. |\n| Title check | ✅ Passed | The title accurately describes the main change: adding a Close Window shortcut and menu item on Windows/Linux platforms to resolve issue `#13794`. |\n| Linked Issues check | ✅ Passed | All coding requirements from issue `#13794` are met: Ctrl+W keyboard shortcut added for Windows/Linux, Close Window menu item added, and automated tests verify the shortcuts. |\n| Out of Scope Changes check | ✅ Passed | All changes are directly related to resolving issue `#13794`: keyboard shortcut mapping, menu item implementation, and corresponding tests remain in scope. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} --> Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} --> Post copyable unit tests in a comment\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n\n---\n\nNo actionable comments were generated in the recent review. 🎉\n\n<details>\n<summary>🧹 Recent nitpick comments</summary><blockquote>\n\n<details>\n<summary>packages/app-desktop/gui/MenuBar.tsx (1)</summary><blockquote>\n\n`618-628`: **Route “Close Window” through the command for consistency.**\n\nDirectly calling `activeWindow().close()` bypasses the `closeWindow` command pipeline. Using CommandService keeps behaviour aligned with the shortcut and any future command hooks. \n\n\n<details>\n<summary>Proposed tweak</summary>\n\n```diff\n \t\t\t\tshim.isMac() ? noItem : {\n \t\t\t\t\tlabel: _('Close Window'),\n \t\t\t\t\taccelerator: keymapService.getAccelerator('closeWindow'),\n \t\t\t\t\tclick: () => {\n-\t\t\t\t\t\tbridge().activeWindow()?.close();\n+\t\t\t\t\t\tvoid CommandService.instance().execute('closeWindow');\n \t\t\t\t\t},\n \t\t\t\t},\n```\n</details>\n\n</blockquote></details>\n\n</blockquote></details>\n\n<!-- tips_start -->\n\n---\n\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->",
|
||
"author_association": "CONTRIBUTOR",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3873416194/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": {
|
||
"id": 347564,
|
||
"client_id": "Iv1.6aaafe4fe882736b",
|
||
"slug": "coderabbitai",
|
||
"node_id": "A_kwHOB96YWc4ABU2s",
|
||
"owner": {
|
||
"login": "coderabbitai",
|
||
"id": 132028505,
|
||
"node_id": "O_kgDOB96YWQ",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/132028505?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/coderabbitai",
|
||
"html_url": "https://github.com/coderabbitai",
|
||
"followers_url": "https://api.github.com/users/coderabbitai/followers",
|
||
"following_url": "https://api.github.com/users/coderabbitai/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/coderabbitai/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/coderabbitai/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/coderabbitai/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/coderabbitai/orgs",
|
||
"repos_url": "https://api.github.com/users/coderabbitai/repos",
|
||
"events_url": "https://api.github.com/users/coderabbitai/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/coderabbitai/received_events",
|
||
"type": "Organization",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"name": "coderabbitai",
|
||
"description": "# Transforming Code Reviews with AI\r\n\r\n## Features\r\n\r\n**Automated Reviews**: Continuous reviews of the pull requests including incremental commits. \r\n\r\n**Summarization**: Generates high-level summary and a technical walkthrough of the PR changes. \r\n\r\n**Line-by-line review**: Provides line-by-line suggestions committable with one click.\r\n\r\n**Codebase verification**: Verifies the impact on the overall codebase and identifies missing changes.\r\n\r\n**Insights into your code**: Ask any questions on your codebase within the pull request \r\n\r\n**Chat about your code** : Chat with the bot around your code. The more you chat, the smarter it gets.\r\n\r\n**Issue Validation**: Validates the PR against the linked issues and identifies other related issues \r\n\r\n\r\n\r\n",
|
||
"external_url": "https://coderabbit.ai?utm_source=cr_app&utm_medium=github",
|
||
"html_url": "https://github.com/apps/coderabbitai",
|
||
"created_at": "2023-06-14T15:47:27Z",
|
||
"updated_at": "2026-03-14T07:58:44Z",
|
||
"permissions": {
|
||
"actions": "read",
|
||
"checks": "write",
|
||
"contents": "write",
|
||
"discussions": "read",
|
||
"issues": "write",
|
||
"members": "read",
|
||
"metadata": "read",
|
||
"pull_requests": "write",
|
||
"statuses": "write"
|
||
},
|
||
"events": [
|
||
"issues",
|
||
"issue_comment",
|
||
"label",
|
||
"organization",
|
||
"pull_request",
|
||
"pull_request_review",
|
||
"pull_request_review_comment",
|
||
"pull_request_review_thread",
|
||
"release",
|
||
"repository"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3873610966",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14317#issuecomment-3873610966",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14317",
|
||
"id": 3873610966,
|
||
"node_id": "IC_kwDOBLftOs7m4pzW",
|
||
"user": {
|
||
"login": "him2him2",
|
||
"id": 10393491,
|
||
"node_id": "MDQ6VXNlcjEwMzkzNDkx",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/10393491?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/him2him2",
|
||
"html_url": "https://github.com/him2him2",
|
||
"followers_url": "https://api.github.com/users/him2him2/followers",
|
||
"following_url": "https://api.github.com/users/him2him2/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/him2him2/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/him2him2/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/him2him2/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/him2him2/orgs",
|
||
"repos_url": "https://api.github.com/users/him2him2/repos",
|
||
"events_url": "https://api.github.com/users/him2him2/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/him2him2/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-09T20:15:18Z",
|
||
"updated_at": "2026-02-09T20:15:18Z",
|
||
"body": "recheck",
|
||
"author_association": "CONTRIBUTOR",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3873610966/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": null
|
||
},
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3874139759",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14317#issuecomment-3874139759",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14317",
|
||
"id": 3874139759,
|
||
"node_id": "IC_kwDOBLftOs7m6q5v",
|
||
"user": {
|
||
"login": "github-actions[bot]",
|
||
"id": 41898282,
|
||
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||
"html_url": "https://github.com/apps/github-actions",
|
||
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||
"type": "Bot",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-09T22:11:25Z",
|
||
"updated_at": "2026-02-10T10:59:26Z",
|
||
"body": "****CLA Assistant Lite bot**** All contributors have signed the CLA ✍️ ✅",
|
||
"author_association": "CONTRIBUTOR",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3874139759/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": {
|
||
"id": 15368,
|
||
"client_id": "Iv1.05c79e9ad1f6bdfa",
|
||
"slug": "github-actions",
|
||
"node_id": "MDM6QXBwMTUzNjg=",
|
||
"owner": {
|
||
"login": "github",
|
||
"id": 9919,
|
||
"node_id": "MDEyOk9yZ2FuaXphdGlvbjk5MTk=",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/9919?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/github",
|
||
"html_url": "https://github.com/github",
|
||
"followers_url": "https://api.github.com/users/github/followers",
|
||
"following_url": "https://api.github.com/users/github/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/github/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/github/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/github/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/github/orgs",
|
||
"repos_url": "https://api.github.com/users/github/repos",
|
||
"events_url": "https://api.github.com/users/github/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/github/received_events",
|
||
"type": "Organization",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"name": "GitHub Actions",
|
||
"description": "Automate your workflow from idea to production",
|
||
"external_url": "https://help.github.com/en/actions",
|
||
"html_url": "https://github.com/apps/github-actions",
|
||
"created_at": "2018-07-30T09:30:17Z",
|
||
"updated_at": "2026-05-05T14:51:38Z",
|
||
"permissions": {
|
||
"actions": "write",
|
||
"administration": "read",
|
||
"artifact_metadata": "write",
|
||
"attestations": "write",
|
||
"checks": "write",
|
||
"code_quality": "write",
|
||
"contents": "write",
|
||
"copilot_requests": "write",
|
||
"deployments": "write",
|
||
"discussions": "write",
|
||
"issues": "write",
|
||
"merge_queues": "write",
|
||
"metadata": "read",
|
||
"models": "read",
|
||
"packages": "write",
|
||
"pages": "write",
|
||
"pull_requests": "write",
|
||
"repository_hooks": "write",
|
||
"repository_projects": "write",
|
||
"security_events": "write",
|
||
"statuses": "write",
|
||
"vulnerability_alerts": "read"
|
||
},
|
||
"events": [
|
||
"branch_protection_rule",
|
||
"check_run",
|
||
"check_suite",
|
||
"create",
|
||
"delete",
|
||
"deployment",
|
||
"deployment_status",
|
||
"discussion",
|
||
"discussion_comment",
|
||
"fork",
|
||
"gollum",
|
||
"issues",
|
||
"issue_comment",
|
||
"label",
|
||
"merge_group",
|
||
"milestone",
|
||
"page_build",
|
||
"public",
|
||
"pull_request",
|
||
"pull_request_review",
|
||
"pull_request_review_comment",
|
||
"push",
|
||
"registry_package",
|
||
"release",
|
||
"repository",
|
||
"repository_dispatch",
|
||
"status",
|
||
"watch",
|
||
"workflow_dispatch",
|
||
"workflow_run"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3874140823",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14317#issuecomment-3874140823",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14317",
|
||
"id": 3874140823,
|
||
"node_id": "IC_kwDOBLftOs7m6rKX",
|
||
"user": {
|
||
"login": "him2him2",
|
||
"id": 10393491,
|
||
"node_id": "MDQ6VXNlcjEwMzkzNDkx",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/10393491?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/him2him2",
|
||
"html_url": "https://github.com/him2him2",
|
||
"followers_url": "https://api.github.com/users/him2him2/followers",
|
||
"following_url": "https://api.github.com/users/him2him2/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/him2him2/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/him2him2/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/him2him2/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/him2him2/orgs",
|
||
"repos_url": "https://api.github.com/users/him2him2/repos",
|
||
"events_url": "https://api.github.com/users/him2him2/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/him2him2/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-09T22:11:41Z",
|
||
"updated_at": "2026-02-09T22:11:41Z",
|
||
"body": "I have read the CLA Document and I hereby sign the CLA",
|
||
"author_association": "CONTRIBUTOR",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3874140823/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": null
|
||
}
|
||
]
|
||
} |