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/README.md +10 -420
- package/bin/cli.js +5 -0
- package/index.js +11 -0
- package/package.json +13 -33
- package/LICENSE +0 -201
- package/bin/just-ship-it.js +0 -2
- package/dist/ai.d.ts +0 -20
- package/dist/ai.d.ts.map +0 -1
- package/dist/ai.js +0 -210
- package/dist/ai.js.map +0 -1
- package/dist/config.d.ts +0 -6
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -49
- package/dist/config.js.map +0 -1
- package/dist/git.d.ts +0 -33
- package/dist/git.d.ts.map +0 -1
- package/dist/git.js +0 -153
- package/dist/git.js.map +0 -1
- package/dist/github.d.ts +0 -22
- package/dist/github.d.ts.map +0 -1
- package/dist/github.js +0 -237
- package/dist/github.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -187
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts +0 -17
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -54
- package/dist/logger.js.map +0 -1
- package/dist/release.d.ts +0 -3
- package/dist/release.d.ts.map +0 -1
- package/dist/release.js +0 -752
- package/dist/release.js.map +0 -1
- package/dist/types.d.ts +0 -67
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/workspace.d.ts +0 -19
- package/dist/workspace.d.ts.map +0 -1
- package/dist/workspace.js +0 -185
- package/dist/workspace.js.map +0 -1
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
|
package/dist/github.d.ts.map
DELETED
|
@@ -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
|
package/dist/github.js.map
DELETED
|
@@ -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
package/dist/index.d.ts.map
DELETED
|
@@ -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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"}
|