@launch77/cli 1.3.0 ā 1.4.0
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 +11 -0
- package/dist/cli.js +6 -3
- package/dist/cli.js.map +1 -1
- package/dist/infrastructure/template-generator.d.ts +1 -1
- package/dist/infrastructure/template-generator.d.ts.map +1 -1
- package/dist/infrastructure/template.d.ts +5 -0
- package/dist/infrastructure/template.d.ts.map +1 -1
- package/dist/infrastructure/template.js +11 -0
- package/dist/infrastructure/template.js.map +1 -1
- package/dist/modules/app/commands/create-app.js +1 -1
- package/dist/modules/app/commands/create-app.js.map +1 -1
- package/dist/modules/app/commands/delete-app.js +1 -1
- package/dist/modules/app/commands/delete-app.js.map +1 -1
- package/dist/modules/app/services/app-svc.d.ts +1 -1
- package/dist/modules/app/services/app-svc.d.ts.map +1 -1
- package/dist/modules/app/services/manifest-svc.d.ts +1 -1
- package/dist/modules/app/services/manifest-svc.d.ts.map +1 -1
- package/dist/modules/catalog/config/catalog-config.test.js +1 -1
- package/dist/modules/catalog/config/catalog-config.test.js.map +1 -1
- package/dist/modules/git/commands/git-connect.js +2 -2
- package/dist/modules/git/commands/git-connect.js.map +1 -1
- package/dist/modules/git/errors/git-errors.d.ts +3 -0
- package/dist/modules/git/errors/git-errors.d.ts.map +1 -1
- package/dist/modules/git/errors/git-errors.js +6 -0
- package/dist/modules/git/errors/git-errors.js.map +1 -1
- package/dist/modules/git/index.d.ts +3 -1
- package/dist/modules/git/index.d.ts.map +1 -1
- package/dist/modules/git/index.js +6 -1
- package/dist/modules/git/index.js.map +1 -1
- package/dist/modules/git/services/git-service.d.ts +5 -0
- package/dist/modules/git/services/git-service.d.ts.map +1 -1
- package/dist/modules/git/services/git-service.js +11 -1
- package/dist/modules/git/services/git-service.js.map +1 -1
- package/dist/modules/plugin/commands/plugin-create.d.ts +3 -0
- package/dist/modules/plugin/commands/plugin-create.d.ts.map +1 -0
- package/dist/modules/plugin/commands/plugin-create.js +59 -0
- package/dist/modules/plugin/commands/plugin-create.js.map +1 -0
- package/dist/modules/plugin/commands/plugin-install.d.ts.map +1 -1
- package/dist/modules/plugin/commands/plugin-install.js +9 -24
- package/dist/modules/plugin/commands/plugin-install.js.map +1 -1
- package/dist/modules/plugin/errors/plugin-errors.d.ts +24 -1
- package/dist/modules/plugin/errors/plugin-errors.d.ts.map +1 -1
- package/dist/modules/plugin/errors/plugin-errors.js +79 -6
- package/dist/modules/plugin/errors/plugin-errors.js.map +1 -1
- package/dist/modules/plugin/index.d.ts +4 -2
- package/dist/modules/plugin/index.d.ts.map +1 -1
- package/dist/modules/plugin/index.js +4 -2
- package/dist/modules/plugin/index.js.map +1 -1
- package/dist/modules/plugin/lib/plugin-registry.d.ts +6 -12
- package/dist/modules/plugin/lib/plugin-registry.d.ts.map +1 -1
- package/dist/modules/plugin/lib/plugin-registry.js +13 -30
- package/dist/modules/plugin/lib/plugin-registry.js.map +1 -1
- package/dist/modules/plugin/lib/plugin-resolver.d.ts +76 -0
- package/dist/modules/plugin/lib/plugin-resolver.d.ts.map +1 -0
- package/dist/modules/plugin/lib/plugin-resolver.js +128 -0
- package/dist/modules/plugin/lib/plugin-resolver.js.map +1 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.d.ts +2 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.d.ts.map +1 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.js +175 -0
- package/dist/modules/plugin/lib/plugin-resolver.test.js.map +1 -0
- package/dist/modules/plugin/services/plugin-create-service.d.ts +16 -0
- package/dist/modules/plugin/services/plugin-create-service.d.ts.map +1 -0
- package/dist/modules/plugin/services/plugin-create-service.js +47 -0
- package/dist/modules/plugin/services/plugin-create-service.js.map +1 -0
- package/dist/modules/plugin/services/plugin-svc.d.ts +8 -3
- package/dist/modules/plugin/services/plugin-svc.d.ts.map +1 -1
- package/dist/modules/plugin/services/plugin-svc.js +96 -15
- package/dist/modules/plugin/services/plugin-svc.js.map +1 -1
- package/dist/modules/release/commands/release-init.d.ts +3 -0
- package/dist/modules/release/commands/release-init.d.ts.map +1 -0
- package/dist/modules/release/commands/release-init.js +92 -0
- package/dist/modules/release/commands/release-init.js.map +1 -0
- package/dist/modules/release/errors/release-errors.d.ts +7 -0
- package/dist/modules/release/errors/release-errors.d.ts.map +1 -0
- package/dist/modules/release/errors/release-errors.js +13 -0
- package/dist/modules/release/errors/release-errors.js.map +1 -0
- package/dist/modules/release/index.d.ts +4 -0
- package/dist/modules/release/index.d.ts.map +1 -0
- package/dist/modules/release/index.js +7 -0
- package/dist/modules/release/index.js.map +1 -0
- package/dist/modules/release/services/release-service.d.ts +34 -0
- package/dist/modules/release/services/release-service.d.ts.map +1 -0
- package/dist/modules/release/services/release-service.js +154 -0
- package/dist/modules/release/services/release-service.js.map +1 -0
- package/dist/templates/plugin/README.md.hbs +39 -0
- package/dist/templates/plugin/package.json.hbs +34 -0
- package/dist/templates/plugin/plugin.json.hbs +7 -0
- package/dist/templates/plugin/src/generator.ts.hbs +64 -0
- package/dist/templates/plugin/templates/src/.gitkeep +0 -0
- package/dist/templates/plugin/tsconfig.json +10 -0
- package/dist/templates/plugin/tsup.config.ts +9 -0
- package/dist/templates/workspace/.github/workflows/ci.yml +8 -5
- package/dist/templates/workspace/package.json +1 -0
- package/dist/templates/workspace/turbo.json +5 -0
- package/dist/utils/launch77-context.d.ts +1 -1
- package/dist/utils/launch77-context.d.ts.map +1 -1
- package/dist/utils/launch77-context.js +25 -2
- package/dist/utils/launch77-context.js.map +1 -1
- package/dist/utils/launch77-validation.d.ts +1 -1
- package/dist/utils/launch77-validation.d.ts.map +1 -1
- package/dist/utils/string.d.ts +13 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +18 -0
- package/dist/utils/string.js.map +1 -0
- package/package.json +6 -9
- package/src/cli.ts +7 -3
- package/src/infrastructure/template-generator.ts +1 -1
- package/src/infrastructure/template.ts +14 -0
- package/src/modules/app/commands/create-app.ts +1 -1
- package/src/modules/app/commands/delete-app.ts +1 -1
- package/src/modules/app/services/app-svc.ts +1 -1
- package/src/modules/app/services/manifest-svc.ts +1 -1
- package/src/modules/catalog/config/catalog-config.test.ts +1 -1
- package/src/modules/git/commands/git-connect.ts +2 -2
- package/src/modules/git/errors/git-errors.ts +7 -0
- package/src/modules/git/index.ts +8 -1
- package/src/modules/git/services/git-service.ts +12 -1
- package/src/modules/plugin/commands/plugin-create.ts +68 -0
- package/src/modules/plugin/commands/plugin-install.ts +9 -26
- package/src/modules/plugin/errors/plugin-errors.ts +87 -6
- package/src/modules/plugin/index.ts +4 -2
- package/src/modules/plugin/lib/plugin-registry.ts +14 -37
- package/src/modules/plugin/lib/plugin-resolver.test.ts +215 -0
- package/src/modules/plugin/lib/plugin-resolver.ts +160 -0
- package/src/modules/plugin/services/plugin-create-service.ts +69 -0
- package/src/modules/plugin/services/plugin-svc.ts +108 -15
- package/src/modules/release/commands/release-init.ts +102 -0
- package/src/modules/release/errors/release-errors.ts +13 -0
- package/src/modules/release/index.ts +8 -0
- package/src/modules/release/services/release-service.ts +170 -0
- package/src/utils/launch77-context.ts +29 -3
- package/src/utils/launch77-validation.ts +1 -1
- package/src/utils/string.ts +17 -0
- package/templates/plugin/README.md.hbs +39 -0
- package/templates/plugin/package.json.hbs +34 -0
- package/templates/plugin/plugin.json.hbs +7 -0
- package/templates/plugin/src/generator.ts.hbs +64 -0
- package/templates/plugin/templates/src/.gitkeep +0 -0
- package/templates/plugin/tsconfig.json +10 -0
- package/templates/plugin/tsup.config.ts +9 -0
- package/templates/workspace/.github/workflows/ci.yml +8 -5
- package/templates/workspace/package.json +1 -0
- package/templates/workspace/turbo.json +5 -0
- package/tests/integration/cli.test.ts +25 -0
- package/tests/integration/setup.ts +20 -0
- package/vitest.config.ts +9 -0
- package/vitest.integration.config.ts +9 -0
- package/dist/modules/git/commands/git-setup-releases.d.ts +0 -3
- package/dist/modules/git/commands/git-setup-releases.d.ts.map +0 -1
- package/dist/modules/git/commands/git-setup-releases.js +0 -128
- package/dist/modules/git/commands/git-setup-releases.js.map +0 -1
- package/launch77-cli-1.2.0.tgz +0 -0
- package/src/modules/git/commands/git-setup-releases.ts +0 -148
- package/src/modules/plugin/lib/launch77-workspace.code-workspace +0 -14
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-setup-releases.d.ts","sourceRoot":"","sources":["../../../../src/modules/git/commands/git-setup-releases.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAanC,wBAAgB,uBAAuB,IAAI,OAAO,CAqIjD"}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { Command } from 'commander';
|
|
3
|
-
import { password, confirm } from '@inquirer/prompts';
|
|
4
|
-
import ora from 'ora';
|
|
5
|
-
import { detectLaunch77Context } from '../../../utils/launch77-context.js';
|
|
6
|
-
import { GitHubCLINotInstalledError, GitHubNotAuthenticatedError, NotInWorkspaceError } from '../errors/git-errors.js';
|
|
7
|
-
import { GitHubService } from '../services/github-service.js';
|
|
8
|
-
import { GitService } from '../services/git-service.js';
|
|
9
|
-
export function gitSetupReleasesCommand() {
|
|
10
|
-
return new Command('git:setup-releases')
|
|
11
|
-
.description('Configure GitHub RELEASE_TOKEN for automated release PRs')
|
|
12
|
-
.option('--token <token>', 'Personal Access Token (for automation)')
|
|
13
|
-
.action(async (options) => {
|
|
14
|
-
console.log(chalk.blue('\nš Setting up GitHub release automation...\n'));
|
|
15
|
-
const cwd = process.cwd();
|
|
16
|
-
const githubService = new GitHubService();
|
|
17
|
-
const gitService = new GitService();
|
|
18
|
-
try {
|
|
19
|
-
// 1. Verify we're in a workspace root
|
|
20
|
-
const context = await detectLaunch77Context(cwd);
|
|
21
|
-
if (!context.isValid || context.locationType !== 'workspace-root') {
|
|
22
|
-
throw new NotInWorkspaceError(cwd);
|
|
23
|
-
}
|
|
24
|
-
// 2. Verify prerequisites
|
|
25
|
-
const spinner = ora('Checking prerequisites...').start();
|
|
26
|
-
await githubService.verifyPrerequisites();
|
|
27
|
-
spinner.succeed('Prerequisites verified');
|
|
28
|
-
// 3. Check if repository has a remote
|
|
29
|
-
const hasOrigin = await gitService.hasRemote(context.workspaceRoot);
|
|
30
|
-
if (!hasOrigin) {
|
|
31
|
-
console.error(chalk.red('\nā This workspace is not connected to a GitHub repository\n'));
|
|
32
|
-
console.log(chalk.gray(` Connect to GitHub first: ${chalk.cyan('launch77 git:connect')}\n`));
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
// 4. Get current repository information
|
|
36
|
-
const repoSpinner = ora('Detecting repository...').start();
|
|
37
|
-
const { owner, repo } = await githubService.getCurrentRepository(context.workspaceRoot);
|
|
38
|
-
repoSpinner.succeed(`Repository: ${owner}/${repo}`);
|
|
39
|
-
// 5. Explain what RELEASE_TOKEN is
|
|
40
|
-
console.log(chalk.cyan('\nš About RELEASE_TOKEN:\n'));
|
|
41
|
-
console.log(chalk.white('The RELEASE_TOKEN is a GitHub Personal Access Token (PAT) that allows'));
|
|
42
|
-
console.log(chalk.white('the Changesets action to create Pull Requests for version updates.\n'));
|
|
43
|
-
console.log(chalk.white('Why is this needed?'));
|
|
44
|
-
console.log(chalk.gray(' ⢠The default GITHUB_TOKEN has limited permissions'));
|
|
45
|
-
console.log(chalk.gray(' ⢠Creating PRs that trigger CI requires a PAT'));
|
|
46
|
-
console.log(chalk.gray(' ⢠This enables automated release workflows\n'));
|
|
47
|
-
console.log(chalk.white('Required permissions:'));
|
|
48
|
-
console.log(chalk.gray(' ⢠Contents: Read and write'));
|
|
49
|
-
console.log(chalk.gray(' ⢠Pull requests: Read and write\n'));
|
|
50
|
-
// 6. Provide link to create PAT
|
|
51
|
-
const tokenUrl = 'https://github.com/settings/personal-access-tokens/new';
|
|
52
|
-
console.log(chalk.cyan('š Create your token:'));
|
|
53
|
-
console.log(chalk.gray(` ${chalk.cyan(tokenUrl)}`));
|
|
54
|
-
console.log(chalk.gray(` Name: Launch77 Release Token`));
|
|
55
|
-
console.log(chalk.gray(` Permissions: Contents (Read and write), Pull requests (Read and write)\n`));
|
|
56
|
-
// 7. Get the token (from option or prompt)
|
|
57
|
-
let token;
|
|
58
|
-
if (options.token) {
|
|
59
|
-
token = options.token;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
token = await password({
|
|
63
|
-
message: 'Paste your Personal Access Token (PAT):',
|
|
64
|
-
mask: '*',
|
|
65
|
-
validate: (value) => {
|
|
66
|
-
if (!value || value.trim().length === 0) {
|
|
67
|
-
return 'Token cannot be empty';
|
|
68
|
-
}
|
|
69
|
-
// GitHub PATs start with specific prefixes
|
|
70
|
-
if (!value.startsWith('ghp_') && !value.startsWith('github_pat_')) {
|
|
71
|
-
return 'Invalid token format. GitHub PATs should start with "ghp_" or "github_pat_"';
|
|
72
|
-
}
|
|
73
|
-
return true;
|
|
74
|
-
},
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
// 8. Confirm if token already might exist
|
|
78
|
-
console.log(chalk.yellow('\nā Note: This will overwrite any existing RELEASE_TOKEN secret\n'));
|
|
79
|
-
const shouldContinue = await confirm({
|
|
80
|
-
message: 'Continue and set RELEASE_TOKEN?',
|
|
81
|
-
default: true,
|
|
82
|
-
});
|
|
83
|
-
if (!shouldContinue) {
|
|
84
|
-
console.log(chalk.green('\nā
No changes made.\n'));
|
|
85
|
-
process.exit(0);
|
|
86
|
-
}
|
|
87
|
-
// 9. Set the repository secret
|
|
88
|
-
const setSpinner = ora('Setting RELEASE_TOKEN secret...').start();
|
|
89
|
-
try {
|
|
90
|
-
await githubService.setRepositorySecret(owner, repo, 'RELEASE_TOKEN', token);
|
|
91
|
-
setSpinner.succeed('RELEASE_TOKEN configured successfully!');
|
|
92
|
-
// Success message
|
|
93
|
-
console.log(chalk.green('\nā
Release automation is ready!\n'));
|
|
94
|
-
console.log(chalk.white('What happens now:'));
|
|
95
|
-
console.log(chalk.gray(' ⢠When you push to main, CI runs as usual'));
|
|
96
|
-
console.log(chalk.gray(' ⢠Changesets detects version changes'));
|
|
97
|
-
console.log(chalk.gray(' ⢠A "Version Packages" PR is created automatically'));
|
|
98
|
-
console.log(chalk.gray(' ⢠Merge the PR to publish your packages\n'));
|
|
99
|
-
console.log(chalk.cyan('š Learn more:'));
|
|
100
|
-
console.log(chalk.gray(` ${chalk.cyan('https://github.com/changesets/changesets')}\n`));
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
setSpinner.fail('Failed to set RELEASE_TOKEN');
|
|
104
|
-
throw error;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
if (error instanceof GitHubCLINotInstalledError) {
|
|
109
|
-
console.error(chalk.red(`\nā ${error.message}\n`));
|
|
110
|
-
console.log(chalk.gray(` Install with: ${chalk.cyan('brew install gh')}\n`));
|
|
111
|
-
console.log(chalk.gray(` Or visit: ${chalk.cyan('https://cli.github.com/')}\n`));
|
|
112
|
-
process.exit(1);
|
|
113
|
-
}
|
|
114
|
-
if (error instanceof GitHubNotAuthenticatedError) {
|
|
115
|
-
console.error(chalk.red(`\nā ${error.message}\n`));
|
|
116
|
-
console.log(chalk.gray(` Authenticate with: ${chalk.cyan('gh auth login')}\n`));
|
|
117
|
-
process.exit(1);
|
|
118
|
-
}
|
|
119
|
-
if (error instanceof NotInWorkspaceError) {
|
|
120
|
-
console.error(chalk.red(`\nā ${error.message}\n`));
|
|
121
|
-
console.log(chalk.gray(` This command must be run from a Launch77 workspace root directory\n`));
|
|
122
|
-
process.exit(1);
|
|
123
|
-
}
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=git-setup-releases.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-setup-releases.js","sourceRoot":"","sources":["../../../../src/modules/git/commands/git-setup-releases.ts"],"names":[],"mappings":"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"}
|
package/launch77-cli-1.2.0.tgz
DELETED
|
Binary file
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
import { Command } from 'commander'
|
|
3
|
-
import { password, confirm } from '@inquirer/prompts'
|
|
4
|
-
import ora from 'ora'
|
|
5
|
-
|
|
6
|
-
import { detectLaunch77Context } from '../../../utils/launch77-context.js'
|
|
7
|
-
import { GitHubCLINotInstalledError, GitHubNotAuthenticatedError, NotInWorkspaceError } from '../errors/git-errors.js'
|
|
8
|
-
import { GitHubService } from '../services/github-service.js'
|
|
9
|
-
import { GitService } from '../services/git-service.js'
|
|
10
|
-
|
|
11
|
-
interface SetupReleasesOptions {
|
|
12
|
-
token?: string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function gitSetupReleasesCommand(): Command {
|
|
16
|
-
return new Command('git:setup-releases')
|
|
17
|
-
.description('Configure GitHub RELEASE_TOKEN for automated release PRs')
|
|
18
|
-
.option('--token <token>', 'Personal Access Token (for automation)')
|
|
19
|
-
.action(async (options: SetupReleasesOptions) => {
|
|
20
|
-
console.log(chalk.blue('\nš Setting up GitHub release automation...\n'))
|
|
21
|
-
|
|
22
|
-
const cwd = process.cwd()
|
|
23
|
-
const githubService = new GitHubService()
|
|
24
|
-
const gitService = new GitService()
|
|
25
|
-
|
|
26
|
-
try {
|
|
27
|
-
// 1. Verify we're in a workspace root
|
|
28
|
-
const context = await detectLaunch77Context(cwd)
|
|
29
|
-
if (!context.isValid || context.locationType !== 'workspace-root') {
|
|
30
|
-
throw new NotInWorkspaceError(cwd)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// 2. Verify prerequisites
|
|
34
|
-
const spinner = ora('Checking prerequisites...').start()
|
|
35
|
-
|
|
36
|
-
await githubService.verifyPrerequisites()
|
|
37
|
-
|
|
38
|
-
spinner.succeed('Prerequisites verified')
|
|
39
|
-
|
|
40
|
-
// 3. Check if repository has a remote
|
|
41
|
-
const hasOrigin = await gitService.hasRemote(context.workspaceRoot)
|
|
42
|
-
if (!hasOrigin) {
|
|
43
|
-
console.error(chalk.red('\nā This workspace is not connected to a GitHub repository\n'))
|
|
44
|
-
console.log(chalk.gray(` Connect to GitHub first: ${chalk.cyan('launch77 git:connect')}\n`))
|
|
45
|
-
process.exit(1)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// 4. Get current repository information
|
|
49
|
-
const repoSpinner = ora('Detecting repository...').start()
|
|
50
|
-
const { owner, repo } = await githubService.getCurrentRepository(context.workspaceRoot)
|
|
51
|
-
repoSpinner.succeed(`Repository: ${owner}/${repo}`)
|
|
52
|
-
|
|
53
|
-
// 5. Explain what RELEASE_TOKEN is
|
|
54
|
-
console.log(chalk.cyan('\nš About RELEASE_TOKEN:\n'))
|
|
55
|
-
console.log(chalk.white('The RELEASE_TOKEN is a GitHub Personal Access Token (PAT) that allows'))
|
|
56
|
-
console.log(chalk.white('the Changesets action to create Pull Requests for version updates.\n'))
|
|
57
|
-
console.log(chalk.white('Why is this needed?'))
|
|
58
|
-
console.log(chalk.gray(' ⢠The default GITHUB_TOKEN has limited permissions'))
|
|
59
|
-
console.log(chalk.gray(' ⢠Creating PRs that trigger CI requires a PAT'))
|
|
60
|
-
console.log(chalk.gray(' ⢠This enables automated release workflows\n'))
|
|
61
|
-
console.log(chalk.white('Required permissions:'))
|
|
62
|
-
console.log(chalk.gray(' ⢠Contents: Read and write'))
|
|
63
|
-
console.log(chalk.gray(' ⢠Pull requests: Read and write\n'))
|
|
64
|
-
|
|
65
|
-
// 6. Provide link to create PAT
|
|
66
|
-
const tokenUrl = 'https://github.com/settings/personal-access-tokens/new'
|
|
67
|
-
console.log(chalk.cyan('š Create your token:'))
|
|
68
|
-
console.log(chalk.gray(` ${chalk.cyan(tokenUrl)}`))
|
|
69
|
-
console.log(chalk.gray(` Name: Launch77 Release Token`))
|
|
70
|
-
console.log(chalk.gray(` Permissions: Contents (Read and write), Pull requests (Read and write)\n`))
|
|
71
|
-
|
|
72
|
-
// 7. Get the token (from option or prompt)
|
|
73
|
-
let token: string
|
|
74
|
-
if (options.token) {
|
|
75
|
-
token = options.token
|
|
76
|
-
} else {
|
|
77
|
-
token = await password({
|
|
78
|
-
message: 'Paste your Personal Access Token (PAT):',
|
|
79
|
-
mask: '*',
|
|
80
|
-
validate: (value) => {
|
|
81
|
-
if (!value || value.trim().length === 0) {
|
|
82
|
-
return 'Token cannot be empty'
|
|
83
|
-
}
|
|
84
|
-
// GitHub PATs start with specific prefixes
|
|
85
|
-
if (!value.startsWith('ghp_') && !value.startsWith('github_pat_')) {
|
|
86
|
-
return 'Invalid token format. GitHub PATs should start with "ghp_" or "github_pat_"'
|
|
87
|
-
}
|
|
88
|
-
return true
|
|
89
|
-
},
|
|
90
|
-
})
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// 8. Confirm if token already might exist
|
|
94
|
-
console.log(chalk.yellow('\nā Note: This will overwrite any existing RELEASE_TOKEN secret\n'))
|
|
95
|
-
const shouldContinue = await confirm({
|
|
96
|
-
message: 'Continue and set RELEASE_TOKEN?',
|
|
97
|
-
default: true,
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
if (!shouldContinue) {
|
|
101
|
-
console.log(chalk.green('\nā
No changes made.\n'))
|
|
102
|
-
process.exit(0)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// 9. Set the repository secret
|
|
106
|
-
const setSpinner = ora('Setting RELEASE_TOKEN secret...').start()
|
|
107
|
-
|
|
108
|
-
try {
|
|
109
|
-
await githubService.setRepositorySecret(owner, repo, 'RELEASE_TOKEN', token)
|
|
110
|
-
setSpinner.succeed('RELEASE_TOKEN configured successfully!')
|
|
111
|
-
|
|
112
|
-
// Success message
|
|
113
|
-
console.log(chalk.green('\nā
Release automation is ready!\n'))
|
|
114
|
-
console.log(chalk.white('What happens now:'))
|
|
115
|
-
console.log(chalk.gray(' ⢠When you push to main, CI runs as usual'))
|
|
116
|
-
console.log(chalk.gray(' ⢠Changesets detects version changes'))
|
|
117
|
-
console.log(chalk.gray(' ⢠A "Version Packages" PR is created automatically'))
|
|
118
|
-
console.log(chalk.gray(' ⢠Merge the PR to publish your packages\n'))
|
|
119
|
-
console.log(chalk.cyan('š Learn more:'))
|
|
120
|
-
console.log(chalk.gray(` ${chalk.cyan('https://github.com/changesets/changesets')}\n`))
|
|
121
|
-
} catch (error) {
|
|
122
|
-
setSpinner.fail('Failed to set RELEASE_TOKEN')
|
|
123
|
-
throw error
|
|
124
|
-
}
|
|
125
|
-
} catch (error) {
|
|
126
|
-
if (error instanceof GitHubCLINotInstalledError) {
|
|
127
|
-
console.error(chalk.red(`\nā ${error.message}\n`))
|
|
128
|
-
console.log(chalk.gray(` Install with: ${chalk.cyan('brew install gh')}\n`))
|
|
129
|
-
console.log(chalk.gray(` Or visit: ${chalk.cyan('https://cli.github.com/')}\n`))
|
|
130
|
-
process.exit(1)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (error instanceof GitHubNotAuthenticatedError) {
|
|
134
|
-
console.error(chalk.red(`\nā ${error.message}\n`))
|
|
135
|
-
console.log(chalk.gray(` Authenticate with: ${chalk.cyan('gh auth login')}\n`))
|
|
136
|
-
process.exit(1)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
if (error instanceof NotInWorkspaceError) {
|
|
140
|
-
console.error(chalk.red(`\nā ${error.message}\n`))
|
|
141
|
-
console.log(chalk.gray(` This command must be run from a Launch77 workspace root directory\n`))
|
|
142
|
-
process.exit(1)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
throw error
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
}
|