Skip to content

Commit 7114f4e

Browse files
committed
Support multi-workspace pinned folders
1 parent 98ed009 commit 7114f4e

File tree

17 files changed

+466
-199
lines changed

17 files changed

+466
-199
lines changed

.vscode/launch.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@
66
"version": "0.2.0",
77
"configurations": [
88
{
9-
"name": "Run Extension",
10-
"type": "extensionHost",
11-
"request": "launch",
12-
"runtimeExecutable": "${execPath}",
9+
"name": "Run extension PWA",
1310
"args": [
1411
"--extensionDevelopmentPath=${workspaceFolder}"
1512
],
@@ -18,7 +15,11 @@
1815
"${workspaceFolder}/node_modules/**/*.js"
1916
],
2017
"preLaunchTask": "${defaultBuildTask}",
21-
"sourceMaps": true,
18+
"request": "launch",
19+
"type": "pwa-extensionHost",
20+
"localRoot": "${workspaceFolder}",
21+
"remoteRoot": "${workspaceFolder}/",
22+
"sourceMaps": true
2223
},
2324
{
2425
"name": "Extension Tests",

package.json

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@
147147
"dark": "resources/icons/dark/remove.svg",
148148
"light": "resources/icons/light/remove.svg"
149149
}
150+
},
151+
{
152+
"command": "github-actions.workflow.pin",
153+
"category": "GitHub Actions",
154+
"title": "Pin workflow",
155+
"icon": "$(pin)"
156+
},
157+
{
158+
"command": "github-actions.workflow.unpin",
159+
"category": "GitHub Actions",
160+
"title": "Unpin workflow",
161+
"icon": "$(pinned)"
150162
}
151163
],
152164
"views": {
@@ -190,6 +202,29 @@
190202
"command": "github-actions.explorer.openWorkflowFile",
191203
"when": "viewItem =~ /workflow/"
192204
},
205+
{
206+
"command": "github-actions.workflow.pin",
207+
"group": "inline@1",
208+
"when": "viewItem =~ /workflow/ && viewItem =~ /pinnable/"
209+
},
210+
{
211+
"command": "github-actions.workflow.pin",
212+
"when": "viewItem =~ /workflow/ && viewItem =~ /pinnable/"
213+
},
214+
{
215+
"command": "github-actions.workflow.unpin",
216+
"group": "inline@2",
217+
"when": "viewItem =~ /workflow/ && viewItem =~ /pinned/"
218+
},
219+
{
220+
"command": "github-actions.workflow.unpin",
221+
"when": "viewItem =~ /workflow/ && viewItem =~ /pinned/"
222+
},
223+
{
224+
"command": "github-actions.explorer.triggerRun",
225+
"group": "inline@10",
226+
"when": "viewItem =~ /rdispatch/ || viewItem =~ /wdispatch/"
227+
},
193228
{
194229
"command": "github-actions.explorer.triggerRun",
195230
"when": "viewItem =~ /rdispatch/ || viewItem =~ /wdispatch/"
@@ -278,6 +313,14 @@
278313
{
279314
"command": "github-actions.settings.secret.delete",
280315
"when": "false"
316+
},
317+
{
318+
"command": "github-actions.workflow.pin",
319+
"when": "false"
320+
},
321+
{
322+
"command": "github-actions.workflow.unpin",
323+
"when": "false"
281324
}
282325
]
283326
}

src/commands/openWorkflowFile.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
import * as vscode from "vscode";
2+
3+
import { GitHubRepoContext } from "../git/repository";
24
import { Workflow } from "../model";
35
import { getWorkflowUri } from "../workflow/workflow";
46

7+
interface OpenWorkflowCommandArgs {
8+
gitHubRepoContext: GitHubRepoContext;
9+
wf: Workflow;
10+
}
11+
512
export function registerOpenWorkflowFile(context: vscode.ExtensionContext) {
613
context.subscriptions.push(
714
vscode.commands.registerCommand(
815
"github-actions.explorer.openWorkflowFile",
9-
async (args) => {
10-
const wf: Workflow = args.wf;
16+
async (args: OpenWorkflowCommandArgs) => {
17+
const { wf, gitHubRepoContext } = args;
1118

12-
const fileUri = getWorkflowUri(wf.path);
19+
const fileUri = getWorkflowUri(gitHubRepoContext, wf.path);
1320
if (fileUri) {
1421
const textDocument = await vscode.workspace.openTextDocument(fileUri);
1522
vscode.window.showTextDocument(textDocument);

src/commands/orgLogin.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as vscode from "vscode";
2+
23
import { enableOrgFeatures } from "../auth/auth";
34

45
export function registerOrgLogin(context: vscode.ExtensionContext) {

src/commands/pinWorkflow.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import * as vscode from "vscode";
2+
3+
import { GitHubRepoContext } from "../git/repository";
4+
import { Workflow } from "../model";
5+
import { getWorkflowUri } from "../workflow/workflow";
6+
import { pinWorkflow } from "../configuration/configuration";
7+
8+
interface PinWorkflowCommandOptions {
9+
gitHubRepoContext: GitHubRepoContext;
10+
wf?: Workflow;
11+
12+
updateContextValue(): void;
13+
}
14+
15+
export function registerPinWorkflow(context: vscode.ExtensionContext) {
16+
context.subscriptions.push(
17+
vscode.commands.registerCommand(
18+
"github-actions.workflow.pin",
19+
async (args: PinWorkflowCommandOptions) => {
20+
const { gitHubRepoContext, wf } = args;
21+
22+
if (!wf) {
23+
return;
24+
}
25+
26+
const workflowFullPath = getWorkflowUri(gitHubRepoContext, wf.path);
27+
if (!workflowFullPath) {
28+
return;
29+
}
30+
31+
const relativeWorkflowPath =
32+
vscode.workspace.asRelativePath(workflowFullPath);
33+
await pinWorkflow(relativeWorkflowPath);
34+
35+
args.updateContextValue();
36+
vscode.commands.executeCommand("github-actions.explorer.refresh");
37+
}
38+
)
39+
);
40+
}

src/commands/rerunWorkflowRun.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import * as vscode from "vscode";
2+
23
import { GitHubRepoContext } from "../git/repository";
34
import { WorkflowRun } from "../model";
45

5-
export interface ReRunWorkflowRunLogsCommandArgs {
6+
interface ReRunWorkflowRunLogsCommandArgs {
67
gitHubRepoContext: GitHubRepoContext;
78
run: WorkflowRun;
89
}

src/commands/triggerWorkflowRun.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
import * as vscode from "vscode";
2-
import { getGitHead, getGitHubContextForWorkspaceUri } from "../git/repository";
3-
import { Workflow } from "../model";
2+
3+
import {
4+
GitHubRepoContext,
5+
getGitHead,
6+
getGitHubContextForWorkspaceUri,
7+
} from "../git/repository";
48
import { getWorkflowUri, parseWorkflow } from "../workflow/workflow";
59

10+
import { Workflow } from "../model";
11+
612
interface TriggerRunCommandOptions {
713
wf?: Workflow;
14+
gitHubRepoContext: GitHubRepoContext;
815
}
916

1017
export function registerTriggerWorkflowRun(context: vscode.ExtensionContext) {
@@ -17,7 +24,7 @@ export function registerTriggerWorkflowRun(context: vscode.ExtensionContext) {
1724
workflowUri = args;
1825
} else if (args.wf) {
1926
const wf: Workflow = args.wf;
20-
workflowUri = getWorkflowUri(wf.path);
27+
workflowUri = getWorkflowUri(args.gitHubRepoContext, wf.path);
2128
}
2229

2330
if (!workflowUri) {

src/commands/unpinWorkflow.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import * as vscode from "vscode";
2+
3+
import { GitHubRepoContext } from "../git/repository";
4+
import { Workflow } from "../model";
5+
import { getWorkflowUri } from "../workflow/workflow";
6+
import { unpinWorkflow } from "../configuration/configuration";
7+
8+
interface UnPinWorkflowCommandOptions {
9+
gitHubRepoContext: GitHubRepoContext;
10+
wf?: Workflow;
11+
12+
updateContextValue(): void;
13+
}
14+
15+
export function registerUnPinWorkflow(context: vscode.ExtensionContext) {
16+
context.subscriptions.push(
17+
vscode.commands.registerCommand(
18+
"github-actions.workflow.unpin",
19+
async (args: UnPinWorkflowCommandOptions) => {
20+
const { gitHubRepoContext, wf } = args;
21+
22+
if (!wf) {
23+
return;
24+
}
25+
26+
const workflowFullPath = getWorkflowUri(gitHubRepoContext, wf.path);
27+
if (!workflowFullPath) {
28+
return;
29+
}
30+
31+
const relativeWorkflowPath =
32+
vscode.workspace.asRelativePath(workflowFullPath);
33+
await unpinWorkflow(relativeWorkflowPath);
34+
35+
args.updateContextValue();
36+
vscode.commands.executeCommand("github-actions.explorer.refresh");
37+
}
38+
)
39+
);
40+
}

src/configuration/configuration.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,26 @@ export function getPinnedWorkflows(): string[] {
3232
);
3333
}
3434

35+
export async function pinWorkflow(workflow: string) {
36+
const pinedWorkflows = Array.from(
37+
new Set(getPinnedWorkflows()).add(workflow)
38+
);
39+
await getConfiguration().update(
40+
getSettingsKey("workflows.pinned.workflows"),
41+
pinedWorkflows
42+
);
43+
}
44+
45+
export async function unpinWorkflow(workflow: string) {
46+
const x = new Set(getPinnedWorkflows());
47+
x.delete(workflow);
48+
const pinnedWorkflows = Array.from(x);
49+
await getConfiguration().update(
50+
getSettingsKey("workflows.pinned.workflows"),
51+
pinnedWorkflows
52+
);
53+
}
54+
3555
export function isPinnedWorkflowsRefreshEnabled(): boolean {
3656
return getConfiguration().get<boolean>(
3757
getSettingsKey("workflows.pinned.refresh.enabled"),

src/extension.ts

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,40 @@
11
import * as vscode from "vscode";
2+
3+
import { LogScheme } from "./logs/constants";
4+
import { SettingsTreeProvider } from "./treeViews/settings";
5+
import { WorkflowStepLogFoldingProvider } from "./logs/foldingProvider";
6+
import { WorkflowStepLogProvider } from "./logs/fileProvider";
7+
import { WorkflowStepLogSymbolProvider } from "./logs/symbolProvider";
8+
import { WorkflowsTreeProvider } from "./treeViews/workflows";
9+
import { getGitHubContext } from "./git/repository";
10+
import { init } from "./workflow/diagnostics";
11+
import { initConfiguration } from "./configuration/configuration";
12+
import { initPinnedWorkflows } from "./pinnedWorkflows/pinnedWorkflows";
13+
import { initResources } from "./treeViews/icons";
14+
import { initWorkflowDocumentTracking } from "./tracker/workflowDocumentTracker";
15+
import { registerAddSecret } from "./commands/secrets/addSecret";
216
import { registerCancelWorkflowRun } from "./commands/cancelWorkflowRun";
17+
import { registerCopySecret } from "./commands/secrets/copySecret";
18+
import { registerDeleteSecret } from "./commands/secrets/deleteSecret";
19+
import { registerManageOrgSecrets } from "./commands/secrets/manageOrgSecrets";
320
import { registerOpenWorkflowFile } from "./commands/openWorkflowFile";
421
import { registerOpenWorkflowRun } from "./commands/openWorkflowRun";
522
import { registerOpenWorkflowRunLogs } from "./commands/openWorkflowRunLogs";
623
import { registerOrgLogin } from "./commands/orgLogin";
24+
import { registerPinWorkflow } from "./commands/pinWorkflow";
725
import { registerReRunWorkflowRun } from "./commands/rerunWorkflowRun";
8-
import { registerAddSecret } from "./commands/secrets/addSecret";
9-
import { registerCopySecret } from "./commands/secrets/copySecret";
10-
import { registerDeleteSecret } from "./commands/secrets/deleteSecret";
11-
import { registerManageOrgSecrets } from "./commands/secrets/manageOrgSecrets";
12-
import { registerUpdateSecret } from "./commands/secrets/updateSecret";
1326
import { registerTriggerWorkflowRun } from "./commands/triggerWorkflowRun";
14-
import { getGitHubContext } from "./git/repository";
15-
import { LogScheme } from "./logs/constants";
16-
import { WorkflowStepLogProvider } from "./logs/fileProvider";
17-
import { WorkflowStepLogFoldingProvider } from "./logs/foldingProvider";
18-
import { WorkflowStepLogSymbolProvider } from "./logs/symbolProvider";
19-
import { initWorkflowDocumentTracking } from "./tracker/workflowDocumentTracker";
20-
import { initResources } from "./treeViews/icons";
21-
import { SettingsTreeProvider } from "./treeViews/settings";
22-
import { WorkflowsTreeProvider } from "./treeViews/workflows";
27+
import { registerUnPinWorkflow } from "./commands/unpinWorkflow";
28+
import { registerUpdateSecret } from "./commands/secrets/updateSecret";
2329

2430
export function activate(context: vscode.ExtensionContext) {
2531
// Prefetch git repository origin url
2632
getGitHubContext();
2733

2834
initResources(context);
2935

30-
// initConfiguration(context);
31-
// initPinnedWorkflows(context);
36+
initConfiguration(context);
37+
initPinnedWorkflows(context);
3238

3339
// Track workflow
3440
initWorkflowDocumentTracking(context);
@@ -79,6 +85,9 @@ export function activate(context: vscode.ExtensionContext) {
7985

8086
registerOrgLogin(context);
8187

88+
registerPinWorkflow(context);
89+
registerUnPinWorkflow(context);
90+
8291
//
8392
// Log providers
8493
//
@@ -105,10 +114,8 @@ export function activate(context: vscode.ExtensionContext) {
105114
)
106115
);
107116

108-
/*
109117
//
110118
// Editing features
111119
//
112120
init(context);
113-
*/
114121
}

0 commit comments

Comments
 (0)