Skip to content

Commit acf7052

Browse files
committed
Support adding new secrets
1 parent 738bcbb commit acf7052

File tree

5 files changed

+93
-4
lines changed

5 files changed

+93
-4
lines changed

package.json

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,21 @@
6565
"title": "Cancel workflow run",
6666
"when": "viewItem =~ /run/ && viewItem =~ /cancelable/"
6767
},
68+
{
69+
"command": "settings.secret.add",
70+
"title": "Add new secret",
71+
"icon": {
72+
"dark": "resources/icons/dark/add.svg",
73+
"light": "resources/icons/light/add.svg"
74+
}
75+
},
6876
{
6977
"command": "settings.secret.update",
70-
"title": "Update secret",
71-
"when": "viewItem == 'secret'"
78+
"title": "Update secret"
79+
},
80+
{
81+
"command": "settings.secret.delete",
82+
"title": "Delete secret"
7283
}
7384
],
7485
"views": {
@@ -121,9 +132,18 @@
121132
"command": "workflow.run.rerun",
122133
"when": "viewItem =~ /run/ && viewItem =~ /rerunnable/"
123134
},
135+
{
136+
"command": "settings.secret.add",
137+
"group": "inline",
138+
"when": "viewItem == 'secrets'"
139+
},
124140
{
125141
"command": "settings.secret.update",
126142
"when": "viewItem == 'secret'"
143+
},
144+
{
145+
"command": "settings.secret.delete",
146+
"when": "viewItem == 'secret'"
127147
}
128148
]
129149
}

resources/icons/dark/add.svg

Lines changed: 1 addition & 0 deletions
Loading

resources/icons/light/add.svg

Lines changed: 1 addition & 0 deletions
Loading

src/extension.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,68 @@ export function activate(context: vscode.ExtensionContext) {
156156
})
157157
);
158158

159+
context.subscriptions.push(
160+
vscode.commands.registerCommand("settings.secret.add", async args => {
161+
const repo: Protocol = args.repo;
162+
const client: OctokitWithActions = args.client;
163+
164+
const name = await vscode.window.showInputBox({
165+
prompt: "Enter name for new secret"
166+
});
167+
168+
if (!name) {
169+
return;
170+
}
171+
172+
const value = await vscode.window.showInputBox({
173+
prompt: "Enter the new secret value"
174+
});
175+
176+
if (value) {
177+
try {
178+
const keyResponse = await client.actions.getPublicKey({
179+
owner: repo.owner,
180+
repo: repo.repositoryName
181+
});
182+
183+
const key_id: string = keyResponse.data.key_id;
184+
const key: string = keyResponse.data.key;
185+
186+
await client.actions.setSecret({
187+
owner: repo.owner,
188+
repo: repo.repositoryName,
189+
name: name,
190+
key_id: key_id,
191+
encrypted_value: encodeSecret(key, value)
192+
});
193+
} catch (e) {
194+
vscode.window.showErrorMessage(e.message);
195+
}
196+
}
197+
198+
settingsTreeProvider.refresh();
199+
})
200+
);
201+
202+
context.subscriptions.push(
203+
vscode.commands.registerCommand("settings.secret.delete", async args => {
204+
const repo: Protocol = args.repo;
205+
const secret: Secret = args.secret;
206+
const client: OctokitWithActions = args.client;
207+
208+
// TODO: Make API call
209+
// await client.actions.setSecret({
210+
// owner: repo.owner,
211+
// repo: repo.repositoryName,
212+
// name: name,
213+
// key_id: key_id,
214+
// encrypted_value: encodeSecret(key, value)
215+
// });
216+
217+
settingsTreeProvider.refresh();
218+
})
219+
);
220+
159221
context.subscriptions.push(
160222
vscode.commands.registerCommand("settings.secret.update", async args => {
161223
const repo: Protocol = args.repo;

src/treeViews/settings.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ class SelfHostedRunnersNode extends vscode.TreeItem {
1414
}
1515

1616
class SecretsNode extends vscode.TreeItem {
17-
constructor(public client: OctokitWithActions) {
17+
constructor(
18+
public readonly repo: Protocol,
19+
public readonly client: OctokitWithActions
20+
) {
1821
super("Secrets", vscode.TreeItemCollapsibleState.Collapsed);
22+
23+
this.contextValue = "secrets";
1924
}
2025
}
2126

@@ -69,7 +74,7 @@ export class SettingsTreeProvider
6974

7075
if (!element) {
7176
// Root
72-
return [new SelfHostedRunnersNode(), new SecretsNode(client)];
77+
return [new SelfHostedRunnersNode(), new SecretsNode(repo, client)];
7378
}
7479

7580
if (element instanceof SecretsNode) {

0 commit comments

Comments
 (0)