Skip to content

Commit 6528d39

Browse files
committed
feat: add interactive repository selection for gh-sync task
1 parent 819e2d2 commit 6528d39

1 file changed

Lines changed: 35 additions & 6 deletions

File tree

src/tasks/gh-sync.ts

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
FileSyncResult,
1111
} from "../utils/gh-sync-utils";
1212
import { RepoGroup, processRepo } from "../utils/gh-sync-utils/gh-sync-repo";
13+
import { logger } from "../logger";
1314

1415
export class GhSyncTask implements Task {
1516
/**
@@ -37,13 +38,41 @@ export class GhSyncTask implements Task {
3738
validateDependencies(depends);
3839
validateReposConfiguration(repos as unknown[]);
3940

40-
const typedRepos = repos as unknown[];
41+
const typedRepos = repos as unknown[] as RepoGroup[];
4142
const allResults: FileSyncResult[] = [];
4243

43-
// Process each repository group directly
44-
for (const repoGroup of typedRepos) {
45-
const typedRepoGroup = repoGroup as RepoGroup;
46-
const { repo, files } = typedRepoGroup;
44+
// Show repository selection prompt
45+
logger.info(
46+
"Select repositories to sync (use spacebar to select multiple, enter to confirm):"
47+
);
48+
49+
const repoOptions = typedRepos.map(repoGroup => ({
50+
title: repoGroup.repo,
51+
value: repoGroup.repo,
52+
}));
53+
54+
const selectedRepos = await logger.prompt("Choose repositories:", {
55+
type: "multiselect",
56+
options: repoOptions.map(opt => opt.title),
57+
});
58+
59+
if (
60+
!selectedRepos ||
61+
!Array.isArray(selectedRepos) ||
62+
selectedRepos.length === 0
63+
) {
64+
logger.info("No repositories selected. Exiting.");
65+
return;
66+
}
67+
68+
const selectedReposSet = new Set(selectedRepos as string[]);
69+
const reposToProcess = typedRepos.filter(repoGroup =>
70+
selectedReposSet.has(repoGroup.repo)
71+
);
72+
73+
// Process each selected repository
74+
for (const repoGroup of reposToProcess) {
75+
const { repo, files } = repoGroup;
4776

4877
// Validate repository group structure
4978
validateRepositoryGroup(repo, files);
@@ -53,7 +82,7 @@ export class GhSyncTask implements Task {
5382

5483
// Create a modified repoGroup with the processed repo name
5584
const processedRepoGroup = {
56-
...typedRepoGroup,
85+
...repoGroup,
5786
repo: processedRepo,
5887
};
5988

0 commit comments

Comments
 (0)