just-ship-it 0.0.1

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/github.js ADDED
@@ -0,0 +1,237 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,187 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare class Logger {
2
+ private verbose;
3
+ constructor(verbose?: boolean);
4
+ info(message: string): void;
5
+ success(message: string): void;
6
+ warn(message: string): void;
7
+ error(message: string): void;
8
+ step(step: number, total: number, message: string): void;
9
+ detail(message: string): void;
10
+ blank(): void;
11
+ header(message: string): void;
12
+ divider(): void;
13
+ waiting(message: string): void;
14
+ checkStatus(name: string, status: string, conclusion: string | null): void;
15
+ }
16
+ export declare const logger: Logger;
17
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,UAAO;IAI1B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ7B,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAS3E;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,54 @@
1
+ import chalk from 'chalk';
2
+ export class Logger {
3
+ verbose;
4
+ constructor(verbose = true) {
5
+ this.verbose = verbose;
6
+ }
7
+ info(message) {
8
+ console.log(chalk.blue('[info]'), message);
9
+ }
10
+ success(message) {
11
+ console.log(chalk.green('[ok]'), message);
12
+ }
13
+ warn(message) {
14
+ console.log(chalk.yellow('[warn]'), message);
15
+ }
16
+ error(message) {
17
+ console.log(chalk.red('[error]'), message);
18
+ }
19
+ step(step, total, message) {
20
+ console.log(chalk.cyan(`[${step}/${total}]`), message);
21
+ }
22
+ detail(message) {
23
+ if (this.verbose) {
24
+ console.log(chalk.gray(' >'), chalk.gray(message));
25
+ }
26
+ }
27
+ blank() {
28
+ console.log();
29
+ }
30
+ header(message) {
31
+ console.log();
32
+ console.log(chalk.bold.magenta('='.repeat(50)));
33
+ console.log(chalk.bold.magenta(message));
34
+ console.log(chalk.bold.magenta('='.repeat(50)));
35
+ console.log();
36
+ }
37
+ divider() {
38
+ console.log(chalk.gray('-'.repeat(50)));
39
+ }
40
+ waiting(message) {
41
+ console.log(chalk.yellow('[wait]'), message);
42
+ }
43
+ checkStatus(name, status, conclusion) {
44
+ const icon = conclusion === 'success'
45
+ ? chalk.green('[ok]')
46
+ : conclusion === 'failure'
47
+ ? chalk.red('[x]')
48
+ : chalk.yellow('[.]');
49
+ const statusText = conclusion || status;
50
+ console.log(` ${icon} ${name}: ${statusText}`);
51
+ }
52
+ }
53
+ export const logger = new Logger();
54
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,MAAM;IACT,OAAO,CAAU;IAEzB,YAAY,OAAO,GAAG,IAAI;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,MAAc,EAAE,UAAyB;QACjE,MAAM,IAAI,GAAG,UAAU,KAAK,SAAS;YACnC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC,UAAU,KAAK,SAAS;gBACxB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { RepoConfig, ReleaseOptions } from './types.js';
2
+ export declare function runRelease(config: RepoConfig, options?: Partial<ReleaseOptions>): Promise<void>;
3
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAwC,MAAM,YAAY,CAAC;AAS9F,wBAAsB,UAAU,CAC9B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GACpC,OAAO,CAAC,IAAI,CAAC,CAoCf"}