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/ai.js ADDED
@@ -0,0 +1,210 @@
1
+ import { OpenRouter } from '@openrouter/sdk';
2
+ import { logger } from './logger.js';
3
+ const getClient = () => {
4
+ const apiKey = process.env.OPENROUTER_API_KEY;
5
+ if (!apiKey) {
6
+ throw new Error('OPENROUTER_API_KEY environment variable is required');
7
+ }
8
+ return new OpenRouter({ apiKey });
9
+ };
10
+ const getModel = () => {
11
+ return process.env.OPENROUTER_MODEL || 'anthropic/claude-opus-4.5';
12
+ };
13
+ export async function generateChangesetMessage(packageName, releaseType, context) {
14
+ logger.detail('Generating changeset description with AI...');
15
+ const prompt = `You are writing a changeset description for an npm package release.
16
+
17
+ Package: ${packageName}
18
+ Release type: ${releaseType}
19
+ Previous version: ${context.previousVersion}
20
+
21
+ Commits since last release:
22
+ ${context.commits.map(c => `- ${c}`).join('\n')}
23
+
24
+ Files changed (${context.filesChanged.length} files, +${context.insertions}/-${context.deletions}):
25
+ ${context.filesChanged.slice(0, 20).join('\n')}${context.filesChanged.length > 20 ? `\n... and ${context.filesChanged.length - 20} more files` : ''}
26
+
27
+ Code diff:
28
+ \`\`\`
29
+ ${context.diff}
30
+ \`\`\`
31
+
32
+ Write a concise, clear changeset description (1-3 sentences) that describes what changed in this release.
33
+ Focus on user-facing changes and benefits. Be specific about what was added, fixed, or changed.
34
+ Do not include markdown formatting, bullet points, or headers. Just write the plain text description.`;
35
+ try {
36
+ const client = getClient();
37
+ const model = getModel();
38
+ const result = await client.chat.send({
39
+ model,
40
+ messages: [
41
+ {
42
+ role: 'user',
43
+ content: prompt
44
+ }
45
+ ],
46
+ stream: false
47
+ });
48
+ if ('choices' in result) {
49
+ const content = result.choices[0].message.content;
50
+ const text = typeof content === 'string' ? content : '';
51
+ return text.trim();
52
+ }
53
+ throw new Error('Unexpected response format');
54
+ }
55
+ catch (error) {
56
+ logger.warn(`AI generation failed: ${error instanceof Error ? error.message : String(error)}`);
57
+ throw error;
58
+ }
59
+ }
60
+ export async function suggestReleaseType(context) {
61
+ logger.detail('Analyzing changes to suggest release type...');
62
+ if (context.commits.length === 0) {
63
+ return 'patch';
64
+ }
65
+ const prompt = `Analyze these changes and determine the appropriate semantic version bump.
66
+
67
+ Commits since ${context.previousVersion}:
68
+ ${context.commits.map(c => `- ${c}`).join('\n')}
69
+
70
+ Files changed (${context.filesChanged.length} files, +${context.insertions}/-${context.deletions}):
71
+ ${context.filesChanged.slice(0, 15).join('\n')}
72
+
73
+ Code diff:
74
+ \`\`\`
75
+ ${context.diff.slice(0, 5000)}
76
+ \`\`\`
77
+
78
+ Rules:
79
+ - "patch" for bug fixes, small changes, documentation, dependency updates
80
+ - "minor" for new features that are backwards compatible
81
+ - "major" for breaking changes (API changes, removed features, major refactors)
82
+
83
+ Respond with ONLY one word: patch, minor, or major`;
84
+ try {
85
+ const client = getClient();
86
+ const model = getModel();
87
+ const result = await client.chat.send({
88
+ model,
89
+ messages: [
90
+ {
91
+ role: 'user',
92
+ content: prompt
93
+ }
94
+ ],
95
+ stream: false
96
+ });
97
+ if ('choices' in result) {
98
+ const content = result.choices[0].message.content;
99
+ const text = typeof content === 'string' ? content : '';
100
+ const suggestion = text.trim().toLowerCase();
101
+ if (suggestion === 'major' || suggestion === 'minor' || suggestion === 'patch') {
102
+ return suggestion;
103
+ }
104
+ }
105
+ return 'patch';
106
+ }
107
+ catch {
108
+ return 'patch';
109
+ }
110
+ }
111
+ /**
112
+ * Analyze a single package's changes to suggest version bump type
113
+ */
114
+ export async function analyzePackageChange(packageChange) {
115
+ logger.detail(`Analyzing changes for package ${packageChange.package.name}...`);
116
+ if (packageChange.commits.length === 0) {
117
+ return 'patch';
118
+ }
119
+ const prompt = `Analyze changes for package "${packageChange.package.name}".
120
+
121
+ Commits:
122
+ ${packageChange.commits.join('\n')}
123
+
124
+ Files changed: ${packageChange.filesChanged.length}
125
+ Insertions: +${packageChange.insertions}, Deletions: -${packageChange.deletions}
126
+
127
+ Diff:
128
+ \`\`\`
129
+ ${packageChange.diff}
130
+ \`\`\`
131
+
132
+ Based on these changes, suggest a version bump type (patch, minor, or major).
133
+ Consider:
134
+ - Breaking changes = major
135
+ - New features = minor
136
+ - Bug fixes = patch
137
+
138
+ Respond with only one word: patch, minor, or major.`;
139
+ try {
140
+ const client = getClient();
141
+ const model = getModel();
142
+ const result = await client.chat.send({
143
+ model,
144
+ messages: [
145
+ {
146
+ role: 'user',
147
+ content: prompt
148
+ }
149
+ ],
150
+ stream: false
151
+ });
152
+ if ('choices' in result) {
153
+ const content = result.choices[0].message.content;
154
+ const text = typeof content === 'string' ? content : '';
155
+ const suggestion = text.trim().toLowerCase();
156
+ if (suggestion === 'major' || suggestion === 'minor' || suggestion === 'patch') {
157
+ return suggestion;
158
+ }
159
+ }
160
+ return 'patch';
161
+ }
162
+ catch (error) {
163
+ logger.warn(`Failed to analyze package change: ${error instanceof Error ? error.message : String(error)}`);
164
+ return 'patch';
165
+ }
166
+ }
167
+ /**
168
+ * Generate a unified description for multiple packages
169
+ */
170
+ export async function generateMultiPackageChangesetMessage(packageChanges) {
171
+ logger.detail('Generating multi-package changeset description...');
172
+ const prompt = `Write a changeset description for a monorepo release.
173
+
174
+ This release includes changes to ${packageChanges.length} packages:
175
+
176
+ ${packageChanges.map(pc => `
177
+ Package: ${pc.package.name}
178
+ Files: ${pc.filesChanged.length} (+${pc.insertions}/-${pc.deletions})
179
+ Commits:
180
+ ${pc.commits.map(c => ` - ${c}`).join('\n')}
181
+ `).join('\n')}
182
+
183
+ Write a concise 2-4 sentence description summarizing changes across all packages.
184
+ Focus on overall impact. No markdown formatting.`;
185
+ try {
186
+ const client = getClient();
187
+ const model = getModel();
188
+ const result = await client.chat.send({
189
+ model,
190
+ messages: [
191
+ {
192
+ role: 'user',
193
+ content: prompt
194
+ }
195
+ ],
196
+ stream: false
197
+ });
198
+ if ('choices' in result) {
199
+ const content = result.choices[0].message.content;
200
+ const text = typeof content === 'string' ? content : '';
201
+ return text.trim();
202
+ }
203
+ throw new Error('Unexpected response format');
204
+ }
205
+ catch (error) {
206
+ logger.warn(`AI generation failed: ${error instanceof Error ? error.message : String(error)}`);
207
+ throw error;
208
+ }
209
+ }
210
+ //# sourceMappingURL=ai.js.map
package/dist/ai.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { RepoConfig } from './types.js';
2
+ export declare function getRepoConfig(repoName: string): RepoConfig | null;
3
+ export declare function addRepoConfig(name: string, config: RepoConfig): void;
4
+ export declare function listRepos(): string[];
5
+ export declare function getTempDir(): string;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAkCxC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAajE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAIpE;AAED,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAGpC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
package/dist/config.js ADDED
@@ -0,0 +1,49 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ // Built-in repository configurations (users can add more via `mkrelease add`)
5
+ const REPO_CONFIGS = {};
6
+ const CONFIG_DIR = path.join(os.homedir(), '.just-ship-it');
7
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
8
+ function loadStoredConfig() {
9
+ try {
10
+ if (fs.existsSync(CONFIG_FILE)) {
11
+ return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));
12
+ }
13
+ }
14
+ catch {
15
+ // Ignore errors, return default
16
+ }
17
+ return { repos: {} };
18
+ }
19
+ function saveConfig(config) {
20
+ if (!fs.existsSync(CONFIG_DIR)) {
21
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
22
+ }
23
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
24
+ }
25
+ export function getRepoConfig(repoName) {
26
+ // Check built-in configs first
27
+ if (REPO_CONFIGS[repoName]) {
28
+ return REPO_CONFIGS[repoName];
29
+ }
30
+ // Check stored configs
31
+ const stored = loadStoredConfig();
32
+ if (stored.repos[repoName]) {
33
+ return stored.repos[repoName];
34
+ }
35
+ return null;
36
+ }
37
+ export function addRepoConfig(name, config) {
38
+ const stored = loadStoredConfig();
39
+ stored.repos[name] = config;
40
+ saveConfig(stored);
41
+ }
42
+ export function listRepos() {
43
+ const stored = loadStoredConfig();
44
+ return [...Object.keys(REPO_CONFIGS), ...Object.keys(stored.repos)];
45
+ }
46
+ export function getTempDir() {
47
+ return path.join(os.tmpdir(), 'just-ship-it');
48
+ }
49
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,8EAA8E;AAC9E,MAAM,YAAY,GAA+B,EAAE,CAAC;AAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAOzD,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,MAAoB;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,+BAA+B;IAC/B,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,MAAkB;IAC5D,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC"}
package/dist/git.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ import { SimpleGit } from 'simple-git';
2
+ import { RepoConfig, ReleaseOptions, MultiPackageChangeset, WorkspaceInfo } from './types.js';
3
+ export declare class GitOperations {
4
+ private git;
5
+ private workDir;
6
+ private config;
7
+ constructor(config: RepoConfig);
8
+ getWorkDir(): string;
9
+ getGit(): SimpleGit;
10
+ getWorkspaceInfo(): Promise<WorkspaceInfo>;
11
+ clone(): Promise<void>;
12
+ createBranch(branchName: string): Promise<void>;
13
+ generateChangeset(options: ReleaseOptions, changesetData: MultiPackageChangeset | {
14
+ packageName: string;
15
+ }): Promise<string>;
16
+ stageAndCommit(message: string): Promise<void>;
17
+ push(branchName: string): Promise<void>;
18
+ getCurrentCommitSha(): Promise<string>;
19
+ cleanup(): Promise<void>;
20
+ getPackageName(): Promise<string>;
21
+ getPackageVersion(): Promise<string>;
22
+ getRecentCommits(count?: number): Promise<string[]>;
23
+ getLatestVersionTag(): Promise<string | null>;
24
+ getDiffSinceTag(tag: string): Promise<string>;
25
+ getDiffSummary(tag: string): Promise<{
26
+ files: string[];
27
+ insertions: number;
28
+ deletions: number;
29
+ }>;
30
+ getCommitsSinceTag(tag: string): Promise<string[]>;
31
+ getFullDiffSinceTag(tag: string, maxLength?: number): Promise<string>;
32
+ }
33
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM9F,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAM9B,UAAU,IAAI,MAAM;IAIpB,MAAM,IAAI,SAAS;IAIb,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAI1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,iBAAiB,CACrB,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,qBAAqB,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,MAAM,CAAC;IA8BZ,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAMjC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMpC,gBAAgB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY/C,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmB7C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ7C,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAWhG,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOlD,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;CAW3E"}
package/dist/git.js ADDED
@@ -0,0 +1,153 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
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
@@ -0,0 +1 @@
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"}