just-ship-it 0.0.3 → 1.0.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/dist/git.js DELETED
@@ -1,153 +0,0 @@
1
- import { simpleGit } from 'simple-git';
2
- import * as fs from 'fs';
3
- import * as path from 'path';
4
- import { logger } from './logger.js';
5
- import { getTempDir } from './config.js';
6
- import { randomBytes } from 'crypto';
7
- import { detectWorkspace } from './workspace.js';
8
- export class GitOperations {
9
- git;
10
- workDir;
11
- config;
12
- constructor(config) {
13
- this.config = config;
14
- this.workDir = path.join(getTempDir(), `${config.repo}-${randomBytes(4).toString('hex')}`);
15
- this.git = simpleGit();
16
- }
17
- getWorkDir() {
18
- return this.workDir;
19
- }
20
- getGit() {
21
- return this.git;
22
- }
23
- async getWorkspaceInfo() {
24
- return detectWorkspace(this.workDir);
25
- }
26
- async clone() {
27
- logger.detail(`Cloning ${this.config.cloneUrl} to ${this.workDir}`);
28
- // Ensure temp directory exists
29
- const tempDir = getTempDir();
30
- if (!fs.existsSync(tempDir)) {
31
- fs.mkdirSync(tempDir, { recursive: true });
32
- }
33
- // Remove existing directory if it exists
34
- if (fs.existsSync(this.workDir)) {
35
- fs.rmSync(this.workDir, { recursive: true });
36
- }
37
- await this.git.clone(this.config.cloneUrl, this.workDir, ['--depth', '1']);
38
- this.git = simpleGit(this.workDir);
39
- logger.detail(`Cloned to ${this.workDir}`);
40
- }
41
- async createBranch(branchName) {
42
- logger.detail(`Creating branch: ${branchName}`);
43
- await this.git.checkoutLocalBranch(branchName);
44
- logger.detail(`Switched to branch: ${branchName}`);
45
- }
46
- async generateChangeset(options, changesetData) {
47
- const changesetDir = path.join(this.workDir, '.changeset');
48
- // Generate a unique changeset name
49
- const changesetId = `release-${randomBytes(4).toString('hex')}`;
50
- const changesetPath = path.join(changesetDir, `${changesetId}.md`);
51
- // Build frontmatter
52
- let frontmatter = '---\n';
53
- if ('packages' in changesetData) {
54
- // Multi-package changeset
55
- for (const [pkgName, type] of changesetData.packages) {
56
- frontmatter += `"${pkgName}": ${type}\n`;
57
- }
58
- }
59
- else {
60
- // Single package (backward compatible)
61
- frontmatter += `"${changesetData.packageName}": ${options.type}\n`;
62
- }
63
- frontmatter += '---\n\n';
64
- const content = frontmatter + options.message;
65
- logger.detail(`Writing changeset to ${changesetPath}`);
66
- fs.writeFileSync(changesetPath, content);
67
- return changesetId;
68
- }
69
- async stageAndCommit(message) {
70
- logger.detail('Staging changes...');
71
- await this.git.add('.changeset/*');
72
- logger.detail(`Committing: ${message}`);
73
- await this.git.commit(message);
74
- }
75
- async push(branchName) {
76
- logger.detail(`Pushing branch ${branchName} to origin...`);
77
- await this.git.push('origin', branchName);
78
- logger.detail('Push complete');
79
- }
80
- async getCurrentCommitSha() {
81
- const log = await this.git.log(['-1']);
82
- return log.latest?.hash || '';
83
- }
84
- async cleanup() {
85
- if (fs.existsSync(this.workDir)) {
86
- logger.detail(`Cleaning up ${this.workDir}`);
87
- fs.rmSync(this.workDir, { recursive: true });
88
- }
89
- }
90
- async getPackageName() {
91
- const packageJsonPath = path.join(this.workDir, 'package.json');
92
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
93
- return packageJson.name;
94
- }
95
- async getPackageVersion() {
96
- const packageJsonPath = path.join(this.workDir, 'package.json');
97
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
98
- return packageJson.version;
99
- }
100
- async getRecentCommits(count = 10) {
101
- logger.detail(`Fetching last ${count} commits...`);
102
- // Need to fetch full history for commits
103
- await this.git.fetch(['--unshallow']).catch(() => {
104
- // Already unshallowed or full clone
105
- });
106
- const log = await this.git.log([`-${count}`, '--oneline']);
107
- return log.all.map(commit => commit.message);
108
- }
109
- async getLatestVersionTag() {
110
- logger.detail('Finding latest version tag...');
111
- // Fetch tags
112
- await this.git.fetch(['--tags']);
113
- // Get all tags that start with 'v' and sort by version
114
- const tags = await this.git.tags(['--sort=-v:refname', 'v*']);
115
- if (tags.all.length === 0) {
116
- logger.detail('No version tags found');
117
- return null;
118
- }
119
- const latestTag = tags.all[0];
120
- logger.detail(`Latest version tag: ${latestTag}`);
121
- return latestTag;
122
- }
123
- async getDiffSinceTag(tag) {
124
- logger.detail(`Getting diff since ${tag}...`);
125
- // Get the diff between the tag and HEAD
126
- const diff = await this.git.diff([tag, 'HEAD', '--stat']);
127
- return diff;
128
- }
129
- async getDiffSummary(tag) {
130
- logger.detail(`Getting diff summary since ${tag}...`);
131
- const diffSummary = await this.git.diffSummary([tag, 'HEAD']);
132
- return {
133
- files: diffSummary.files.map(f => f.file),
134
- insertions: diffSummary.insertions,
135
- deletions: diffSummary.deletions,
136
- };
137
- }
138
- async getCommitsSinceTag(tag) {
139
- logger.detail(`Getting commits since ${tag}...`);
140
- const log = await this.git.log([`${tag}..HEAD`, '--oneline']);
141
- return log.all.map(commit => commit.message);
142
- }
143
- async getFullDiffSinceTag(tag, maxLength = 10000) {
144
- logger.detail(`Getting full diff since ${tag}...`);
145
- // Get the actual code diff (limited to avoid huge outputs)
146
- const diff = await this.git.diff([tag, 'HEAD']);
147
- if (diff.length > maxLength) {
148
- return diff.slice(0, maxLength) + '\n\n... (diff truncated)';
149
- }
150
- return diff;
151
- }
152
- }
153
- //# sourceMappingURL=git.js.map
package/dist/git.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
package/dist/github.d.ts DELETED
@@ -1,22 +0,0 @@
1
- import { RepoConfig, PullRequest, CheckRun } from './types.js';
2
- export declare class GitHubOperations {
3
- private config;
4
- constructor(config: RepoConfig);
5
- private exec;
6
- private execJson;
7
- createPullRequest(branchName: string, title: string, body: string): Promise<PullRequest>;
8
- getPullRequest(prNumber: number): Promise<PullRequest>;
9
- getCheckRuns(prNumber: number): Promise<CheckRun[]>;
10
- private mapStatus;
11
- private mapConclusion;
12
- waitForChecks(prNumber: number, timeoutMs?: number, pollIntervalMs?: number): Promise<{
13
- success: boolean;
14
- checks: CheckRun[];
15
- }>;
16
- mergePullRequest(prNumber: number, mergeMethod?: 'merge' | 'squash' | 'rebase'): Promise<void>;
17
- deleteBranch(branchName: string): Promise<void>;
18
- findVersionPackagesPR(): Promise<PullRequest | null>;
19
- waitForVersionPackagesPR(timeoutMs?: number, pollIntervalMs?: number): Promise<PullRequest>;
20
- private sleep;
21
- }
22
- //# sourceMappingURL=github.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG/D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,QAAQ;IAKV,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,CAAC;IA0CjB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BtD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA6BzD,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,aAAa;IAmBf,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAiB,EAC1B,cAAc,SAAQ,GACrB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;IAwF9C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,OAAO,GAAG,QAAQ,GAAG,QAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,qBAAqB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAoCpD,wBAAwB,CAC5B,SAAS,SAAiB,EAC1B,cAAc,SAAQ,GACrB,OAAO,CAAC,WAAW,CAAC;IAiBvB,OAAO,CAAC,KAAK;CAGd"}
package/dist/github.js DELETED
@@ -1,237 +0,0 @@
1
- import { execSync } from 'child_process';
2
- import { logger } from './logger.js';
3
- export class GitHubOperations {
4
- config;
5
- constructor(config) {
6
- this.config = config;
7
- }
8
- exec(command) {
9
- logger.detail(`Running: ${command}`);
10
- return execSync(command, { encoding: 'utf-8' }).trim();
11
- }
12
- execJson(command) {
13
- const output = this.exec(command);
14
- return JSON.parse(output);
15
- }
16
- async createPullRequest(branchName, title, body) {
17
- logger.detail(`Creating PR: ${title}`);
18
- logger.detail(` Head: ${branchName}`);
19
- logger.detail(` Base: ${this.config.baseBranch}`);
20
- // Create the PR (returns the URL)
21
- const prUrl = this.exec(`gh pr create \
22
- --repo "${this.config.owner}/${this.config.repo}" \
23
- --head "${branchName}" \
24
- --base "${this.config.baseBranch}" \
25
- --title "${title.replace(/"/g, '\\"')}" \
26
- --body "${body.replace(/"/g, '\\"')}"`);
27
- // Extract PR number from URL (e.g., https://github.com/owner/repo/pull/123)
28
- const prNumberMatch = prUrl.match(/\/pull\/(\d+)/);
29
- if (!prNumberMatch) {
30
- throw new Error(`Could not parse PR number from URL: ${prUrl}`);
31
- }
32
- const prNumber = parseInt(prNumberMatch[1], 10);
33
- // Get full PR details
34
- const result = this.execJson(`gh pr view ${prNumber} \
35
- --repo "${this.config.owner}/${this.config.repo}" \
36
- --json number,url,headRefName,headRefOid,state`);
37
- return {
38
- number: result.number,
39
- html_url: result.url,
40
- head: {
41
- ref: result.headRefName,
42
- sha: result.headRefOid,
43
- },
44
- state: result.state,
45
- };
46
- }
47
- async getPullRequest(prNumber) {
48
- const result = this.execJson(`gh pr view ${prNumber} \
49
- --repo "${this.config.owner}/${this.config.repo}" \
50
- --json number,url,headRefName,headRefOid,state,mergeable,merged`);
51
- return {
52
- number: result.number,
53
- html_url: result.url,
54
- head: {
55
- ref: result.headRefName,
56
- sha: result.headRefOid,
57
- },
58
- state: result.state,
59
- mergeable: result.mergeable === 'MERGEABLE',
60
- merged: result.merged,
61
- };
62
- }
63
- async getCheckRuns(prNumber) {
64
- try {
65
- const result = this.execJson(`gh pr checks ${prNumber} \
66
- --repo "${this.config.owner}/${this.config.repo}" \
67
- --json name,status,conclusion,workflowName 2>/dev/null || echo '{"statusCheckRollup":[]}'`);
68
- if (!result.statusCheckRollup) {
69
- return [];
70
- }
71
- return result.statusCheckRollup.map((check) => ({
72
- id: 0,
73
- name: check.workflowName || check.name,
74
- status: this.mapStatus(check.status),
75
- conclusion: this.mapConclusion(check.conclusion),
76
- }));
77
- }
78
- catch {
79
- return [];
80
- }
81
- }
82
- mapStatus(status) {
83
- switch (status?.toUpperCase()) {
84
- case 'COMPLETED':
85
- return 'completed';
86
- case 'IN_PROGRESS':
87
- case 'PENDING':
88
- return 'in_progress';
89
- default:
90
- return 'queued';
91
- }
92
- }
93
- mapConclusion(conclusion) {
94
- switch (conclusion?.toUpperCase()) {
95
- case 'SUCCESS':
96
- return 'success';
97
- case 'FAILURE':
98
- return 'failure';
99
- case 'NEUTRAL':
100
- return 'neutral';
101
- case 'CANCELLED':
102
- return 'cancelled';
103
- case 'SKIPPED':
104
- return 'skipped';
105
- case 'TIMED_OUT':
106
- return 'timed_out';
107
- default:
108
- return null;
109
- }
110
- }
111
- async waitForChecks(prNumber, timeoutMs = 30 * 60 * 1000, pollIntervalMs = 15000) {
112
- const startTime = Date.now();
113
- while (Date.now() - startTime < timeoutMs) {
114
- // Use gh pr checks which shows the status nicely
115
- let checks;
116
- try {
117
- const output = this.exec(`gh pr checks ${prNumber} --repo "${this.config.owner}/${this.config.repo}" 2>&1 || true`);
118
- // Parse the tabular output from gh pr checks
119
- const lines = output.split('\n').filter(line => line.trim());
120
- checks = [];
121
- for (const line of lines) {
122
- // Skip header or empty lines
123
- if (line.includes('Some checks are still pending') ||
124
- line.includes('All checks were successful') ||
125
- line.includes('Some checks were not successful')) {
126
- continue;
127
- }
128
- // Parse line format: "NAME\tSTATUS\tTIME\tURL"
129
- const parts = line.split('\t');
130
- if (parts.length >= 2) {
131
- const name = parts[0].trim();
132
- const statusStr = parts[1].trim().toLowerCase();
133
- let status = 'queued';
134
- let conclusion = null;
135
- if (statusStr === 'pass' || statusStr === 'success') {
136
- status = 'completed';
137
- conclusion = 'success';
138
- }
139
- else if (statusStr === 'fail' || statusStr === 'failure') {
140
- status = 'completed';
141
- conclusion = 'failure';
142
- }
143
- else if (statusStr === 'pending' || statusStr === 'in_progress') {
144
- status = 'in_progress';
145
- }
146
- else if (statusStr === 'skipping' || statusStr === 'skipped') {
147
- status = 'completed';
148
- conclusion = 'skipped';
149
- }
150
- if (name) {
151
- checks.push({ id: 0, name, status, conclusion });
152
- }
153
- }
154
- }
155
- }
156
- catch {
157
- checks = [];
158
- }
159
- if (checks.length === 0) {
160
- logger.detail('No checks found yet, waiting...');
161
- await this.sleep(pollIntervalMs);
162
- continue;
163
- }
164
- const allCompleted = checks.every(check => check.status === 'completed');
165
- logger.blank();
166
- logger.info(`Check status (${checks.length} checks):`);
167
- for (const check of checks) {
168
- logger.checkStatus(check.name, check.status, check.conclusion);
169
- }
170
- if (allCompleted) {
171
- const allSuccess = checks.every(check => check.conclusion === 'success' || check.conclusion === 'skipped');
172
- return { success: allSuccess, checks };
173
- }
174
- const completed = checks.filter(c => c.status === 'completed').length;
175
- const inProgress = checks.filter(c => c.status === 'in_progress').length;
176
- const queued = checks.filter(c => c.status === 'queued').length;
177
- logger.detail(`Progress: ${completed}/${checks.length} complete, ${inProgress} in progress, ${queued} queued`);
178
- await this.sleep(pollIntervalMs);
179
- }
180
- throw new Error('Timeout waiting for checks to complete');
181
- }
182
- async mergePullRequest(prNumber, mergeMethod = 'squash') {
183
- logger.detail(`Merging PR #${prNumber} using ${mergeMethod} (admin)...`);
184
- this.exec(`gh pr merge ${prNumber} \
185
- --repo "${this.config.owner}/${this.config.repo}" \
186
- --${mergeMethod} \
187
- --admin \
188
- --delete-branch`);
189
- logger.detail('PR merged successfully');
190
- }
191
- async deleteBranch(branchName) {
192
- // Branch deletion is handled by --delete-branch in merge
193
- logger.detail(`Branch ${branchName} will be deleted with PR merge`);
194
- }
195
- async findVersionPackagesPR() {
196
- logger.detail('Looking for Version Packages PR...');
197
- try {
198
- const result = this.execJson(`gh pr list \
199
- --repo "${this.config.owner}/${this.config.repo}" \
200
- --state open \
201
- --head "changeset-release/${this.config.baseBranch}" \
202
- --json number,url,headRefName,headRefOid,state,title`);
203
- if (result.length > 0) {
204
- const pr = result[0];
205
- return {
206
- number: pr.number,
207
- html_url: pr.url,
208
- head: {
209
- ref: pr.headRefName,
210
- sha: pr.headRefOid,
211
- },
212
- state: pr.state,
213
- };
214
- }
215
- }
216
- catch {
217
- // No PR found
218
- }
219
- return null;
220
- }
221
- async waitForVersionPackagesPR(timeoutMs = 10 * 60 * 1000, pollIntervalMs = 10000) {
222
- const startTime = Date.now();
223
- while (Date.now() - startTime < timeoutMs) {
224
- const pr = await this.findVersionPackagesPR();
225
- if (pr) {
226
- return pr;
227
- }
228
- logger.detail('Version Packages PR not found yet, waiting...');
229
- await this.sleep(pollIntervalMs);
230
- }
231
- throw new Error('Timeout waiting for Version Packages PR');
232
- }
233
- sleep(ms) {
234
- return new Promise(resolve => setTimeout(resolve, ms));
235
- }
236
- }
237
- //# sourceMappingURL=github.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js DELETED
@@ -1,187 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import { text, select, isCancel, cancel, confirm } from '@clack/prompts';
4
- import { getRepoConfig, addRepoConfig, listRepos } from './config.js';
5
- import { runRelease } from './release.js';
6
- import { logger } from './logger.js';
7
- const program = new Command();
8
- program
9
- .name('just-ship-it')
10
- .description('CLI tool to automate changeset-based releases powered by OpenRouter')
11
- .version('0.0.1');
12
- program
13
- .argument('[repo]', 'Repository name to release')
14
- .option('-t, --type <type>', 'Release type (patch, minor, major)')
15
- .option('-m, --message <message>', 'Release message')
16
- .option('-y, --yes', 'Skip confirmations')
17
- .option('--model <model>', 'AI model to use')
18
- .action(async (repo, opts) => {
19
- if (opts.model) {
20
- process.env.OPENROUTER_MODEL = opts.model;
21
- }
22
- // If no repo specified, show list and prompt
23
- if (!repo) {
24
- const repos = listRepos();
25
- if (repos.length === 0) {
26
- logger.error('No repositories configured.');
27
- logger.info('Add a repository with: npx just-ship-it add <name>');
28
- process.exit(1);
29
- }
30
- const selected = await select({
31
- message: 'Select a repository to release:',
32
- options: repos.map(r => ({ label: r, value: r })),
33
- });
34
- if (isCancel(selected)) {
35
- cancel('Operation cancelled');
36
- process.exit(0);
37
- }
38
- repo = selected;
39
- }
40
- const config = getRepoConfig(repo);
41
- if (!config) {
42
- logger.error(`Repository "${repo}" not found.`);
43
- logger.info('Available repositories: ' + listRepos().join(', '));
44
- logger.info('Add a new repository with: npx just-ship-it add <name>');
45
- process.exit(1);
46
- }
47
- const options = {
48
- skipConfirmations: opts.yes,
49
- };
50
- if (opts.type && ['patch', 'minor', 'major'].includes(opts.type)) {
51
- options.type = opts.type;
52
- }
53
- if (opts.message) {
54
- options.message = opts.message;
55
- }
56
- await runRelease(config, options);
57
- });
58
- program
59
- .command('add <name>')
60
- .description('Add a new repository configuration')
61
- .option('--model <model>', 'Default model for this repository')
62
- .option('--monorepo', 'Configure as monorepo')
63
- .option('--lockstep', 'Use lockstep versioning (all packages bump together)')
64
- .option('--selective', 'Use selective versioning (only changed packages bump)')
65
- .action(async (name, opts) => {
66
- logger.info(`Adding repository: ${name}`);
67
- const ownerResult = await text({
68
- message: 'GitHub owner (org or user):',
69
- validate: (v) => {
70
- if (!v || v.length === 0)
71
- return 'Owner is required';
72
- },
73
- });
74
- if (isCancel(ownerResult)) {
75
- cancel('Operation cancelled');
76
- process.exit(0);
77
- }
78
- const owner = ownerResult;
79
- const repoResult = await text({
80
- message: 'Repository name:',
81
- defaultValue: name,
82
- validate: (v) => {
83
- if (!v || v.length === 0)
84
- return 'Repo is required';
85
- },
86
- });
87
- if (isCancel(repoResult)) {
88
- cancel('Operation cancelled');
89
- process.exit(0);
90
- }
91
- const repo = repoResult;
92
- const baseBranchResult = await text({
93
- message: 'Base branch:',
94
- defaultValue: 'main',
95
- });
96
- if (isCancel(baseBranchResult)) {
97
- cancel('Operation cancelled');
98
- process.exit(0);
99
- }
100
- const baseBranch = baseBranchResult;
101
- const cloneUrl = `https://github.com/${owner}/${repo}.git`;
102
- const modelResult = opts.model || await text({
103
- message: 'AI model (optional, press Enter for default):',
104
- placeholder: 'anthropic/claude-opus-4.5',
105
- defaultValue: '',
106
- });
107
- if (isCancel(modelResult)) {
108
- cancel('Operation cancelled');
109
- process.exit(0);
110
- }
111
- const model = modelResult;
112
- // Monorepo configuration
113
- let monorepoConfig;
114
- if (opts.monorepo || opts.lockstep || opts.selective) {
115
- // User specified via flags
116
- const mode = opts.lockstep ? 'lockstep' : 'selective';
117
- monorepoConfig = { mode };
118
- }
119
- else {
120
- // Prompt user
121
- const isMonorepo = await confirm({
122
- message: 'Is this a monorepo with multiple packages?',
123
- initialValue: false,
124
- });
125
- if (isCancel(isMonorepo)) {
126
- cancel('Operation cancelled');
127
- process.exit(0);
128
- }
129
- if (isMonorepo) {
130
- const modeResult = await select({
131
- message: 'Versioning mode:',
132
- options: [
133
- {
134
- label: 'selective - Only bump changed packages',
135
- value: 'selective',
136
- hint: 'Recommended for independent packages'
137
- },
138
- {
139
- label: 'lockstep - Bump all packages together',
140
- value: 'lockstep',
141
- hint: 'Use for tightly coupled packages'
142
- },
143
- ],
144
- initialValue: 'selective',
145
- });
146
- if (isCancel(modeResult)) {
147
- cancel('Operation cancelled');
148
- process.exit(0);
149
- }
150
- monorepoConfig = { mode: modeResult };
151
- }
152
- }
153
- const config = {
154
- owner,
155
- repo,
156
- baseBranch,
157
- cloneUrl,
158
- ...(model && { model }),
159
- ...(monorepoConfig && { monorepo: monorepoConfig }),
160
- };
161
- addRepoConfig(name, config);
162
- logger.success(`Repository "${name}" added!`);
163
- logger.detail(`Clone URL: ${cloneUrl}`);
164
- if (monorepoConfig) {
165
- logger.detail(`Monorepo mode: ${monorepoConfig.mode}`);
166
- }
167
- });
168
- program
169
- .command('list')
170
- .description('List configured repositories')
171
- .action(() => {
172
- const repos = listRepos();
173
- if (repos.length === 0) {
174
- logger.info('No repositories configured.');
175
- logger.info('Add a repository with: npx just-ship-it add <name>');
176
- return;
177
- }
178
- logger.info('Configured repositories:');
179
- for (const repo of repos) {
180
- const config = getRepoConfig(repo);
181
- if (config) {
182
- console.log(` - ${repo} (${config.owner}/${config.repo})`);
183
- }
184
- }
185
- });
186
- program.parse();
187
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}