forgejo-contrib-forgejo-cli-pulls-241.md
Watch20
Star402
Fork
You've already forked forgejo-cli
CodeIssues 44Pull requests 8Releases 11Packages 2WikiActivity
Merged
Cyborusmerged 1 commit from LordMZTE/forgejo-cli:key-commands into main 2025-11-27 02:31:03 +01:00
Conversation 2Commits 1Files changed 2 +583 -1
LordMZTE commented 2025-11-23 14:50:18 +01:00
Collaborator
Copy link
This adds support for managing SSH and GPG keys.
This is marked as WIP for now because we first need to wait for a forgejo-api update.
See the comment at the bottom of user.rs for more info.
Closes #234
#Sample Output for SSH
$ fj -H codeberg.org user keys list
total keys: 5
37270 lordmzte@mzte SHA256:VwY0sYXAQHfsbQPS1EURnaFTqqQ5UbvCgHOF0q72xkk
40624 lordmzte@mzte-deck SHA256:GWA/eVJIhEUJNJB63xm9ssJl61+A6DgRZe/Qpkk41Kg
42949 lordmzte@zephyarch SHA256:9TZctETMtmKDJTst8OBueyk64mOrW+s+emaB52ylG6E
63043 lordmzte@mzte-fw SHA256:/3j46causzN6ujVcH3LiSup/2w0+efeU3NXVTMbL/Lw
179508 lordmzte@mzte-ef SHA256:KdSTAMu+YCLRUCDzI2QoXwbkrwzSTWFodBNYbYLMTa8
$ fj -H codeberg.org user key view 63043
Title: lordmzte@mzte-fw
Created At: 2025-02-12 19:01:14.0 +01:00:00
Type: user
Fingerprint: SHA256:/3j46causzN6ujVcH3LiSup/2w0+efeU3NXVTMbL/Lw
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO8TPm9SwC+OqZbS+MDiYHpO7RubBfZkmXokwRCUanDz lordmzte@mzte-fw
$ fj -H codeberg.org user key delete 42949
successfully deleted key with ID 42949
$ fj -H codeberg.org user key add
Guessed key file: /home/lordmzte/.ssh/id_ed25519.pub
Does this look good? [y/N]: y
Guessed title: lordmzte@mzte-ef
Does this look good? [y/N]: y
Key created successfully!
Title: lordmzte@mzte-ef
Created At: 2025-11-23 11:53:00.0 +01:00:00
Type: user
Fingerprint: SHA256:KdSTAMu+YCLRUCDzI2QoXwbkrwzSTWFodBNYbYLMTa8
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICEjc2J3rmKe7+Hs65Rl11s6iebs0z7BMFnHyf64zC2S lordmzte@mzte-ef
$ fj -H codeberg.org user key add ~/.ssh/id_ed25519
Error: '/home/lordmzte/.ssh/id_ed25519' looks like a private key or invalid data! If you want to proceed anyways, add --force.
Location:
src/user.rs:1268:9
#Sample Output for GPG
$ fj -H codeberg.org user gpg list
total keys: 1
11884 B64802DC33A64FF6
$ fj -H codeberg user gpg view 11884
Key ID: B64802DC33A64FF6
Can Sign: true
Can Encrypt Comms: true
Can Encrypt Storage: true
Can Certify: true
Verified: true
xsDNBGH0QpABDADFs5L9c/VWcKIALrQRwD4zue3eEALG8HDlGvbN55QEjnXbjYdFPsdmfP2vJotez2sDDcNwcqraK492XXqe8BOmrrsQLZcP0QwZ0lXpGNlC/TC/Pwyy84IzJrsK0OAaV64oNBNj67KSQ0B36wxIQR7SgmY2bR9W8vn2H8bQ3O+UZjXxq2BZhSY6ViUraRNZStY6xIvAWS8YeRgXgy38F2XLQOJVmSnKeRSAtk0fPJ3FkbEBlvvbYOucVR73PuYhzo0H4ldPTkzoIWy1uJeuu4gKd/JcR21/dEGiCYKeeGYNxl422a2CL3KzM+m6t0HeCILNoK2dH2TJBPx/x7QDklOMyjsaw3TsX17Q3lnHzbQA1iOXSL+77ni25IfPOME16cLj5E9U2Ult6WjmxehKTmmo3CeD2SoSkLI6Ux+pyQBFFjnt1JoKCf+Pw0n+AKlACzEQD12mr9aMY5b1C1KRJDyLKWVBMvswjJr3MBE0KxwS8hQEse+efGNXPJGtnmEmnd8AEQEAAQ==
Subkey 11884:
Key ID: C9921A9FFFB36629
Can Sign: true
Can Encrypt Comms: true
Can Encrypt Storage: true
Can Certify: true
Verified: false
zsDNBGH0QpABDADkjujCLyljg9tpyDkce7QH009duGt+iDuvhKXRgW6U+40wDlQ+h0kzyciRLekyV94NuHbtvNmfY1Z6G3VPYH6aK+m5Hg3vWqtI+FmUPzZDXQ62UC4ZXWUY85mPhnZ/kEBOY4pnJqwyMEODt62Pk7Wj28JBD0TGBRIvUvL6GmQKmoHhGaF/ZDO5HKRob7h40CtS3139KG7pZwBvMvNJgyaZH51o7ixR4urnLqSWSzyGHnl/prGuCPXA/uvVF/mkMAyZEhX1dNGnHFlTbtG9ImZqFAjCvurfHdpytRSP5ZZENJ8TBzO+i2gcrx0ODFcsb8mPZZsxqsO2oAhj5vXiXvzBF2hYV4Kow0zR+SMbTtlWoSzETAE7ytITNy5ah6RpTj/kt+mCox0ZaFER8scSwyGeaaiWZhL65pFTAMR4EVSQTB8GzYfzn1tg4wJ93jl2EARvb6y+exYCzniiKn7WT0DcljyUZjSVG8MqhmSmAk6T4RQS54F9tcvBpJ7B8Zn6NosAEQEAAQ==
$ fj -H codeberg.org user gpg delete 65874
Deleting a GPG key will cause all commits signed by that key to become unverified! Continue? [y/N]: y
Key with ID 65874 deleted successfully.
$ fj -H codeberg.org user gpg add test@test
Exporting key...
Fetching verification token...
Signing verification token with key 'test@test'...
gpg: using "test@test" as default secret key for signing
Key successfully added!
Key ID: 5AF56892199B0572
Can Sign: true
Can Encrypt Comms: true
Can Encrypt Storage: true
Can Certify: true
Verified: true
xsDNBGki97YBDADus4vDcc64JCYBfBUgWUHSWchNSgkDH5V8bTx6TvuP0WRJ0rlPNOfQ0XTiXOg7jZyKOu2fKLICrUnQo/J4CRuQoyC6/Va3jxBfdhk/EkwbWfNbkV/mTnjKx/n0cfHCAy2NzOlg9tOWzaZZ57lcijrfC4KAcN73s5naXHilmtE5JXMBDckhAQs7/fto8IhSXUQfA6wA0xrM+RTXSc3QPdJ1aqjUoMAwH9xyBAb2p6+zQMD5BjDz1flSAv9IMyDGGoRr9R6lqFuhTDVr7k/HT3RnZBSvBTmrPnq1JEz+2ZoKoCVHQM4HXDZzb02+Uip/JBBlQudFLIIZL9GLh5ICB79SJPmcNLkKf1Z4XXzQm6xrqR7Iz1TY/krC6vbXNxnALH4X34+VK8piIBAJK0WqGzpK076pFeAWi3lDDdZn4HDqHXCpc5ae5Xe+zXNsvomwVEWTzxk4M+SUScWfKsqo5rH/YQQsVlYYm03eW8UXoX7+HWd0x99gUXrQZ1rfXZeVWMsAEQEAAQ==
Subkey 65916:
Key ID: 1131B27377353B4B
Can Sign: true
Can Encrypt Comms: true
Can Encrypt Storage: true
Can Certify: true
Verified: false
zsDNBGki97YBDADIMDihvM0UK2YhQu2Gu/KrPvGpZnijA2ibGL4iFcO9/CckVsFj129fisg7yVZwNfoXSyGJjOgTGtoL1df+TwjCrCTkD2iz2s9OAA/70b1CrzsTTYp9yp/TwuIzHesDoGXSmOERVbjQyP20ha3VeLF1IbCPj0zt9beGLseWRWSWUC7buutwx7tVqQN9Te5HVOk4by2NPbJgNZj1BjhpYrC9P2bG/qVGr/Rz1MESKvv17RWn7PVEMPxqPh/5VbELX4oTRU4AUFC+N3Y/HAeqG0+G1Gk98pfk1gB6EppmlfPFVVoW//8Z9CC5eWRMEZHqEqrNhGr1WuooSqYjMWvYBrI/6qSTTK6KGSOcuLaD24K4ihkLmWzvS6gXDZC0eitToMQw0OkFgubKBdtrJbIEryOSL4HYCC1tME57xvL+aB78mDAJtBXE3aee0pTLpOdcK+X+07way6fUk4Rl70/ySkmHvDWP81e0I2iFMtXY+bhLqpXWUyWBTA7RdMApVIpuqSEAEQEAAQ==
This adds support for managing SSH and GPG keys. This is marked as WIP for now because we first need to wait for a forgejo-api update. See the comment at the bottom of user.rs for more info. Closes #234 <details> <summary>Sample Output for SSH</summary> $ fj -H codeberg.org user keys list total keys: 5 37270 lordmzte@mzte SHA256:VwY0sYXAQHfsbQPS1EURnaFTqqQ5UbvCgHOF0q72xkk 40624 lordmzte@mzte-deck SHA256:GWA/eVJIhEUJNJB63xm9ssJl61+A6DgRZe/Qpkk41Kg 42949 lordmzte@zephyarch SHA256:9TZctETMtmKDJTst8OBueyk64mOrW+s+emaB52ylG6E 63043 lordmzte@mzte-fw SHA256:/3j46causzN6ujVcH3LiSup/2w0+efeU3NXVTMbL/Lw 179508 lordmzte@mzte-ef SHA256:KdSTAMu+YCLRUCDzI2QoXwbkrwzSTWFodBNYbYLMTa8 $ fj -H codeberg.org user key view 63043 Title: lordmzte@mzte-fw Created At: 2025-02-12 19:01:14.0 +01:00:00 Type: user Fingerprint: SHA256:/3j46causzN6ujVcH3LiSup/2w0+efeU3NXVTMbL/Lw ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO8TPm9SwC+OqZbS+MDiYHpO7RubBfZkmXokwRCUanDz lordmzte@mzte-fw $ fj -H codeberg.org user key delete 42949 successfully deleted key with ID 42949 $ fj -H codeberg.org user key add Guessed key file: /home/lordmzte/.ssh/id_ed25519.pub Does this look good? [y/N]: y Guessed title: lordmzte@mzte-ef Does this look good? [y/N]: y Key created successfully! Title: lordmzte@mzte-ef Created At: 2025-11-23 11:53:00.0 +01:00:00 Type: user Fingerprint: SHA256:KdSTAMu+YCLRUCDzI2QoXwbkrwzSTWFodBNYbYLMTa8 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICEjc2J3rmKe7+Hs65Rl11s6iebs0z7BMFnHyf64zC2S lordmzte@mzte-ef $ fj -H codeberg.org user key add ~/.ssh/id_ed25519 Error: '/home/lordmzte/.ssh/id_ed25519' looks like a private key or invalid data! If you want to proceed anyways, add --force. Location: src/user.rs:1268:9 </details> <details> <summary>Sample Output for GPG</summary> $ fj -H codeberg.org user gpg list total keys: 1 11884 B64802DC33A64FF6 $ fj -H codeberg user gpg view 11884 Key ID: B64802DC33A64FF6 Can Sign: true Can Encrypt Comms: true Can Encrypt Storage: true Can Certify: true Verified: true xsDNBGH0QpABDADFs5L9c/VWcKIALrQRwD4zue3eEALG8HDlGvbN55QEjnXbjYdFPsdmfP2vJotez2sDDcNwcqraK492XXqe8BOmrrsQLZcP0QwZ0lXpGNlC/TC/Pwyy84IzJrsK0OAaV64oNBNj67KSQ0B36wxIQR7SgmY2bR9W8vn2H8bQ3O+UZjXxq2BZhSY6ViUraRNZStY6xIvAWS8YeRgXgy38F2XLQOJVmSnKeRSAtk0fPJ3FkbEBlvvbYOucVR73PuYhzo0H4ldPTkzoIWy1uJeuu4gKd/JcR21/dEGiCYKeeGYNxl422a2CL3KzM+m6t0HeCILNoK2dH2TJBPx/x7QDklOMyjsaw3TsX17Q3lnHzbQA1iOXSL+77ni25IfPOME16cLj5E9U2Ult6WjmxehKTmmo3CeD2SoSkLI6Ux+pyQBFFjnt1JoKCf+Pw0n+AKlACzEQD12mr9aMY5b1C1KRJDyLKWVBMvswjJr3MBE0KxwS8hQEse+efGNXPJGtnmEmnd8AEQEAAQ== Subkey 11884: Key ID: C9921A9FFFB36629 Can Sign: true Can Encrypt Comms: true Can Encrypt Storage: true Can Certify: true Verified: false zsDNBGH0QpABDADkjujCLyljg9tpyDkce7QH009duGt+iDuvhKXRgW6U+40wDlQ+h0kzyciRLekyV94NuHbtvNmfY1Z6G3VPYH6aK+m5Hg3vWqtI+FmUPzZDXQ62UC4ZXWUY85mPhnZ/kEBOY4pnJqwyMEODt62Pk7Wj28JBD0TGBRIvUvL6GmQKmoHhGaF/ZDO5HKRob7h40CtS3139KG7pZwBvMvNJgyaZH51o7ixR4urnLqSWSzyGHnl/prGuCPXA/uvVF/mkMAyZEhX1dNGnHFlTbtG9ImZqFAjCvurfHdpytRSP5ZZENJ8TBzO+i2gcrx0ODFcsb8mPZZsxqsO2oAhj5vXiXvzBF2hYV4Kow0zR+SMbTtlWoSzETAE7ytITNy5ah6RpTj/kt+mCox0ZaFER8scSwyGeaaiWZhL65pFTAMR4EVSQTB8GzYfzn1tg4wJ93jl2EARvb6y+exYCzniiKn7WT0DcljyUZjSVG8MqhmSmAk6T4RQS54F9tcvBpJ7B8Zn6NosAEQEAAQ== $ fj -H codeberg.org user gpg delete 65874 Deleting a GPG key will cause all commits signed by that key to become unverified! Continue? [y/N]: y Key with ID 65874 deleted successfully. $ fj -H codeberg.org user gpg add test@test Exporting key... Fetching verification token... Signing verification token with key 'test@test'... gpg: using "test@test" as default secret key for signing Key successfully added! Key ID: 5AF56892199B0572 Can Sign: true Can Encrypt Comms: true Can Encrypt Storage: true Can Certify: true Verified: true xsDNBGki97YBDADus4vDcc64JCYBfBUgWUHSWchNSgkDH5V8bTx6TvuP0WRJ0rlPNOfQ0XTiXOg7jZyKOu2fKLICrUnQo/J4CRuQoyC6/Va3jxBfdhk/EkwbWfNbkV/mTnjKx/n0cfHCAy2NzOlg9tOWzaZZ57lcijrfC4KAcN73s5naXHilmtE5JXMBDckhAQs7/fto8IhSXUQfA6wA0xrM+RTXSc3QPdJ1aqjUoMAwH9xyBAb2p6+zQMD5BjDz1flSAv9IMyDGGoRr9R6lqFuhTDVr7k/HT3RnZBSvBTmrPnq1JEz+2ZoKoCVHQM4HXDZzb02+Uip/JBBlQudFLIIZL9GLh5ICB79SJPmcNLkKf1Z4XXzQm6xrqR7Iz1TY/krC6vbXNxnALH4X34+VK8piIBAJK0WqGzpK076pFeAWi3lDDdZn4HDqHXCpc5ae5Xe+zXNsvomwVEWTzxk4M+SUScWfKsqo5rH/YQQsVlYYm03eW8UXoX7+HWd0x99gUXrQZ1rfXZeVWMsAEQEAAQ== Subkey 65916: Key ID: 1131B27377353B4B Can Sign: true Can Encrypt Comms: true Can Encrypt Storage: true Can Certify: true Verified: false zsDNBGki97YBDADIMDihvM0UK2YhQu2Gu/KrPvGpZnijA2ibGL4iFcO9/CckVsFj129fisg7yVZwNfoXSyGJjOgTGtoL1df+TwjCrCTkD2iz2s9OAA/70b1CrzsTTYp9yp/TwuIzHesDoGXSmOERVbjQyP20ha3VeLF1IbCPj0zt9beGLseWRWSWUC7buutwx7tVqQN9Te5HVOk4by2NPbJgNZj1BjhpYrC9P2bG/qVGr/Rz1MESKvv17RWn7PVEMPxqPh/5VbELX4oTRU4AUFC+N3Y/HAeqG0+G1Gk98pfk1gB6EppmlfPFVVoW//8Z9CC5eWRMEZHqEqrNhGr1WuooSqYjMWvYBrI/6qSTTK6KGSOcuLaD24K4ihkLmWzvS6gXDZC0eitToMQw0OkFgubKBdtrJbIEryOSL4HYCC1tME57xvL+aB78mDAJtBXE3aee0pTLpOdcK+X+07way6fUk4Rl70/ySkmHvDWP81e0I2iFMtXY+bhLqpXWUyWBTA7RdMApVIpuqSEAEQEAAQ== </details>
Cyborus commented 2025-11-23 23:49:40 +01:00
Member
Copy link
Merged !242, you should be good to rebase for the updated verification endpoint now
Merged !242, you should be good to rebase for the updated verification endpoint now
LordMZTE force-pushed key-commands from a296cb2f9d
All checks were successful
ci/woodpecker/pr/check Pipeline was successful
to 8c45b51a2d
All checks were successful
ci/woodpecker/pr/check Pipeline was successful
2025-11-24 09:46:41 +01:00 Compare
LordMZTE changed title from ** WIP: feat: SSH and GPG key commands ** to feat: SSH and GPG key commands 2025-11-24 09:47:23 +01:00
Cyborus requested changes 2025-11-25 20:06:52 +01:00 Dismissed
src/main.rs Outdated
Show resolved Hide resolved
| | | | @ -105,6 +105,30 @@ async fn readline(msg: &str) -> eyre::Result<String> { |
| | | | | .await? |
| | | | | } |
| | | | | |
| | | | | async fn prompt_bool(msg: &str, default_answer: bool) -> eyre::Result<bool> { |
Cyborus commented 2025-11-25 18:35:40 +01:00
Member
Copy link
I've been wondering if more interactivity should be added, in addition to taking CLI args. I'd ideally want some solution that makes it automatic, based on the Args fields, and only enabled with an --interactive/-I flag.
You don't need to worry about of that right now, just larger scale thoughts I'm having. This works fine for this :)
I've been wondering if more interactivity should be added, in addition to taking CLI args. I'd ideally want some solution that makes it automatic, based on the Args fields, and only enabled with an --interactive/-I flag. You don't need to worry about of that right now, just larger scale thoughts I'm having. This works fine for this :)
LordMZTE marked this conversation as resolved
src/user.rs Outdated
Show resolved Hide resolved
| | | | @ -171,0 +198,4 @@ |
| | | | | }, |
| | | | | |
| | | | | /// Add an SSH key |
| | | | | Add { |
Cyborus commented 2025-11-25 19:36:23 +01:00
Member
Copy link
I feel upload is a more fitting name for this.
I feel upload is a more fitting name for this.
LordMZTE marked this conversation as resolved
src/user.rs Outdated
Show resolved Hide resolved
| | | | @ -171,0 +244,4 @@ |
| | | | | /// Adds a new GPG key from your local keyring. |
| | | | | /// This command requiresgpgto be installed. |
| | | | | Add { |
| | | | | /// The key to add. This can be anything the GPG CLI recognizes such as an EMail associated |
Cyborus commented 2025-11-25 19:38:37 +01:00
Member
Copy link
Is EMail intentional? I would guess not, since you wrote emails just a few lines later. Either way I think it'd be good to make them consistent.
Is EMail intentional? I would guess not, since you wrote emails just a few lines later. Either way I think it'd be good to make them consistent.
LordMZTE commented 2025-11-26 10:39:10 +01:00
Author
Collaborator
Copy link
Which one would you prefer? I've never really been certain about what the canonical capitalization of "email" is.
Which one would you prefer? I've never really been certain about what the canonical capitalization of "email" is.
Cyborus commented 2025-11-26 15:13:24 +01:00
Member
Copy link
I'll go with "email", since it wasn't as surprising to see. It's what I see most frequently
I'll go with "email", since it wasn't as surprising to see. It's what I see most frequently
LordMZTE marked this conversation as resolved
src/user.rs Outdated
Show resolved Hide resolved
| | | | @ -1001,0 +1122,4 @@ |
| | | | | } = *crate::special_render(); |
| | | | | |
| | | | | let (forgejo_api::structs::PublicKeyListHeaders { x_total_count }, keys) = |
| | | | | api.user_current_list_keys(Default::default()).await?; |
Cyborus commented 2025-11-25 18:42:57 +01:00
Member
Copy link
This should either:
.all() right before the .await, i.e.api.user_current_list_keys(Default::default()).all().await?;
As it is currently it would only get the first 30 keys, which I would imagine is enough for most people, but best not to rely on that. .all() gets all of them.
or...
--page option, which is given to .page(...), and print the current page alongside the total count.I prefer option 1. I doubt most people would have enough keys added to their account for it to matter.
This should either: - have .all() right before the .await, i.e. rust api.user_current_list_keys(Default::default()).all().await?; As it is currently it would only get the first 30 keys, which I *would* imagine is enough for most people, but best not to rely on that. .all() gets all of them. **or...** - take a --page option, which is given to .page(...), and print the current page alongside the total count. I prefer option 1. I doubt most people would have enough keys added to their account for it to matter.
LordMZTE marked this conversation as resolved
src/user.rs Outdated
Show resolved Hide resolved
| | | | @ -1001,0 +1272,4 @@ |
| | | | | // |
| | | | | // Public keys are one-line and start with "ssh-", so we check for that. |
| | | | | let trimmed = content.trim(); |
| | | | | if !force && (!trimmed.starts_with("ssh-") || trimmed.contains('\n')) { |
Cyborus commented 2025-11-25 18:55:34 +01:00
Member
Copy link
I'd like to avoid reading a private key at all by requiring the file have the .pub extension. As little contact with private keys as possible!
I'd like to avoid reading a private key at all by requiring the file have the .pub extension. As little contact with private keys as possible!
LordMZTE marked this conversation as resolved
src/user.rs Outdated
Show resolved Hide resolved
| | | | @ -1001,0 +1276,4 @@ |
| | | | | bail!( |
| | | | | concat!( |
| | | | | "'{}' looks like a private key or invalid data!", |
| | | | | " If you want to proceed anyways, add --force." |
Cyborus commented 2025-11-25 18:57:04 +01:00
Member
Copy link
Is there ever any reason to force it through?
Is there ever any reason to force it through?
LordMZTE commented 2025-11-26 10:40:34 +01:00
Author
Collaborator
Copy link
Not sure, I just generally believe that software shouldn't ever try to be smarter than the user. There might exist an edge case which we couldn't possibly anticipate, so I like having these escape hatches.
Not sure, I just generally believe that software shouldn't ever try to be smarter than the user. There might exist an edge case which we couldn't possibly anticipate, so I like having these escape hatches.
Cyborus commented 2025-11-26 15:37:34 +01:00
Member
Copy link
Dug around on the server-side validation and, yeah, looks like there are such edge cases (apparently you can base64 encode your public keys? had no idea!)
--force can stay!
Dug around on the server-side validation and, yeah, looks like there are such edge cases (apparently you can base64 encode your public keys? had no idea!) --force can stay!
LordMZTE marked this conversation as resolved
src/user.rs Outdated
Show resolved Hide resolved
| | | | @ -1001,0 +1322,4 @@ |
| | | | | } = *crate::special_render(); |
| | | | | |
| | | | | let (forgejo_api::structs::GpgKeyListHeaders { x_total_count }, keys) = |
| | | | | api.user_current_list_gpg_keys().await?; |
Cyborus commented 2025-11-25 18:58:22 +01:00
Member
Copy link
Same thing with .all() or .page() as above.
Same thing with .all() or .page() as above.
LordMZTE marked this conversation as resolved
src/user.rs Outdated
Show resolved Hide resolved
| | | | @ -1001,0 +1450,4 @@ |
| | | | | .output() |
| | | | | .await?; |
| | | | | |
| | | | | if !key_output.status.success() { |
Cyborus commented 2025-11-25 20:00:40 +01:00
Member
Copy link
eyre::ensure can be used here instead (likewise in other similar places)
eyre::ensure can be used here instead (likewise in other similar places)
LordMZTE marked this conversation as resolved
LordMZTE force-pushed key-commands from 8c45b51a2d
All checks were successful
ci/woodpecker/pr/check Pipeline was successful
to a4c92f26b7
All checks were successful
ci/woodpecker/pr/check Pipeline was successful
2025-11-26 22:20:19 +01:00 Compare
LordMZTE requested review from Cyborus 2025-11-26 22:25:14 +01:00
Cyborus approved these changes 2025-11-27 02:30:53 +01:00
Cyborus left a comment
Copy link
Excellent, thank you! :D
Excellent, thank you! :D
Cyborus merged commit 3f25bed845 into main 2025-11-27 02:31:03 +01:00
Cyborus referenced this pull request from a commit 2025-11-27 02:31:05 +01:00 Merge pull request 'feat: SSH and GPG key commands' (#241) from LordMZTE/forgejo-cli:key-commands into main
LordMZTE deleted branch key-commands 2025-11-27 22:45:10 +01:00
Cyborus added this to the v0.4.0 milestone 2025-12-01 17:02:29 +01:00
Sign in to join this conversation.
Reviewers
No reviewers
Labels
Clear labels[ Kind/Breaking Breaking change that won't be backward compatible
](#)[ Kind/Bug Something is not working
](#)[ Kind/Design Discussion about UI/UX design
](#)[ Kind/Documentation Documentation changes
](#)[ Kind/Enhancement Improve existing functionality
](#)[ Kind/Feature New functionality
](#)[ Kind/Security This is security issue
](#)[ Kind/Testing Issue or pull request related to testing
](#)[ Kind/Upstream This is an issue with upstream software (Forgejo) that is probably not our fault
](#)
[ Priority
Critical The priority is critical
](#)[ Priority
High The priority is high
](#)[ Priority
Low The priority is low
](#)[ Priority
Medium The priority is medium
](#)
[ Reviewed
Confirmed Issue has been confirmed
](#)[ Reviewed
Duplicate This issue or pull request already exists
](#)[ Reviewed
Invalid Invalid issue
](#)[ Reviewed
Won't Fix This issue won't be fixed
](#)
[ Status
Abandoned Somebody has started to work on this but abandoned work
](#)[ Status
Blocked Something is blocking this issue or pull request
](#)[ Status
Need More Info Feedback is required to reproduce issue or to continue work
](#)
[ Suspicious
](#)
No labels Kind/Breaking Kind/Bug Kind/Design Kind/Documentation Kind/Enhancement Kind/Feature Kind/Security Kind/Testing Kind/Upstream [ Priority
Critical ](/forgejo-contrib/forgejo-cli/pulls?labels=173012) [ Priority
High ](/forgejo-contrib/forgejo-cli/pulls?labels=173013) [ Priority
Low ](/forgejo-contrib/forgejo-cli/pulls?labels=173015) [ Priority
Medium ](/forgejo-contrib/forgejo-cli/pulls?labels=173014) [ Reviewed
Confirmed ](/forgejo-contrib/forgejo-cli/pulls?labels=173007) [ Reviewed
Duplicate ](/forgejo-contrib/forgejo-cli/pulls?labels=173005) [ Reviewed
Invalid ](/forgejo-contrib/forgejo-cli/pulls?labels=173006) [ Reviewed
Won't Fix ](/forgejo-contrib/forgejo-cli/pulls?labels=173008) [ Status
Abandoned ](/forgejo-contrib/forgejo-cli/pulls?labels=173011) [ Status
Blocked ](/forgejo-contrib/forgejo-cli/pulls?labels=173010) [ Status
Need More Info ](/forgejo-contrib/forgejo-cli/pulls?labels=173009) Suspicious
Milestone
Clear milestone
No items
No milestone v0.4.0
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
Notifications Subscribe
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
forgejo-contrib/forgejo-cli!241
WritePreview
Loading…
Add table
| Rows | | | Columns | |
CancelOK
Add a link
Url Description Hint: With a URL in your clipboard, you can paste directly into the editor to create a link.
CancelOK
CancelSave
Reference in a new issue
Repository
forgejo-contrib/forgejo-cli
Title
Body
Create issue
No description provided.
Delete branch "LordMZTE/forgejo-cli:key-commands"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
No Yes