@effect-app/cli 1.23.18 → 1.23.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/index.js +130 -73
- package/package.json +1 -1
- package/src/index.ts +168 -92
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -95,7 +95,7 @@ Effect
|
|
|
95
95
|
}
|
|
96
96
|
const allRejects = [...existingRejects, ...effectFilters];
|
|
97
97
|
yield* Effect.logInfo(`Excluding packages from update: ${allRejects.join(", ")}`);
|
|
98
|
-
const rejectArgs = allRejects.map(filter => `--reject "${filter}"`).join(" ");
|
|
98
|
+
const rejectArgs = allRejects.map((filter) => `--reject "${filter}"`).join(" ");
|
|
99
99
|
yield* runNodeCommandEC(`pnpm exec ncu -u ${rejectArgs}`);
|
|
100
100
|
yield* runNodeCommandEC(`pnpm -r exec ncu -u ${rejectArgs}`);
|
|
101
101
|
})();
|
|
@@ -451,17 +451,33 @@ Effect
|
|
|
451
451
|
}), "Stopped monitoring package.json exports for all packages")
|
|
452
452
|
.pipe(Command.withDescription("Generate and update package.json exports mappings for all packages in monorepo"));
|
|
453
453
|
const wiki = Command
|
|
454
|
-
.make("wiki", {
|
|
455
|
-
|
|
456
|
-
|
|
454
|
+
.make("wiki", {}, Effect.fn("effa-cli.wiki")(function* () {
|
|
455
|
+
const action = yield* Prompt.select({
|
|
456
|
+
choices: [{
|
|
457
|
+
title: "sync",
|
|
458
|
+
description: "Initialize and update the documentation submodule",
|
|
459
|
+
value: "sync"
|
|
460
|
+
}, {
|
|
461
|
+
title: "update",
|
|
462
|
+
description: "Pull latest changes from remote, commit and push changes within the submodule",
|
|
463
|
+
value: "update"
|
|
464
|
+
}],
|
|
465
|
+
message: "Select wiki action"
|
|
466
|
+
});
|
|
467
|
+
const syncCommand = runNodeCommandEC("git submodule update --init --recursive --remote doc");
|
|
457
468
|
switch (action) {
|
|
458
469
|
case "sync": {
|
|
459
470
|
yield* Effect.logInfo("Initializing/updating git submodule for documentation...");
|
|
460
|
-
|
|
471
|
+
if ((yield* syncCommand) !== 0) {
|
|
472
|
+
return yield* Effect.fail(`Failed to sync submodule`);
|
|
473
|
+
}
|
|
474
|
+
break;
|
|
461
475
|
}
|
|
462
476
|
case "update": {
|
|
463
477
|
yield* Effect.logInfo("Pulling latest changes from remote submodule...");
|
|
464
|
-
yield*
|
|
478
|
+
if ((yield* syncCommand) !== 0) {
|
|
479
|
+
return yield* Effect.fail(`Failed to sync submodule`);
|
|
480
|
+
}
|
|
465
481
|
const commitMessage = yield* Prompt.text({
|
|
466
482
|
message: "Enter commit message:",
|
|
467
483
|
default: "update doc",
|
|
@@ -470,16 +486,65 @@ Effect
|
|
|
470
486
|
: Effect.fail("Commit message cannot be empty")
|
|
471
487
|
});
|
|
472
488
|
yield* Effect.logInfo("Committing and pushing changes in submodule...");
|
|
473
|
-
yield* runNodeCommandEC(`git -C doc add . && git -C doc commit -m '${commitMessage}' && git -C doc push`)
|
|
474
|
-
|
|
489
|
+
if ((yield* runNodeCommandEC(`git -C doc add . && git -C doc commit -m '${commitMessage}' && git -C doc push`)) === 0) {
|
|
490
|
+
yield* Effect.logInfo("Submodule updated and pushed successfully");
|
|
491
|
+
}
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
494
|
+
default: {
|
|
495
|
+
action;
|
|
496
|
+
return yield* Effect.fail(`Unknown wiki action: ${action}. Available actions: sync, update`);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
// check if references to submodule have changed in main repo
|
|
500
|
+
// and offer to commit these changes
|
|
501
|
+
const statusOutput = yield* runNodeCommand("git status --porcelain");
|
|
502
|
+
const hasSubmoduleChanges = statusOutput
|
|
503
|
+
.split("\n")
|
|
504
|
+
.some((line) => line.trim().endsWith("doc") && line.trim().startsWith("M "));
|
|
505
|
+
if (hasSubmoduleChanges) {
|
|
506
|
+
const shouldCommitSubmodule = yield* Prompt.confirm({
|
|
507
|
+
message: "Changes to the submodule detected in main repository. Commit these changes?",
|
|
508
|
+
initial: false
|
|
509
|
+
});
|
|
510
|
+
if (shouldCommitSubmodule) {
|
|
511
|
+
const mainCommitMessage = yield* Prompt.text({
|
|
512
|
+
message: "Enter commit message for main repository:",
|
|
513
|
+
default: "update doc submodule reference",
|
|
514
|
+
validate: (input) => input.trim().length > 0
|
|
515
|
+
? Effect.succeed(input.trim())
|
|
516
|
+
: Effect.fail("Commit message cannot be empty")
|
|
517
|
+
});
|
|
518
|
+
if ((yield* runNodeCommandEC(`git commit -m '${mainCommitMessage}' doc`)) === 0) {
|
|
519
|
+
yield* Effect.logInfo("Main repository updated with submodule changes successfully");
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
yield* Effect.logError("Failed to commit submodule changes in main repository");
|
|
523
|
+
}
|
|
475
524
|
}
|
|
476
|
-
|
|
477
|
-
yield* Effect.logInfo("
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
525
|
+
else {
|
|
526
|
+
yield* Effect.logInfo("Remember to commit the submodule changes in the main repository later.");
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
else {
|
|
530
|
+
yield* Effect.logInfo("No changes to the submodule detected in main repository.");
|
|
531
|
+
}
|
|
532
|
+
}))
|
|
533
|
+
.pipe(Command.withDescription(`Manage the documentation wiki git submodule with interactive action selection.
|
|
534
|
+
|
|
535
|
+
Available actions:
|
|
536
|
+
- sync: Initialize and update the documentation submodule from remote
|
|
537
|
+
- update: Pull latest changes, commit and push changes within the submodule
|
|
538
|
+
|
|
539
|
+
After any action, automatically detects and offers to commit submodule reference changes in the main repository.`));
|
|
540
|
+
const initWiki = Command
|
|
541
|
+
.make("init-wiki", {}, Effect.fn("effa-cli.initWiki")(function* ({}) {
|
|
542
|
+
yield* Effect.logInfo("⚠️ IMPORTANT: This is a one-time project setup command!");
|
|
543
|
+
// check if doc directory already exists in git index
|
|
544
|
+
const docInIndex = yield* runNodeCommand("git ls-files")
|
|
545
|
+
.pipe(Effect.map((output) => output.split("\n").some((line) => line.startsWith("doc/") || line === "doc")), Effect.catchAll(() => Effect.succeed(false)));
|
|
546
|
+
if (docInIndex) {
|
|
547
|
+
return yield* Effect.logError(`❌ ERROR: A 'doc' directory already exists in the git index!
|
|
483
548
|
|
|
484
549
|
This suggests the wiki submodule may have been initialized before, or there are conflicting files.
|
|
485
550
|
|
|
@@ -491,9 +556,9 @@ Required actions before proceeding:
|
|
|
491
556
|
5. Re-run this command
|
|
492
557
|
|
|
493
558
|
Operation cancelled for safety.`);
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
559
|
+
}
|
|
560
|
+
const confirmation = yield* Prompt.confirm({
|
|
561
|
+
message: `This command will initialize the wiki submodule for this project.
|
|
497
562
|
|
|
498
563
|
⚠️ WARNING: This is NOT the command to use for local submodule initialization!
|
|
499
564
|
|
|
@@ -505,63 +570,54 @@ This command should only be run ONCE in the entire project history by a project
|
|
|
505
570
|
For normal local development, use 'effa wiki sync' instead.
|
|
506
571
|
|
|
507
572
|
Are you sure you want to proceed with the one-time project setup?`,
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
}
|
|
513
|
-
yield* Effect.logInfo("Extracting project name from git remote...");
|
|
514
|
-
const remoteUrl = yield* runNodeCommand("git config --get remote.origin.url");
|
|
515
|
-
// Extract project name from URL (supports both SSH and HTTPS)
|
|
516
|
-
// Examples:
|
|
517
|
-
// - git@github.com:user/project-name.git -> project-name
|
|
518
|
-
// - https://github.com/user/project-name.git -> project-name
|
|
519
|
-
let detectedProjectName = remoteUrl
|
|
520
|
-
.split("/")
|
|
521
|
-
.pop()
|
|
522
|
-
?.replace(/\.git$/, "")
|
|
523
|
-
?.trim();
|
|
524
|
-
yield* detectedProjectName
|
|
525
|
-
? Effect.logInfo(`Detected project name from git remote: ${detectedProjectName}`)
|
|
526
|
-
: Effect.logWarning("Could not determine project name from git remote");
|
|
527
|
-
detectedProjectName = yield* Prompt.text({
|
|
528
|
-
message: detectedProjectName
|
|
529
|
-
? "Please confirm or modify the project name:"
|
|
530
|
-
: "Please enter the project name:",
|
|
531
|
-
...detectedProjectName && { default: detectedProjectName },
|
|
532
|
-
validate: (input) => input.trim().length > 0
|
|
533
|
-
? Effect.succeed(input.trim())
|
|
534
|
-
: Effect.fail("Project name cannot be empty")
|
|
535
|
-
});
|
|
536
|
-
yield* Effect.logInfo(`Using project name: ${detectedProjectName}`);
|
|
537
|
-
yield* Effect.logInfo("Creating .gitmodules file...");
|
|
538
|
-
yield* runNodeCommandEC(`echo '' >> .gitmodules`);
|
|
539
|
-
yield* runNodeCommandEC(`echo '[submodule "doc"]' >> .gitmodules`);
|
|
540
|
-
yield* runNodeCommandEC(`echo ' path = doc' >> .gitmodules`);
|
|
541
|
-
yield* runNodeCommandEC(`echo ' url = ../${detectedProjectName}.wiki.git' >> .gitmodules`);
|
|
542
|
-
yield* runNodeCommandEC(`echo ' branch = master' >> .gitmodules`);
|
|
543
|
-
yield* runNodeCommandEC(`echo ' update = merge' >> .gitmodules`);
|
|
544
|
-
yield* Effect.logInfo("Adding git submodule for documentation wiki...");
|
|
545
|
-
yield* runNodeCommandEC(`git submodule add -b master ../${detectedProjectName}.wiki.git doc`);
|
|
546
|
-
yield* Effect.logInfo("Committing wiki submodule addition...");
|
|
547
|
-
yield* runNodeCommandEC("git add . && git commit -am 'Add doc submodule'");
|
|
548
|
-
return yield* Effect.logInfo("Wiki submodule initialized successfully");
|
|
549
|
-
}
|
|
550
|
-
default: {
|
|
551
|
-
return yield* Effect.fail(`Unknown wiki action: ${action}. Available actions: sync, update`);
|
|
552
|
-
}
|
|
573
|
+
initial: false
|
|
574
|
+
});
|
|
575
|
+
if (!confirmation) {
|
|
576
|
+
return yield* Effect.logInfo("Operation cancelled. Use 'effa wiki sync' for normal wiki operations.");
|
|
553
577
|
}
|
|
578
|
+
yield* Effect.logInfo("Extracting project name from git remote...");
|
|
579
|
+
const remoteUrl = yield* runNodeCommand("git config --get remote.origin.url");
|
|
580
|
+
// extract project name from URL (supports both SSH and HTTPS)
|
|
581
|
+
//
|
|
582
|
+
// - git@github.com:user/project-name.git -> project-name
|
|
583
|
+
// - https://github.com/user/project-name.git -> project-name
|
|
584
|
+
let detectedProjectName = remoteUrl
|
|
585
|
+
.split("/")
|
|
586
|
+
.pop()
|
|
587
|
+
?.replace(/\.git$/, "")
|
|
588
|
+
?.trim();
|
|
589
|
+
yield* detectedProjectName
|
|
590
|
+
? Effect.logInfo(`Detected project name from git remote: ${detectedProjectName}`)
|
|
591
|
+
: Effect.logWarning("Could not determine project name from git remote");
|
|
592
|
+
detectedProjectName = yield* Prompt.text({
|
|
593
|
+
message: detectedProjectName
|
|
594
|
+
? "Please confirm or modify the project name:"
|
|
595
|
+
: "Please enter the project name:",
|
|
596
|
+
...detectedProjectName && { default: detectedProjectName },
|
|
597
|
+
validate: (input) => input.trim().length > 0
|
|
598
|
+
? Effect.succeed(input.trim())
|
|
599
|
+
: Effect.fail("Project name cannot be empty")
|
|
600
|
+
});
|
|
601
|
+
yield* Effect.logInfo(`Using project name: ${detectedProjectName}`);
|
|
602
|
+
yield* Effect.logInfo("Creating .gitmodules file...");
|
|
603
|
+
yield* runNodeCommandEC(`echo '' >> .gitmodules`);
|
|
604
|
+
yield* runNodeCommandEC(`echo '[submodule "doc"]' >> .gitmodules`);
|
|
605
|
+
yield* runNodeCommandEC(`echo ' path = doc' >> .gitmodules`);
|
|
606
|
+
yield* runNodeCommandEC(`echo ' url = ../${detectedProjectName}.wiki.git' >> .gitmodules`);
|
|
607
|
+
yield* runNodeCommandEC(`echo ' branch = master' >> .gitmodules`);
|
|
608
|
+
yield* runNodeCommandEC(`echo ' update = merge' >> .gitmodules`);
|
|
609
|
+
yield* Effect.logInfo("Adding git submodule for documentation wiki...");
|
|
610
|
+
yield* runNodeCommandEC(`git submodule add -b master ../${detectedProjectName}.wiki.git doc`);
|
|
611
|
+
yield* Effect.logInfo("Committing wiki submodule addition...");
|
|
612
|
+
yield* runNodeCommandEC("git add . && git commit -am 'Add doc submodule'");
|
|
613
|
+
return yield* Effect.logInfo("Wiki submodule initialized successfully");
|
|
554
614
|
}))
|
|
555
|
-
.pipe(Command.withDescription(
|
|
556
|
-
|
|
557
|
-
Available actions:
|
|
558
|
-
- sync: Initialize and update the documentation submodule (default)
|
|
559
|
-
- update: Pull latest changes from remote, commit and push changes within the submodule
|
|
560
|
-
- init-wiki: Set up the wiki submodule for the project (one-time setup)`));
|
|
561
|
-
const DryRunOption = Options.boolean("dry-run").pipe(Options.withDescription("Show what would be done without making changes"));
|
|
562
|
-
const PruneStoreOption = Options.boolean("store-prune").pipe(Options.withDescription("Prune the package manager store"));
|
|
615
|
+
.pipe(Command.withDescription("Set up the wiki submodule for the project (one-time setup)"));
|
|
563
616
|
const nuke = Command
|
|
564
|
-
.make("nuke", {
|
|
617
|
+
.make("nuke", {
|
|
618
|
+
dryRun: Options.boolean("dry-run").pipe(Options.withDescription("Show what would be done without making changes")),
|
|
619
|
+
storePrune: Options.boolean("store-prune").pipe(Options.withDescription("Prune the package manager store"))
|
|
620
|
+
}, Effect.fn("effa-cli.nuke")(function* ({ dryRun, storePrune }) {
|
|
565
621
|
yield* Effect.logInfo(dryRun ? "Performing dry run cleanup..." : "Performing nuclear cleanup...");
|
|
566
622
|
if (dryRun) {
|
|
567
623
|
yield* runNodeCommandEC("find . -depth \\( -type d \\( -name 'node_modules' -o -name '.nuxt' -o -name 'dist' -o -name '.output' -o -name '.nitro' -o -name '.cache' -o -name 'test-results' -o -name 'test-out' -o -name 'coverage' \\) -print \\) -o \\( -type f \\( -name '*.log' -o -name '*.tsbuildinfo' \\) -print \\)");
|
|
@@ -587,6 +643,7 @@ Available actions:
|
|
|
587
643
|
packagejson,
|
|
588
644
|
packagejsonPackages,
|
|
589
645
|
wiki,
|
|
646
|
+
initWiki,
|
|
590
647
|
nuke
|
|
591
648
|
])), {
|
|
592
649
|
name: "Effect-App CLI by jfet97 ❤️",
|
|
@@ -595,4 +652,4 @@ Available actions:
|
|
|
595
652
|
return yield* cli(process.argv);
|
|
596
653
|
})()
|
|
597
654
|
.pipe(Effect.scoped, Effect.provide(NodeContext.layer), NodeRuntime.runMain);
|
|
598
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUloRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFjLE1BQU0sUUFBUSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXRDLE1BQU07S0FDSCxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDdkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUM3QixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLDRCQUE0QixDQUFBO0lBRWpFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUE7SUFFOUU7Ozs7Ozs7T0FPRztJQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FDckQsV0FBVztTQUNSLElBQUksQ0FBQyxJQUFJ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
|
|
655
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUloRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFjLE1BQU0sUUFBUSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXRDLE1BQU07S0FDSCxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDdkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUM3QixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLDRCQUE0QixDQUFBO0lBRWpFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUE7SUFFOUU7Ozs7Ozs7T0FPRztJQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FDckQsV0FBVztTQUNSLElBQUksQ0FBQyxJQUFJ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
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -119,7 +119,7 @@ Effect
|
|
|
119
119
|
|
|
120
120
|
const allRejects = [...existingRejects, ...effectFilters]
|
|
121
121
|
yield* Effect.logInfo(`Excluding packages from update: ${allRejects.join(", ")}`)
|
|
122
|
-
const rejectArgs = allRejects.map(filter => `--reject "${filter}"`).join(" ")
|
|
122
|
+
const rejectArgs = allRejects.map((filter) => `--reject "${filter}"`).join(" ")
|
|
123
123
|
|
|
124
124
|
yield* runNodeCommandEC(`pnpm exec ncu -u ${rejectArgs}`)
|
|
125
125
|
yield* runNodeCommandEC(`pnpm -r exec ncu -u ${rejectArgs}`)
|
|
@@ -698,21 +698,39 @@ Effect
|
|
|
698
698
|
const wiki = Command
|
|
699
699
|
.make(
|
|
700
700
|
"wiki",
|
|
701
|
-
{
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
701
|
+
{},
|
|
702
|
+
Effect.fn("effa-cli.wiki")(function*() {
|
|
703
|
+
const action = yield* Prompt.select({
|
|
704
|
+
choices: [{
|
|
705
|
+
title: "sync",
|
|
706
|
+
description: "Initialize and update the documentation submodule",
|
|
707
|
+
value: "sync"
|
|
708
|
+
}, {
|
|
709
|
+
title: "update",
|
|
710
|
+
description: "Pull latest changes from remote, commit and push changes within the submodule",
|
|
711
|
+
value: "update"
|
|
712
|
+
}],
|
|
713
|
+
message: "Select wiki action"
|
|
714
|
+
})
|
|
715
|
+
|
|
716
|
+
const syncCommand = runNodeCommandEC("git submodule update --init --recursive --remote doc")
|
|
717
|
+
|
|
708
718
|
switch (action) {
|
|
709
719
|
case "sync": {
|
|
710
720
|
yield* Effect.logInfo("Initializing/updating git submodule for documentation...")
|
|
711
|
-
|
|
721
|
+
|
|
722
|
+
if ((yield* syncCommand) !== 0) {
|
|
723
|
+
return yield* Effect.fail(`Failed to sync submodule`)
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
break
|
|
712
727
|
}
|
|
713
728
|
case "update": {
|
|
714
729
|
yield* Effect.logInfo("Pulling latest changes from remote submodule...")
|
|
715
|
-
|
|
730
|
+
|
|
731
|
+
if ((yield* syncCommand) !== 0) {
|
|
732
|
+
return yield* Effect.fail(`Failed to sync submodule`)
|
|
733
|
+
}
|
|
716
734
|
|
|
717
735
|
const commitMessage = yield* Prompt.text({
|
|
718
736
|
message: "Enter commit message:",
|
|
@@ -724,22 +742,92 @@ Effect
|
|
|
724
742
|
})
|
|
725
743
|
|
|
726
744
|
yield* Effect.logInfo("Committing and pushing changes in submodule...")
|
|
727
|
-
yield* runNodeCommandEC(`git -C doc add . && git -C doc commit -m '${commitMessage}' && git -C doc push`)
|
|
728
745
|
|
|
729
|
-
|
|
746
|
+
if (
|
|
747
|
+
(yield* runNodeCommandEC(
|
|
748
|
+
`git -C doc add . && git -C doc commit -m '${commitMessage}' && git -C doc push`
|
|
749
|
+
)) === 0
|
|
750
|
+
) {
|
|
751
|
+
yield* Effect.logInfo("Submodule updated and pushed successfully")
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
break
|
|
730
755
|
}
|
|
731
|
-
|
|
732
|
-
|
|
756
|
+
default: {
|
|
757
|
+
action satisfies never
|
|
758
|
+
return yield* Effect.fail(`Unknown wiki action: ${action}. Available actions: sync, update`)
|
|
759
|
+
}
|
|
760
|
+
}
|
|
733
761
|
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
Effect.map((output) => output.split("\n").some((line) => line.startsWith("doc/") || line === "doc")),
|
|
738
|
-
Effect.catchAll(() => Effect.succeed(false))
|
|
739
|
-
)
|
|
762
|
+
// check if references to submodule have changed in main repo
|
|
763
|
+
// and offer to commit these changes
|
|
764
|
+
const statusOutput = yield* runNodeCommand("git status --porcelain")
|
|
740
765
|
|
|
741
|
-
|
|
742
|
-
|
|
766
|
+
const hasSubmoduleChanges = statusOutput
|
|
767
|
+
.split("\n")
|
|
768
|
+
.some((line) => line.trim().endsWith("doc") && line.trim().startsWith("M "))
|
|
769
|
+
|
|
770
|
+
if (hasSubmoduleChanges) {
|
|
771
|
+
const shouldCommitSubmodule = yield* Prompt.confirm({
|
|
772
|
+
message: "Changes to the submodule detected in main repository. Commit these changes?",
|
|
773
|
+
initial: false
|
|
774
|
+
})
|
|
775
|
+
|
|
776
|
+
if (
|
|
777
|
+
shouldCommitSubmodule
|
|
778
|
+
) {
|
|
779
|
+
const mainCommitMessage = yield* Prompt.text({
|
|
780
|
+
message: "Enter commit message for main repository:",
|
|
781
|
+
default: "update doc submodule reference",
|
|
782
|
+
validate: (input) =>
|
|
783
|
+
input.trim().length > 0
|
|
784
|
+
? Effect.succeed(input.trim())
|
|
785
|
+
: Effect.fail("Commit message cannot be empty")
|
|
786
|
+
})
|
|
787
|
+
|
|
788
|
+
if (
|
|
789
|
+
(yield* runNodeCommandEC(
|
|
790
|
+
`git commit -m '${mainCommitMessage}' doc`
|
|
791
|
+
)) === 0
|
|
792
|
+
) {
|
|
793
|
+
yield* Effect.logInfo("Main repository updated with submodule changes successfully")
|
|
794
|
+
} else {
|
|
795
|
+
yield* Effect.logError("Failed to commit submodule changes in main repository")
|
|
796
|
+
}
|
|
797
|
+
} else {
|
|
798
|
+
yield* Effect.logInfo("Remember to commit the submodule changes in the main repository later.")
|
|
799
|
+
}
|
|
800
|
+
} else {
|
|
801
|
+
yield* Effect.logInfo("No changes to the submodule detected in main repository.")
|
|
802
|
+
}
|
|
803
|
+
})
|
|
804
|
+
)
|
|
805
|
+
.pipe(Command.withDescription(
|
|
806
|
+
`Manage the documentation wiki git submodule with interactive action selection.
|
|
807
|
+
|
|
808
|
+
Available actions:
|
|
809
|
+
- sync: Initialize and update the documentation submodule from remote
|
|
810
|
+
- update: Pull latest changes, commit and push changes within the submodule
|
|
811
|
+
|
|
812
|
+
After any action, automatically detects and offers to commit submodule reference changes in the main repository.`
|
|
813
|
+
))
|
|
814
|
+
|
|
815
|
+
const initWiki = Command
|
|
816
|
+
.make(
|
|
817
|
+
"init-wiki",
|
|
818
|
+
{},
|
|
819
|
+
Effect.fn("effa-cli.initWiki")(function*({}) {
|
|
820
|
+
yield* Effect.logInfo("⚠️ IMPORTANT: This is a one-time project setup command!")
|
|
821
|
+
|
|
822
|
+
// check if doc directory already exists in git index
|
|
823
|
+
const docInIndex = yield* runNodeCommand("git ls-files")
|
|
824
|
+
.pipe(
|
|
825
|
+
Effect.map((output) => output.split("\n").some((line) => line.startsWith("doc/") || line === "doc")),
|
|
826
|
+
Effect.catchAll(() => Effect.succeed(false))
|
|
827
|
+
)
|
|
828
|
+
|
|
829
|
+
if (docInIndex) {
|
|
830
|
+
return yield* Effect.logError(`❌ ERROR: A 'doc' directory already exists in the git index!
|
|
743
831
|
|
|
744
832
|
This suggests the wiki submodule may have been initialized before, or there are conflicting files.
|
|
745
833
|
|
|
@@ -751,10 +839,10 @@ Required actions before proceeding:
|
|
|
751
839
|
5. Re-run this command
|
|
752
840
|
|
|
753
841
|
Operation cancelled for safety.`)
|
|
754
|
-
|
|
842
|
+
}
|
|
755
843
|
|
|
756
|
-
|
|
757
|
-
|
|
844
|
+
const confirmation = yield* Prompt.confirm({
|
|
845
|
+
message: `This command will initialize the wiki submodule for this project.
|
|
758
846
|
|
|
759
847
|
⚠️ WARNING: This is NOT the command to use for local submodule initialization!
|
|
760
848
|
|
|
@@ -766,86 +854,73 @@ This command should only be run ONCE in the entire project history by a project
|
|
|
766
854
|
For normal local development, use 'effa wiki sync' instead.
|
|
767
855
|
|
|
768
856
|
Are you sure you want to proceed with the one-time project setup?`,
|
|
769
|
-
|
|
770
|
-
|
|
857
|
+
initial: false
|
|
858
|
+
})
|
|
771
859
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
860
|
+
if (!confirmation) {
|
|
861
|
+
return yield* Effect.logInfo("Operation cancelled. Use 'effa wiki sync' for normal wiki operations.")
|
|
862
|
+
}
|
|
775
863
|
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
864
|
+
yield* Effect.logInfo("Extracting project name from git remote...")
|
|
865
|
+
const remoteUrl = yield* runNodeCommand("git config --get remote.origin.url")
|
|
866
|
+
|
|
867
|
+
// extract project name from URL (supports both SSH and HTTPS)
|
|
868
|
+
//
|
|
869
|
+
// - git@github.com:user/project-name.git -> project-name
|
|
870
|
+
// - https://github.com/user/project-name.git -> project-name
|
|
871
|
+
let detectedProjectName = remoteUrl
|
|
872
|
+
.split("/")
|
|
873
|
+
.pop()
|
|
874
|
+
?.replace(/\.git$/, "")
|
|
875
|
+
?.trim()
|
|
876
|
+
|
|
877
|
+
yield* detectedProjectName
|
|
878
|
+
? Effect.logInfo(`Detected project name from git remote: ${detectedProjectName}`)
|
|
879
|
+
: Effect.logWarning("Could not determine project name from git remote")
|
|
880
|
+
|
|
881
|
+
detectedProjectName = yield* Prompt.text({
|
|
882
|
+
message: detectedProjectName
|
|
883
|
+
? "Please confirm or modify the project name:"
|
|
884
|
+
: "Please enter the project name:",
|
|
885
|
+
...detectedProjectName && { default: detectedProjectName },
|
|
886
|
+
validate: (input) =>
|
|
887
|
+
input.trim().length > 0
|
|
888
|
+
? Effect.succeed(input.trim())
|
|
889
|
+
: Effect.fail("Project name cannot be empty")
|
|
890
|
+
})
|
|
803
891
|
|
|
804
|
-
|
|
892
|
+
yield* Effect.logInfo(`Using project name: ${detectedProjectName}`)
|
|
805
893
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
894
|
+
yield* Effect.logInfo("Creating .gitmodules file...")
|
|
895
|
+
yield* runNodeCommandEC(`echo '' >> .gitmodules`)
|
|
896
|
+
yield* runNodeCommandEC(`echo '[submodule "doc"]' >> .gitmodules`)
|
|
897
|
+
yield* runNodeCommandEC(`echo ' path = doc' >> .gitmodules`)
|
|
898
|
+
yield* runNodeCommandEC(`echo ' url = ../${detectedProjectName}.wiki.git' >> .gitmodules`)
|
|
899
|
+
yield* runNodeCommandEC(`echo ' branch = master' >> .gitmodules`)
|
|
900
|
+
yield* runNodeCommandEC(`echo ' update = merge' >> .gitmodules`)
|
|
813
901
|
|
|
814
|
-
|
|
815
|
-
|
|
902
|
+
yield* Effect.logInfo("Adding git submodule for documentation wiki...")
|
|
903
|
+
yield* runNodeCommandEC(`git submodule add -b master ../${detectedProjectName}.wiki.git doc`)
|
|
816
904
|
|
|
817
|
-
|
|
818
|
-
|
|
905
|
+
yield* Effect.logInfo("Committing wiki submodule addition...")
|
|
906
|
+
yield* runNodeCommandEC("git add . && git commit -am 'Add doc submodule'")
|
|
819
907
|
|
|
820
|
-
|
|
821
|
-
}
|
|
822
|
-
default: {
|
|
823
|
-
return yield* Effect.fail(`Unknown wiki action: ${action}. Available actions: sync, update`)
|
|
824
|
-
}
|
|
825
|
-
}
|
|
908
|
+
return yield* Effect.logInfo("Wiki submodule initialized successfully")
|
|
826
909
|
})
|
|
827
910
|
)
|
|
828
|
-
.pipe(Command.withDescription(
|
|
829
|
-
`Manage the documentation wiki git submodule.
|
|
830
|
-
|
|
831
|
-
Available actions:
|
|
832
|
-
- sync: Initialize and update the documentation submodule (default)
|
|
833
|
-
- update: Pull latest changes from remote, commit and push changes within the submodule
|
|
834
|
-
- init-wiki: Set up the wiki submodule for the project (one-time setup)`
|
|
835
|
-
))
|
|
836
|
-
|
|
837
|
-
const DryRunOption = Options.boolean("dry-run").pipe(
|
|
838
|
-
Options.withDescription("Show what would be done without making changes")
|
|
839
|
-
)
|
|
840
|
-
|
|
841
|
-
const PruneStoreOption = Options.boolean("store-prune").pipe(
|
|
842
|
-
Options.withDescription("Prune the package manager store")
|
|
843
|
-
)
|
|
911
|
+
.pipe(Command.withDescription("Set up the wiki submodule for the project (one-time setup)"))
|
|
844
912
|
|
|
845
913
|
const nuke = Command
|
|
846
914
|
.make(
|
|
847
915
|
"nuke",
|
|
848
|
-
{
|
|
916
|
+
{
|
|
917
|
+
dryRun: Options.boolean("dry-run").pipe(
|
|
918
|
+
Options.withDescription("Show what would be done without making changes")
|
|
919
|
+
),
|
|
920
|
+
storePrune: Options.boolean("store-prune").pipe(
|
|
921
|
+
Options.withDescription("Prune the package manager store")
|
|
922
|
+
)
|
|
923
|
+
},
|
|
849
924
|
Effect.fn("effa-cli.nuke")(function*({ dryRun, storePrune }) {
|
|
850
925
|
yield* Effect.logInfo(dryRun ? "Performing dry run cleanup..." : "Performing nuclear cleanup...")
|
|
851
926
|
|
|
@@ -883,6 +958,7 @@ Available actions:
|
|
|
883
958
|
packagejson,
|
|
884
959
|
packagejsonPackages,
|
|
885
960
|
wiki,
|
|
961
|
+
initWiki,
|
|
886
962
|
nuke
|
|
887
963
|
])),
|
|
888
964
|
{
|