@litebox-packages/release-notes-bot 1.2.0 → 1.3.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/README.md +167 -18
- package/dist/cli.js +107 -17
- package/dist/cli.js.map +1 -1
- package/dist/contextDetector.d.ts +11 -0
- package/dist/contextDetector.d.ts.map +1 -0
- package/dist/contextDetector.js +71 -0
- package/dist/contextDetector.js.map +1 -0
- package/dist/dataSanitizer.d.ts +3 -3
- package/dist/dataSanitizer.d.ts.map +1 -1
- package/dist/dataSanitizer.js.map +1 -1
- package/dist/getGitHubDiff.d.ts +6 -0
- package/dist/getGitHubDiff.d.ts.map +1 -0
- package/dist/getGitHubDiff.js +112 -0
- package/dist/getGitHubDiff.js.map +1 -0
- package/dist/getGitLabDiff.d.ts +4 -0
- package/dist/getGitLabDiff.d.ts.map +1 -0
- package/dist/getGitLabDiff.js +156 -0
- package/dist/getGitLabDiff.js.map +1 -0
- package/dist/promptInstructions.d.ts +4 -4
- package/dist/promptInstructions.d.ts.map +1 -1
- package/dist/promptInstructions.js.map +1 -1
- package/dist/slackClient.d.ts +2 -1
- package/dist/slackClient.d.ts.map +1 -1
- package/dist/slackClient.js +80 -2
- package/dist/slackClient.js.map +1 -1
- package/dist/tokenEstimator.d.ts +2 -2
- package/dist/tokenEstimator.d.ts.map +1 -1
- package/dist/tokenEstimator.js.map +1 -1
- package/dist/types.d.ts +10 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
# Release Notes Bot
|
|
2
2
|
|
|
3
|
-
Automated release notes generator
|
|
3
|
+
Automated release notes generator supporting GitLab and GitHub APIs.
|
|
4
|
+
|
|
5
|
+
## How It Works
|
|
6
|
+
|
|
7
|
+
The script analyzes changes between two Git commits and generates human-readable release notes using AI. Here's what happens when you run it:
|
|
8
|
+
|
|
9
|
+
1. **Fetches Git Changes**: Connects to the GitLab or GitHub API (based on `--platform`) to retrieve commits, file changes, and diffs between the specified commit hashes (`--before` and `--after`).
|
|
10
|
+
|
|
11
|
+
2. **Detects Context**: Identifies whether the changes represent a merge request or a single commit, extracting relevant branch and commit information.
|
|
12
|
+
|
|
13
|
+
3. **Filters & Sanitizes**: Removes asset files (images, fonts, etc.) and unnecessary metadata from the diff data to optimize token usage.
|
|
14
|
+
|
|
15
|
+
4. **Estimates Costs**: Calculates estimated token usage and API costs before making the LLM call, so you know what to expect.
|
|
16
|
+
|
|
17
|
+
5. **Generates Release Notes**: Sends the processed commit data to OpenAI's GPT-4o-mini model, which analyzes the changes and generates formatted release notes with:
|
|
18
|
+
- Summary of changes
|
|
19
|
+
- Categorized features, fixes, and improvements
|
|
20
|
+
- Emojis for visual clarity
|
|
21
|
+
- Markdown formatting
|
|
22
|
+
|
|
23
|
+
6. **Displays Results**: Shows the generated release notes in the console, along with actual token usage and costs.
|
|
24
|
+
|
|
25
|
+
7. **Sends to Slack** (optional): If Slack credentials are provided, automatically posts the release notes to the specified channel or user, formatted with Slack Block Kit for better readability.
|
|
4
26
|
|
|
5
27
|
## Setup
|
|
6
28
|
|
|
@@ -18,14 +40,19 @@ pnpm build
|
|
|
18
40
|
|
|
19
41
|
### Using npx (Recommended - No installation needed)
|
|
20
42
|
|
|
21
|
-
**
|
|
43
|
+
**GitLab Example:**
|
|
44
|
+
```bash
|
|
45
|
+
npx -p @litebox-packages/release-notes-bot release-notes-bot --platform gitlab --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**GitHub Example:**
|
|
22
49
|
```bash
|
|
23
|
-
npx -p @litebox-packages/release-notes-bot release-notes-bot --before <commit-hash-1> --after <commit-hash-2> --
|
|
50
|
+
npx -p @litebox-packages/release-notes-bot release-notes-bot --platform github --before <commit-hash-1> --after <commit-hash-2> --owner <owner> --repo <repo> --token <github-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
24
51
|
```
|
|
25
52
|
|
|
26
53
|
**Option 2: Direct npx (may require clearing cache)**
|
|
27
54
|
```bash
|
|
28
|
-
npx @litebox-packages/release-notes-bot --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token>
|
|
55
|
+
npx @litebox-packages/release-notes-bot --platform gitlab --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
29
56
|
```
|
|
30
57
|
|
|
31
58
|
If Option 2 doesn't work, try clearing npx cache:
|
|
@@ -35,53 +62,175 @@ rm -rf ~/.npm/_npx
|
|
|
35
62
|
|
|
36
63
|
### Development Mode (using ts-node)
|
|
37
64
|
|
|
65
|
+
**GitLab:**
|
|
66
|
+
```bash
|
|
67
|
+
pnpm dev --platform gitlab --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**GitHub:**
|
|
38
71
|
```bash
|
|
39
|
-
pnpm dev --before <commit-hash-1> --after <commit-hash-2> --
|
|
72
|
+
pnpm dev --platform github --before <commit-hash-1> --after <commit-hash-2> --owner <owner> --repo <repo> --token <github-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
40
73
|
```
|
|
41
74
|
|
|
42
75
|
### Production Mode (after building)
|
|
43
76
|
|
|
77
|
+
**GitLab:**
|
|
44
78
|
```bash
|
|
45
|
-
pnpm start --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token>
|
|
79
|
+
pnpm start --platform gitlab --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**GitHub:**
|
|
83
|
+
```bash
|
|
84
|
+
pnpm start --platform github --before <commit-hash-1> --after <commit-hash-2> --owner <owner> --repo <repo> --token <github-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
46
85
|
```
|
|
47
86
|
|
|
48
87
|
Or directly with node:
|
|
49
88
|
|
|
50
89
|
```bash
|
|
51
|
-
node dist/cli.js --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token>
|
|
90
|
+
node dist/cli.js --platform gitlab --before <commit-hash-1> --after <commit-hash-2> --projectId <gitlab-project-id> --token <gitlab-token> --openaiToken <openai-token> --slackToken <slack-token> --slackChannelId <slack-channel-id>
|
|
52
91
|
```
|
|
53
92
|
|
|
93
|
+
## Getting Required Tokens
|
|
94
|
+
|
|
95
|
+
### GitLab Personal Access Token
|
|
96
|
+
|
|
97
|
+
To get your GitLab personal access token:
|
|
98
|
+
|
|
99
|
+
1. Go to your GitLab instance (e.g., `https://gitlab.com` or your self-hosted instance)
|
|
100
|
+
2. Click on your profile picture/avatar in the top right corner
|
|
101
|
+
3. Select **Settings** (or **Preferences**)
|
|
102
|
+
4. In the left sidebar, click **Access Tokens**
|
|
103
|
+
5. Give your token a name (e.g., "Release Notes Bot")
|
|
104
|
+
6. Set an expiration date (optional)
|
|
105
|
+
7. Select the **`api`** scope (required)
|
|
106
|
+
8. Click **Create personal access token**
|
|
107
|
+
9. **Copy the token immediately** - you won't be able to see it again!
|
|
108
|
+
|
|
109
|
+
The token will start with `glpat-` for GitLab.com or your instance's prefix.
|
|
110
|
+
|
|
111
|
+
### GitHub Personal Access Token
|
|
112
|
+
|
|
113
|
+
To get your GitHub personal access token:
|
|
114
|
+
|
|
115
|
+
1. Go to [https://github.com/settings/tokens](https://github.com/settings/tokens)
|
|
116
|
+
2. Click **Generate new token** → **Generate new token (classic)**
|
|
117
|
+
3. Give your token a name (e.g., "Release Notes Bot")
|
|
118
|
+
4. Set an expiration date (optional)
|
|
119
|
+
5. Select the **`repo`** scope (required for private repositories)
|
|
120
|
+
- For public repositories, you can use a token without any scopes, but `repo` scope is recommended
|
|
121
|
+
6. Click **Generate token**
|
|
122
|
+
7. **Copy the token immediately** - you won't be able to see it again!
|
|
123
|
+
|
|
124
|
+
The token will be a long alphanumeric string (no specific prefix).
|
|
125
|
+
|
|
126
|
+
### OpenAI API Key
|
|
127
|
+
|
|
128
|
+
1. Go to [https://platform.openai.com/api-keys](https://platform.openai.com/api-keys)
|
|
129
|
+
2. Sign in or create an account
|
|
130
|
+
3. Click **Create new secret key**
|
|
131
|
+
4. Give it a name (e.g., "Release Notes Bot")
|
|
132
|
+
5. **Copy the key immediately** - you won't be able to see it again!
|
|
133
|
+
|
|
134
|
+
The key will start with `sk-`.
|
|
135
|
+
|
|
136
|
+
### Slack Bot Token (Optional)
|
|
137
|
+
|
|
138
|
+
1. Go to [https://api.slack.com/apps](https://api.slack.com/apps)
|
|
139
|
+
2. Create a new app or select an existing one
|
|
140
|
+
3. Go to **OAuth & Permissions** in the left sidebar
|
|
141
|
+
4. Under **Bot Token Scopes**, add `chat:write` permission
|
|
142
|
+
5. Install the app to your workspace
|
|
143
|
+
6. Copy the **Bot User OAuth Token** (starts with `xoxb-`)
|
|
144
|
+
|
|
145
|
+
To get the Channel ID:
|
|
146
|
+
- Right-click on the channel in Slack → **View channel details** → Copy the Channel ID (starts with `C`)
|
|
147
|
+
- For DMs, use the user's ID (starts with `U`)
|
|
148
|
+
|
|
54
149
|
## Arguments
|
|
55
150
|
|
|
151
|
+
### Common Arguments (Required)
|
|
152
|
+
- `--platform`: Platform to use - either `gitlab` or `github` (default: `gitlab`)
|
|
56
153
|
- `--before`: The commit hash to compare from (older commit)
|
|
57
154
|
- `--after`: The commit hash to compare to (newer commit)
|
|
58
|
-
- `--
|
|
59
|
-
- `--token`: Your GitLab personal access token with `api` scope
|
|
155
|
+
- `--token`: Your Git provider personal access token (GitLab or GitHub)
|
|
60
156
|
- `--openaiToken`: Your OpenAI API key (starts with `sk-`)
|
|
61
|
-
- `--slackToken`: (Optional) Your Slack bot token (starts with `xoxb-`). If provided, `--slackChannelId` is also required.
|
|
62
|
-
- `--slackChannelId`: (Optional) Slack channel ID or user DM ID where release notes will be sent. Required if `--slackToken` is provided. Slack failures are non-fatal and will only log a warning.
|
|
63
157
|
|
|
64
|
-
|
|
158
|
+
### GitLab-Specific Arguments (Required when `--platform gitlab`)
|
|
159
|
+
- `--projectId`: Your GitLab project ID (can be found in project settings)
|
|
160
|
+
|
|
161
|
+
### GitHub-Specific Arguments (Required when `--platform github`)
|
|
162
|
+
- `--owner`: Repository owner (username or organization name)
|
|
163
|
+
- `--repo`: Repository name
|
|
164
|
+
|
|
165
|
+
### Optional Arguments
|
|
166
|
+
- `--slackToken`: Your Slack bot token (starts with `xoxb-`). If provided, `--slackChannelId` is also required.
|
|
167
|
+
- `--slackChannelId`: Slack channel ID or user DM ID where release notes will be sent. Required if `--slackToken` is provided. Slack failures are non-fatal and will only log a warning.
|
|
168
|
+
|
|
169
|
+
## Examples
|
|
170
|
+
|
|
171
|
+
### GitLab Example
|
|
65
172
|
|
|
66
|
-
|
|
173
|
+
```bash
|
|
174
|
+
npx -p @litebox-packages/release-notes-bot release-notes-bot --platform gitlab --before abc123 --after def456 --projectId 12345 --token glpat-xxxxxxxxxxxxx --openaiToken sk-xxxxxxxxxxxxx --slackToken xoxb-xxxxxxxxxxxxx --slackChannelId C09TVLQ33HN
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### GitHub Example
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
npx -p @litebox-packages/release-notes-bot release-notes-bot --platform github --before abc123 --after def456 --owner octocat --repo Hello-World --token ghp_xxxxxxxxxxxxx --openaiToken sk-xxxxxxxxxxxxx --slackToken xoxb-xxxxxxxxxxxxx --slackChannelId C09TVLQ33HN
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Local Development (GitLab)
|
|
67
184
|
|
|
68
185
|
```bash
|
|
69
|
-
|
|
186
|
+
pnpm dev --platform gitlab --before abc123 --after def456 --projectId 12345 --token glpat-xxxxxxxxxxxxx --openaiToken sk-xxxxxxxxxxxxx --slackToken xoxb-xxxxxxxxxxxxx --slackChannelId C09TVLQ33HN
|
|
70
187
|
```
|
|
71
188
|
|
|
72
|
-
### Local Development
|
|
189
|
+
### Local Development (GitHub)
|
|
73
190
|
|
|
74
191
|
```bash
|
|
75
|
-
pnpm dev --before abc123 --after def456 --
|
|
192
|
+
pnpm dev --platform github --before abc123 --after def456 --owner octocat --repo Hello-World --token ghp_xxxxxxxxxxxxx --openaiToken sk-xxxxxxxxxxxxx --slackToken xoxb-xxxxxxxxxxxxx --slackChannelId C09TVLQ33HN
|
|
76
193
|
```
|
|
77
194
|
|
|
78
|
-
##
|
|
195
|
+
## CI/CD Integration
|
|
196
|
+
|
|
197
|
+
### GitLab CI Integration
|
|
79
198
|
|
|
80
199
|
In your `.gitlab-ci.yml`, you can use it like this:
|
|
81
200
|
|
|
82
201
|
```yaml
|
|
83
202
|
generate-release-notes:
|
|
84
203
|
script:
|
|
85
|
-
- npx -p @litebox-packages/release-notes-bot release-notes-bot --before "$CI_COMMIT_BEFORE_SHA" --after "$CI_COMMIT_SHA" --projectId "$CI_PROJECT_ID" --token "$GITLAB_TOKEN" --openaiToken "$OPENAI_TOKEN" --slackToken "$SLACK_TOKEN" --slackChannelId "$SLACK_CHANNEL_ID"
|
|
204
|
+
- npx -p @litebox-packages/release-notes-bot release-notes-bot --platform gitlab --before "$CI_COMMIT_BEFORE_SHA" --after "$CI_COMMIT_SHA" --projectId "$CI_PROJECT_ID" --token "$GITLAB_TOKEN" --openaiToken "$OPENAI_TOKEN" --slackToken "$SLACK_TOKEN" --slackChannelId "$SLACK_CHANNEL_ID"
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### GitHub Actions Integration
|
|
208
|
+
|
|
209
|
+
In your `.github/workflows/release-notes.yml`, you can use it like this:
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
name: Generate Release Notes
|
|
213
|
+
|
|
214
|
+
on:
|
|
215
|
+
push:
|
|
216
|
+
branches:
|
|
217
|
+
- main
|
|
218
|
+
|
|
219
|
+
jobs:
|
|
220
|
+
generate-release-notes:
|
|
221
|
+
runs-on: ubuntu-latest
|
|
222
|
+
steps:
|
|
223
|
+
- name: Generate Release Notes
|
|
224
|
+
run: |
|
|
225
|
+
npx -p @litebox-packages/release-notes-bot release-notes-bot \
|
|
226
|
+
--platform github \
|
|
227
|
+
--before "${{ github.event.before }}" \
|
|
228
|
+
--after "${{ github.sha }}" \
|
|
229
|
+
--owner "${{ github.repository_owner }}" \
|
|
230
|
+
--repo "${{ github.event.repository.name }}" \
|
|
231
|
+
--token "${{ secrets.GITHUB_TOKEN }}" \
|
|
232
|
+
--openaiToken "${{ secrets.OPENAI_TOKEN }}" \
|
|
233
|
+
--slackToken "${{ secrets.SLACK_TOKEN }}" \
|
|
234
|
+
--slackChannelId "${{ secrets.SLACK_CHANNEL_ID }}"
|
|
86
235
|
```
|
|
87
236
|
|
package/dist/cli.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const
|
|
4
|
+
const getGitLabDiff_1 = require("./getGitLabDiff");
|
|
5
|
+
const getGitHubDiff_1 = require("./getGitHubDiff");
|
|
5
6
|
const tokenEstimator_1 = require("./tokenEstimator");
|
|
6
7
|
const dataSanitizer_1 = require("./dataSanitizer");
|
|
7
8
|
const promptInstructions_1 = require("./promptInstructions");
|
|
8
9
|
const openaiClient_1 = require("./openaiClient");
|
|
9
10
|
const slackClient_1 = require("./slackClient");
|
|
11
|
+
const contextDetector_1 = require("./contextDetector");
|
|
10
12
|
const isAssetFile = (filePath) => {
|
|
11
13
|
const lowerPath = filePath.toLowerCase();
|
|
12
14
|
// Check for asset file extensions
|
|
@@ -44,19 +46,66 @@ const filterAssetDiffs = (diffs) => {
|
|
|
44
46
|
const parseArgs = () => {
|
|
45
47
|
const args = process.argv.slice(2);
|
|
46
48
|
const parsed = {};
|
|
47
|
-
for (let i = 0; i < args.length; i
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
if (
|
|
51
|
-
|
|
49
|
+
for (let i = 0; i < args.length; i++) {
|
|
50
|
+
const arg = args[i];
|
|
51
|
+
// Handle --key=value
|
|
52
|
+
if (arg.startsWith("--")) {
|
|
53
|
+
const keyRaw = arg.replace(/^--/, "");
|
|
54
|
+
if (keyRaw.includes("=")) {
|
|
55
|
+
const [key, ...valueParts] = keyRaw.split("=");
|
|
56
|
+
const value = valueParts.join("=");
|
|
57
|
+
if (key && value) {
|
|
58
|
+
parsed[key] = value;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Handle --key value
|
|
63
|
+
const key = keyRaw;
|
|
64
|
+
const value = args[i + 1];
|
|
65
|
+
// Make sure value exists and is not another flag
|
|
66
|
+
if (value && !value.startsWith("--")) {
|
|
67
|
+
parsed[key] = value;
|
|
68
|
+
i++; // Skip next arg since we consumed it as value
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Default platform to gitlab if not specified
|
|
74
|
+
const platform = parsed.platform || "gitlab";
|
|
75
|
+
// Validate common required arguments
|
|
76
|
+
const missingArgs = [];
|
|
77
|
+
if (!parsed.before)
|
|
78
|
+
missingArgs.push("--before");
|
|
79
|
+
if (!parsed.after)
|
|
80
|
+
missingArgs.push("--after");
|
|
81
|
+
if (!parsed.token)
|
|
82
|
+
missingArgs.push("--token");
|
|
83
|
+
if (!parsed.openaiToken)
|
|
84
|
+
missingArgs.push("--openaiToken");
|
|
85
|
+
if (missingArgs.length > 0) {
|
|
86
|
+
console.error(`Error: Missing required arguments: ${missingArgs.join(", ")}`);
|
|
87
|
+
console.error("\nUsage: release-notes-bot --platform <gitlab|github> --before <hash> --after <hash> --token <token> --openaiToken <openai-token> [platform-specific args] [--slackToken <slack-token> --slackChannelId <slack-channel-id>]");
|
|
88
|
+
console.error("\nGitLab usage:");
|
|
89
|
+
console.error(" --platform gitlab --before <hash> --after <hash> --projectId <id> --token <gitlab-token> --openaiToken <openai-token>");
|
|
90
|
+
console.error("\nGitHub usage:");
|
|
91
|
+
console.error(" --platform github --before <hash> --after <hash> --owner <owner> --repo <repo> --token <github-token> --openaiToken <openai-token>");
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
// Validate platform-specific arguments
|
|
95
|
+
if (platform === "gitlab") {
|
|
96
|
+
if (!parsed.projectId) {
|
|
97
|
+
console.error("Error: --projectId is required when --platform is gitlab");
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (platform === "github") {
|
|
102
|
+
if (!parsed.owner || !parsed.repo) {
|
|
103
|
+
console.error("Error: --owner and --repo are required when --platform is github");
|
|
104
|
+
process.exit(1);
|
|
52
105
|
}
|
|
53
106
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
!parsed.projectId ||
|
|
57
|
-
!parsed.token ||
|
|
58
|
-
!parsed.openaiToken) {
|
|
59
|
-
console.error("Usage: release-notes-bot --before <hash> --after <hash> --projectId <id> --token <gitlab-token> --openaiToken <openai-token> [--slackToken <slack-token> --slackChannelId <slack-channel-id>]");
|
|
107
|
+
else {
|
|
108
|
+
console.error(`Error: Invalid platform '${platform}'. Must be 'gitlab' or 'github'`);
|
|
60
109
|
process.exit(1);
|
|
61
110
|
}
|
|
62
111
|
// Validate: if slackToken is provided, slackChannelId must also be provided
|
|
@@ -64,13 +113,54 @@ const parseArgs = () => {
|
|
|
64
113
|
console.error("Error: --slackChannelId is required when --slackToken is provided");
|
|
65
114
|
process.exit(1);
|
|
66
115
|
}
|
|
67
|
-
return parsed;
|
|
116
|
+
return { ...parsed, platform };
|
|
68
117
|
};
|
|
69
118
|
const main = async () => {
|
|
70
119
|
try {
|
|
71
|
-
const { before, after, projectId, token, openaiToken, slackToken, slackChannelId, } = parseArgs();
|
|
72
|
-
console.log(`Fetching diff between ${before} and ${after}...`);
|
|
73
|
-
|
|
120
|
+
const { platform, before, after, projectId, owner, repo, token, openaiToken, slackToken, slackChannelId, } = parseArgs();
|
|
121
|
+
console.log(`Fetching diff between ${before} and ${after} from ${platform}...`);
|
|
122
|
+
// Call the appropriate diff function based on platform
|
|
123
|
+
let result;
|
|
124
|
+
if (platform === "gitlab") {
|
|
125
|
+
if (!projectId) {
|
|
126
|
+
throw new Error("projectId is required for GitLab");
|
|
127
|
+
}
|
|
128
|
+
result = await (0, getGitLabDiff_1.getGitLabDiff)(before, after, projectId, token);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if (!owner || !repo) {
|
|
132
|
+
throw new Error("owner and repo are required for GitHub");
|
|
133
|
+
}
|
|
134
|
+
result = await (0, getGitHubDiff_1.getGitHubDiff)(before, after, owner, repo, token);
|
|
135
|
+
}
|
|
136
|
+
// Check if the PR/diff is too large (overflow or timeout)
|
|
137
|
+
if (result.overflow || result.compare_timeout) {
|
|
138
|
+
const reason = result.overflow
|
|
139
|
+
? "the PR is too big (exceeds API limits)"
|
|
140
|
+
: "the comparison timed out";
|
|
141
|
+
console.warn(`\n⚠ Warning: Release notes not generated because ${reason}.`);
|
|
142
|
+
// Send notification to Slack if tokens are provided
|
|
143
|
+
if (slackToken && slackChannelId) {
|
|
144
|
+
try {
|
|
145
|
+
console.log("Sending notification to Slack...");
|
|
146
|
+
await (0, slackClient_1.sendSlackMessage)(slackToken, slackChannelId, "Release notes not generated because the PR is too big");
|
|
147
|
+
console.log("✓ Notification sent to Slack successfully");
|
|
148
|
+
}
|
|
149
|
+
catch (slackError) {
|
|
150
|
+
console.warn(`\n⚠ Warning: Failed to send Slack notification: ${slackError instanceof Error ? slackError.message : String(slackError)}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Exit gracefully (this is a handled case, not an error)
|
|
154
|
+
process.exit(0);
|
|
155
|
+
}
|
|
156
|
+
// Detect context (merge vs single commit)
|
|
157
|
+
const context = (0, contextDetector_1.detectContext)(result);
|
|
158
|
+
if (context.type === "merge") {
|
|
159
|
+
console.log(`Context: Merge request${context.branchName ? ` from branch '${context.branchName}'` : ""}`);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log(`Context: Single commit${context.commitTitle ? ` - ${context.commitTitle}` : ""}`);
|
|
163
|
+
}
|
|
74
164
|
// Filter assets and sanitize diffs
|
|
75
165
|
const filteredDiffs = filterAssetDiffs(result.diffs);
|
|
76
166
|
const sanitizedDiffs = (0, dataSanitizer_1.sanitizeDiffs)(filteredDiffs);
|
|
@@ -125,7 +215,7 @@ const main = async () => {
|
|
|
125
215
|
if (slackToken && slackChannelId) {
|
|
126
216
|
try {
|
|
127
217
|
console.log("\nSending release notes to Slack...");
|
|
128
|
-
await (0, slackClient_1.sendSlackMessage)(slackToken, slackChannelId, content);
|
|
218
|
+
await (0, slackClient_1.sendSlackMessage)(slackToken, slackChannelId, content, context);
|
|
129
219
|
console.log("✓ Release notes sent to Slack successfully");
|
|
130
220
|
}
|
|
131
221
|
catch (slackError) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RepoCompareResponse } from "./types";
|
|
2
|
+
export interface ReleaseContext {
|
|
3
|
+
type: "merge" | "single";
|
|
4
|
+
branchName?: string;
|
|
5
|
+
commitTitle?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Detects the context of the release notes (merge request vs single commit)
|
|
9
|
+
*/
|
|
10
|
+
export declare const detectContext: (data: RepoCompareResponse) => ReleaseContext;
|
|
11
|
+
//# sourceMappingURL=contextDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextDetector.d.ts","sourceRoot":"","sources":["../src/contextDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6CD;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,mBAAmB,KAAG,cAiCzD,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectContext = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Extracts branch name from merge commit message
|
|
6
|
+
* Handles patterns like:
|
|
7
|
+
* - "Merge branch 'feature-branch' into 'main'"
|
|
8
|
+
* - "Merge branch 'feature-branch'"
|
|
9
|
+
* - "Merge !123 from feature-branch"
|
|
10
|
+
*/
|
|
11
|
+
const extractBranchNameFromMergeCommit = (commitMessage) => {
|
|
12
|
+
// Pattern 1: "Merge branch 'branch-name' into 'target'"
|
|
13
|
+
const pattern1 = /merge\s+branch\s+['"]([^'"]+)['"]/i;
|
|
14
|
+
const match1 = commitMessage.match(pattern1);
|
|
15
|
+
if (match1 && match1[1]) {
|
|
16
|
+
return match1[1];
|
|
17
|
+
}
|
|
18
|
+
// Pattern 2: "Merge !123 from branch-name"
|
|
19
|
+
const pattern2 = /merge\s+!\d+\s+from\s+(\S+)/i;
|
|
20
|
+
const match2 = commitMessage.match(pattern2);
|
|
21
|
+
if (match2 && match2[1]) {
|
|
22
|
+
return match2[1];
|
|
23
|
+
}
|
|
24
|
+
// Pattern 3: "Merge branch branch-name" (without quotes)
|
|
25
|
+
const pattern3 = /merge\s+branch\s+(\S+)/i;
|
|
26
|
+
const match3 = commitMessage.match(pattern3);
|
|
27
|
+
if (match3 && match3[1]) {
|
|
28
|
+
return match3[1];
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Checks if a commit is a merge commit
|
|
34
|
+
*/
|
|
35
|
+
const isMergeCommit = (commit) => {
|
|
36
|
+
const titleLower = commit.title.toLowerCase();
|
|
37
|
+
return (titleLower.startsWith("merge") ||
|
|
38
|
+
commit.parent_ids.length > 1);
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Detects the context of the release notes (merge request vs single commit)
|
|
42
|
+
*/
|
|
43
|
+
const detectContext = (data) => {
|
|
44
|
+
const { commits } = data;
|
|
45
|
+
if (commits.length === 0) {
|
|
46
|
+
// Fallback: use the commit from the compare response
|
|
47
|
+
return {
|
|
48
|
+
type: "single",
|
|
49
|
+
commitTitle: data.commit.title,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Check if any commit is a merge commit
|
|
53
|
+
const mergeCommits = commits.filter(isMergeCommit);
|
|
54
|
+
if (mergeCommits.length > 0) {
|
|
55
|
+
// It's a merge request - extract branch name from the first merge commit
|
|
56
|
+
const firstMergeCommit = mergeCommits[0];
|
|
57
|
+
const branchName = extractBranchNameFromMergeCommit(firstMergeCommit.message || firstMergeCommit.title);
|
|
58
|
+
return {
|
|
59
|
+
type: "merge",
|
|
60
|
+
branchName: branchName || undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Single commit - use the first commit's title
|
|
64
|
+
const firstCommit = commits[0];
|
|
65
|
+
return {
|
|
66
|
+
type: "single",
|
|
67
|
+
commitTitle: firstCommit.title,
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
exports.detectContext = detectContext;
|
|
71
|
+
//# sourceMappingURL=contextDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextDetector.js","sourceRoot":"","sources":["../src/contextDetector.ts"],"names":[],"mappings":";;;AAQA;;;;;;GAMG;AACH,MAAM,gCAAgC,GAAG,CAAC,aAAqB,EAAsB,EAAE;IACrF,wDAAwD;IACxD,MAAM,QAAQ,GAAG,oCAAoC,CAAC;IACtD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,8BAA8B,CAAC;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,yDAAyD;IACzD,MAAM,QAAQ,GAAG,yBAAyB,CAAC;IAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,MAA+C,EAAW,EAAE;IACjF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,CACL,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAC7B,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,aAAa,GAAG,CAAC,IAAyB,EAAkB,EAAE;IACzE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,qDAAqD;QACrD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SAC/B,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEnD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,yEAAyE;QACzE,MAAM,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,gCAAgC,CACjD,gBAAgB,CAAC,OAAO,IAAI,gBAAgB,CAAC,KAAK,CACnD,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,UAAU,IAAI,SAAS;SACpC,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,WAAW,CAAC,KAAK;KAC/B,CAAC;AACJ,CAAC,CAAC;AAjCW,QAAA,aAAa,iBAiCxB"}
|
package/dist/dataSanitizer.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepoDiff } from "./types";
|
|
2
2
|
/**
|
|
3
3
|
* Sanitized diff type without unnecessary fields
|
|
4
4
|
*/
|
|
@@ -14,9 +14,9 @@ export interface SanitizedDiff {
|
|
|
14
14
|
* Sanitizes diff data by removing unnecessary fields
|
|
15
15
|
* Removes: collapsed, too_large, a_mode, b_mode, generated_file
|
|
16
16
|
*/
|
|
17
|
-
export declare const sanitizeDiff: (diff:
|
|
17
|
+
export declare const sanitizeDiff: (diff: RepoDiff) => SanitizedDiff;
|
|
18
18
|
/**
|
|
19
19
|
* Sanitizes an array of diffs
|
|
20
20
|
*/
|
|
21
|
-
export declare const sanitizeDiffs: (diffs:
|
|
21
|
+
export declare const sanitizeDiffs: (diffs: RepoDiff[]) => SanitizedDiff[];
|
|
22
22
|
//# sourceMappingURL=dataSanitizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataSanitizer.d.ts","sourceRoot":"","sources":["../src/dataSanitizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dataSanitizer.d.ts","sourceRoot":"","sources":["../src/dataSanitizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,QAAQ,KAAG,aAS7C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,QAAQ,EAAE,KAAG,aAAa,EAE9D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataSanitizer.js","sourceRoot":"","sources":["../src/dataSanitizer.ts"],"names":[],"mappings":";;;AAcA;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"dataSanitizer.js","sourceRoot":"","sources":["../src/dataSanitizer.ts"],"names":[],"mappings":";;;AAcA;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,IAAc,EAAiB,EAAE;IAC5D,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,YAAY,gBASvB;AAEF;;GAEG;AACI,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAmB,EAAE;IAClE,OAAO,KAAK,CAAC,GAAG,CAAC,oBAAY,CAAC,CAAC;AACjC,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RepoCompareResponse } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Fetches diff between two commits from GitHub API
|
|
4
|
+
*/
|
|
5
|
+
export declare const getGitHubDiff: (beforeHash: string, afterHash: string, owner: string, repo: string, token: string) => Promise<RepoCompareResponse>;
|
|
6
|
+
//# sourceMappingURL=getGitHubDiff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getGitHubDiff.d.ts","sourceRoot":"","sources":["../src/getGitHubDiff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAwB,MAAM,SAAS,CAAC;AAkGpE;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,MAAM,EAClB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,OAAO,MAAM,KACZ,OAAO,CAAC,mBAAmB,CAqE7B,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getGitHubDiff = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const GITHUB_API_BASE_URL = "https://api.github.com";
|
|
9
|
+
/**
|
|
10
|
+
* Maps GitHub commit to RepoCommit format
|
|
11
|
+
*/
|
|
12
|
+
const mapGitHubCommitToRepoCommit = (ghCommit) => {
|
|
13
|
+
const shortId = ghCommit.sha.substring(0, 8);
|
|
14
|
+
const message = ghCommit.commit.message;
|
|
15
|
+
const title = message.split("\n")[0]; // First line is the title
|
|
16
|
+
return {
|
|
17
|
+
id: ghCommit.sha,
|
|
18
|
+
short_id: shortId,
|
|
19
|
+
title: title,
|
|
20
|
+
author_name: ghCommit.commit.author.name,
|
|
21
|
+
author_email: ghCommit.commit.author.email,
|
|
22
|
+
authored_date: ghCommit.commit.author.date,
|
|
23
|
+
committer_name: ghCommit.commit.committer.name,
|
|
24
|
+
committer_email: ghCommit.commit.committer.email,
|
|
25
|
+
committed_date: ghCommit.commit.committer.date,
|
|
26
|
+
created_at: ghCommit.commit.committer.date,
|
|
27
|
+
message: message,
|
|
28
|
+
parent_ids: ghCommit.parents.map((p) => p.sha),
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Maps GitHub file change to RepoDiff format
|
|
33
|
+
*/
|
|
34
|
+
const mapGitHubFileToRepoDiff = (ghFile) => {
|
|
35
|
+
const isNewFile = ghFile.status === "added";
|
|
36
|
+
const isDeletedFile = ghFile.status === "removed";
|
|
37
|
+
const isRenamedFile = ghFile.status === "renamed";
|
|
38
|
+
return {
|
|
39
|
+
old_path: ghFile.previous_filename || ghFile.filename,
|
|
40
|
+
new_path: ghFile.filename,
|
|
41
|
+
a_mode: "100644", // Default file mode for GitHub
|
|
42
|
+
b_mode: "100644",
|
|
43
|
+
diff: ghFile.patch || "",
|
|
44
|
+
new_file: isNewFile,
|
|
45
|
+
renamed_file: isRenamedFile,
|
|
46
|
+
deleted_file: isDeletedFile,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Fetches diff between two commits from GitHub API
|
|
51
|
+
*/
|
|
52
|
+
const getGitHubDiff = async (beforeHash, afterHash, owner, repo, token) => {
|
|
53
|
+
const apiClient = axios_1.default.create({
|
|
54
|
+
baseURL: GITHUB_API_BASE_URL,
|
|
55
|
+
headers: {
|
|
56
|
+
Authorization: `token ${token}`,
|
|
57
|
+
Accept: "application/vnd.github.v3+json",
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
const url = `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/compare/${beforeHash}...${afterHash}`;
|
|
61
|
+
try {
|
|
62
|
+
const response = await apiClient.get(url);
|
|
63
|
+
// Map GitHub response to our generic format
|
|
64
|
+
const commits = response.data.commits.map(mapGitHubCommitToRepoCommit);
|
|
65
|
+
const diffs = response.data.files.map(mapGitHubFileToRepoDiff);
|
|
66
|
+
// Use the base commit as the main commit, or the first commit if available
|
|
67
|
+
const mainCommit = commits.length > 0 ? commits[commits.length - 1] : mapGitHubCommitToRepoCommit(response.data.base_commit);
|
|
68
|
+
// GitHub API limits: 300 files or 250 commits
|
|
69
|
+
// If we hit these limits, the response is truncated
|
|
70
|
+
const overflow = response.data.files.length >= 300 || response.data.commits.length >= 250;
|
|
71
|
+
return {
|
|
72
|
+
commit: mainCommit,
|
|
73
|
+
commits: commits,
|
|
74
|
+
diffs: diffs,
|
|
75
|
+
compare_timeout: false, // GitHub doesn't have a timeout field
|
|
76
|
+
compare_same_ref: response.data.status === "identical",
|
|
77
|
+
overflow: overflow,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
82
|
+
if (error.response) {
|
|
83
|
+
const status = error.response.status;
|
|
84
|
+
const statusText = error.response.statusText;
|
|
85
|
+
const errorData = error.response.data;
|
|
86
|
+
const errorMessage = errorData?.message || "";
|
|
87
|
+
let fullErrorMessage = `GitHub API error: ${status} - ${statusText}`;
|
|
88
|
+
if (errorMessage) {
|
|
89
|
+
fullErrorMessage += `\nMessage: ${errorMessage}`;
|
|
90
|
+
}
|
|
91
|
+
if (status === 403) {
|
|
92
|
+
fullErrorMessage += `\n\nPossible causes:
|
|
93
|
+
- Token doesn't have 'repo' scope enabled
|
|
94
|
+
- Token doesn't have access to repository ${owner}/${repo}
|
|
95
|
+
- Repository might be private and token lacks permissions
|
|
96
|
+
- Token might be expired or invalid`;
|
|
97
|
+
}
|
|
98
|
+
if (status === 404) {
|
|
99
|
+
fullErrorMessage += `\n\nPossible causes:
|
|
100
|
+
- Repository ${owner}/${repo} not found
|
|
101
|
+
- Commit hashes might be invalid
|
|
102
|
+
- Repository might not exist or be inaccessible`;
|
|
103
|
+
}
|
|
104
|
+
throw new Error(fullErrorMessage);
|
|
105
|
+
}
|
|
106
|
+
throw new Error(`Network error: ${error.message}`);
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
exports.getGitHubDiff = getGitHubDiff;
|
|
112
|
+
//# sourceMappingURL=getGitHubDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getGitHubDiff.js","sourceRoot":"","sources":["../src/getGitHubDiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { RepoCompareResponse } from "./types";
|
|
2
|
+
export declare const verifyTokenAccess: (projectId: string, token: string) => Promise<void>;
|
|
3
|
+
export declare const getGitLabDiff: (beforeHash: string, afterHash: string, projectId: string, token: string) => Promise<RepoCompareResponse>;
|
|
4
|
+
//# sourceMappingURL=getGitLabDiff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getGitLabDiff.d.ts","sourceRoot":"","sources":["../src/getGitLabDiff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAY,MAAM,SAAS,CAAC;AAIxD,eAAO,MAAM,iBAAiB,GAC5B,WAAW,MAAM,EACjB,OAAO,MAAM,KACZ,OAAO,CAAC,IAAI,CAqBd,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,YAAY,MAAM,EAClB,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,OAAO,MAAM,KACZ,OAAO,CAAC,mBAAmB,CA0J7B,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getGitLabDiff = exports.verifyTokenAccess = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const GITLAB_API_BASE_URL = "https://gitlab.com/api/v4";
|
|
9
|
+
const verifyTokenAccess = async (projectId, token) => {
|
|
10
|
+
const apiClient = axios_1.default.create({
|
|
11
|
+
baseURL: GITLAB_API_BASE_URL,
|
|
12
|
+
headers: {
|
|
13
|
+
"PRIVATE-TOKEN": token,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
try {
|
|
17
|
+
await apiClient.get(`/projects/${encodeURIComponent(projectId)}`);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
if (axios_1.default.isAxiosError(error) && error.response?.status === 403) {
|
|
21
|
+
throw new Error(`Token doesn't have access to project ${projectId}. Please verify:
|
|
22
|
+
1. Token has 'api' scope enabled
|
|
23
|
+
2. Token has access to this project
|
|
24
|
+
3. Project ID is correct`);
|
|
25
|
+
}
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.verifyTokenAccess = verifyTokenAccess;
|
|
30
|
+
const getGitLabDiff = async (beforeHash, afterHash, projectId, token) => {
|
|
31
|
+
const apiClient = axios_1.default.create({
|
|
32
|
+
baseURL: GITLAB_API_BASE_URL,
|
|
33
|
+
headers: {
|
|
34
|
+
"PRIVATE-TOKEN": token,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const url = `/projects/${encodeURIComponent(projectId)}/repository/compare`;
|
|
38
|
+
const params = {
|
|
39
|
+
from: beforeHash,
|
|
40
|
+
to: afterHash,
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
let response = await apiClient.get(url, {
|
|
44
|
+
params,
|
|
45
|
+
});
|
|
46
|
+
// If no diffs returned, try alternative approaches
|
|
47
|
+
if (response.data.diffs.length === 0 && response.data.commits.length > 0) {
|
|
48
|
+
const allDiffs = [];
|
|
49
|
+
const processedFiles = new Set();
|
|
50
|
+
// Strategy 1: For merge commits, compare with their first parent to get merged changes
|
|
51
|
+
for (const commit of response.data.commits) {
|
|
52
|
+
const isMergeCommit = commit.title.toLowerCase().startsWith("merge") ||
|
|
53
|
+
commit.parent_ids.length > 1;
|
|
54
|
+
if (isMergeCommit && commit.parent_ids.length > 0) {
|
|
55
|
+
// Compare merge commit with its first parent (main branch before merge)
|
|
56
|
+
try {
|
|
57
|
+
const mergeCompareUrl = `/projects/${encodeURIComponent(projectId)}/repository/compare`;
|
|
58
|
+
const mergeCompareParams = {
|
|
59
|
+
from: commit.parent_ids[0], // First parent (main branch)
|
|
60
|
+
to: commit.id, // The merge commit
|
|
61
|
+
};
|
|
62
|
+
const mergeCompareResponse = await apiClient.get(mergeCompareUrl, { params: mergeCompareParams });
|
|
63
|
+
// Add unique diffs from this merge
|
|
64
|
+
for (const diff of mergeCompareResponse.data.diffs) {
|
|
65
|
+
const fileKey = `${diff.old_path}-${diff.new_path}`;
|
|
66
|
+
if (!processedFiles.has(fileKey)) {
|
|
67
|
+
processedFiles.add(fileKey);
|
|
68
|
+
allDiffs.push(diff);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (mergeError) {
|
|
73
|
+
// If merge compare fails, try getting individual commit diff
|
|
74
|
+
try {
|
|
75
|
+
const commitDiffUrl = `/projects/${encodeURIComponent(projectId)}/repository/commits/${commit.id}/diff`;
|
|
76
|
+
const commitDiffResponse = await apiClient.get(commitDiffUrl);
|
|
77
|
+
for (const diff of commitDiffResponse.data) {
|
|
78
|
+
const fileKey = `${diff.old_path}-${diff.new_path}`;
|
|
79
|
+
if (!processedFiles.has(fileKey)) {
|
|
80
|
+
processedFiles.add(fileKey);
|
|
81
|
+
allDiffs.push(diff);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (commitError) {
|
|
86
|
+
// Skip this commit if we can't get its diff
|
|
87
|
+
console.warn(`Warning: Could not get diff for merge commit ${commit.short_id}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if (!isMergeCommit) {
|
|
92
|
+
// Strategy 2: For non-merge commits, get their direct diff
|
|
93
|
+
try {
|
|
94
|
+
const commitDiffUrl = `/projects/${encodeURIComponent(projectId)}/repository/commits/${commit.id}/diff`;
|
|
95
|
+
const commitDiffResponse = await apiClient.get(commitDiffUrl);
|
|
96
|
+
for (const diff of commitDiffResponse.data) {
|
|
97
|
+
const fileKey = `${diff.old_path}-${diff.new_path}`;
|
|
98
|
+
if (!processedFiles.has(fileKey)) {
|
|
99
|
+
processedFiles.add(fileKey);
|
|
100
|
+
allDiffs.push(diff);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (commitError) {
|
|
105
|
+
console.warn(`Warning: Could not get diff for commit ${commit.short_id}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// If we found diffs, add them to the response
|
|
110
|
+
if (allDiffs.length > 0) {
|
|
111
|
+
response.data.diffs = allDiffs;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Ensure overflow field is set (defaults to false if not present from API)
|
|
115
|
+
return {
|
|
116
|
+
...response.data,
|
|
117
|
+
overflow: response.data.overflow ?? false,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
122
|
+
if (error.response) {
|
|
123
|
+
const status = error.response.status;
|
|
124
|
+
const statusText = error.response.statusText;
|
|
125
|
+
const errorData = error.response.data;
|
|
126
|
+
const errorMessage = errorData?.message || errorData?.error || "";
|
|
127
|
+
const errorDetails = errorData?.error_description || "";
|
|
128
|
+
let fullErrorMessage = `GitLab API error: ${status} - ${statusText}`;
|
|
129
|
+
if (errorMessage) {
|
|
130
|
+
fullErrorMessage += `\nMessage: ${errorMessage}`;
|
|
131
|
+
}
|
|
132
|
+
if (errorDetails) {
|
|
133
|
+
fullErrorMessage += `\nDetails: ${errorDetails}`;
|
|
134
|
+
}
|
|
135
|
+
if (status === 403) {
|
|
136
|
+
fullErrorMessage += `\n\nPossible causes:
|
|
137
|
+
- Token doesn't have 'api' or 'read_repository' scope
|
|
138
|
+
- Token doesn't have access to project ${projectId}
|
|
139
|
+
- Project might be private and token lacks permissions
|
|
140
|
+
- Token might be expired or invalid`;
|
|
141
|
+
}
|
|
142
|
+
if (status === 404) {
|
|
143
|
+
fullErrorMessage += `\n\nPossible causes:
|
|
144
|
+
- Project ID ${projectId} not found
|
|
145
|
+
- Commit hashes might be invalid
|
|
146
|
+
- Project might not exist or be inaccessible`;
|
|
147
|
+
}
|
|
148
|
+
throw new Error(fullErrorMessage);
|
|
149
|
+
}
|
|
150
|
+
throw new Error(`Network error: ${error.message}`);
|
|
151
|
+
}
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
exports.getGitLabDiff = getGitLabDiff;
|
|
156
|
+
//# sourceMappingURL=getGitLabDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getGitLabDiff.js","sourceRoot":"","sources":["../src/getGitLabDiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepoCompareResponse, RepoCommit } from "./types";
|
|
2
2
|
import { SanitizedDiff } from "./dataSanitizer";
|
|
3
3
|
interface SanitizedCompareResponse {
|
|
4
|
-
commit:
|
|
5
|
-
commits:
|
|
4
|
+
commit: RepoCommit;
|
|
5
|
+
commits: RepoCommit[];
|
|
6
6
|
diffs: SanitizedDiff[];
|
|
7
7
|
compare_timeout: boolean;
|
|
8
8
|
compare_same_ref: boolean;
|
|
@@ -14,6 +14,6 @@ interface SanitizedCompareResponse {
|
|
|
14
14
|
*/
|
|
15
15
|
export declare const shouldIncludeDiff: (filePath: string) => boolean;
|
|
16
16
|
export declare const getSystemPrompt: () => string;
|
|
17
|
-
export declare const prepareUserPrompt: (data: SanitizedCompareResponse |
|
|
17
|
+
export declare const prepareUserPrompt: (data: SanitizedCompareResponse | RepoCompareResponse) => string;
|
|
18
18
|
export {};
|
|
19
19
|
//# sourceMappingURL=promptInstructions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promptInstructions.d.ts","sourceRoot":"","sources":["../src/promptInstructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"promptInstructions.d.ts","sourceRoot":"","sources":["../src/promptInstructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,UAAU,wBAAwB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,OAyFpD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,MAyClC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,wBAAwB,GAAG,mBAAmB,KACnD,MAwDF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promptInstructions.js","sourceRoot":"","sources":["../src/promptInstructions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"promptInstructions.js","sourceRoot":"","sources":["../src/promptInstructions.ts"],"names":[],"mappings":"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"}
|
package/dist/slackClient.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReleaseContext } from "./contextDetector";
|
|
2
|
+
export declare const sendSlackMessage: (slackToken: string, channelId: string, markdownText: string, context?: ReleaseContext) => Promise<void>;
|
|
2
3
|
//# sourceMappingURL=slackClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slackClient.d.ts","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slackClient.d.ts","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsInD,eAAO,MAAM,gBAAgB,GAC3B,YAAY,MAAM,EAClB,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,UAAU,cAAc,KACvB,OAAO,CAAC,IAAI,CAkGd,CAAC"}
|
package/dist/slackClient.js
CHANGED
|
@@ -5,6 +5,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.sendSlackMessage = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
/**
|
|
9
|
+
* Creates a context header block for Slack with underline
|
|
10
|
+
*/
|
|
11
|
+
const createContextHeader = (context) => {
|
|
12
|
+
const blocks = [];
|
|
13
|
+
if (context.type === "merge") {
|
|
14
|
+
const branchName = context.branchName || "unknown branch";
|
|
15
|
+
blocks.push({
|
|
16
|
+
type: "section",
|
|
17
|
+
text: {
|
|
18
|
+
type: "mrkdwn",
|
|
19
|
+
text: `_Merge of_ \`${branchName}\` _branch_`,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else if (context.type === "single" && context.commitTitle) {
|
|
24
|
+
blocks.push({
|
|
25
|
+
type: "section",
|
|
26
|
+
text: {
|
|
27
|
+
type: "mrkdwn",
|
|
28
|
+
text: `Commit: \`${context.commitTitle}\``,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return blocks;
|
|
33
|
+
};
|
|
8
34
|
/**
|
|
9
35
|
* Converts markdown release notes to Slack Block Kit format
|
|
10
36
|
*/
|
|
@@ -72,15 +98,67 @@ const convertMarkdownToSlackBlocks = (markdown) => {
|
|
|
72
98
|
flushSection();
|
|
73
99
|
return blocks;
|
|
74
100
|
};
|
|
75
|
-
const sendSlackMessage = async (slackToken, channelId, markdownText) => {
|
|
101
|
+
const sendSlackMessage = async (slackToken, channelId, markdownText, context) => {
|
|
76
102
|
try {
|
|
77
103
|
// Convert markdown to Slack Block Kit format
|
|
78
104
|
const blocks = convertMarkdownToSlackBlocks(markdownText);
|
|
105
|
+
// Insert context header after "Summary" section content if provided
|
|
106
|
+
if (context) {
|
|
107
|
+
const contextBlocks = createContextHeader(context);
|
|
108
|
+
if (contextBlocks.length > 0) {
|
|
109
|
+
// Find the "Summary" header and then find its content section
|
|
110
|
+
let insertIndex = -1;
|
|
111
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
112
|
+
const block = blocks[i];
|
|
113
|
+
if (block.type === "header" &&
|
|
114
|
+
block.text?.text?.toLowerCase().includes("summary")) {
|
|
115
|
+
// Find the section content block that follows the Summary header
|
|
116
|
+
for (let j = i + 1; j < blocks.length; j++) {
|
|
117
|
+
if (blocks[j].type === "section") {
|
|
118
|
+
// Insert after this section block (after the summary paragraph)
|
|
119
|
+
insertIndex = j + 1;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
// If we hit a divider or header before finding section, insert after header
|
|
123
|
+
if (blocks[j].type === "divider" || blocks[j].type === "header") {
|
|
124
|
+
insertIndex = j;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// If Summary section not found, insert after first section content
|
|
132
|
+
if (insertIndex === -1) {
|
|
133
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
134
|
+
if (blocks[i].type === "section") {
|
|
135
|
+
insertIndex = i + 1;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Fallback: insert at start if no sections found
|
|
140
|
+
if (insertIndex === -1) {
|
|
141
|
+
insertIndex = 0;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Insert context blocks (section + divider for underline)
|
|
145
|
+
blocks.splice(insertIndex, 0, ...contextBlocks);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
79
148
|
// Fallback text for notifications
|
|
80
|
-
|
|
149
|
+
let fallbackText = markdownText
|
|
81
150
|
.replace(/##\s*/g, "")
|
|
82
151
|
.replace(/\*\*(.+?)\*\*/g, "$1")
|
|
83
152
|
.substring(0, 200);
|
|
153
|
+
// Add context to fallback text if provided
|
|
154
|
+
if (context) {
|
|
155
|
+
const contextText = context.type === "merge"
|
|
156
|
+
? `Merge of ${context.branchName || "unknown branch"} branch\n\n`
|
|
157
|
+
: context.commitTitle
|
|
158
|
+
? `Commit: '${context.commitTitle}'\n\n`
|
|
159
|
+
: "";
|
|
160
|
+
fallbackText = contextText + fallbackText;
|
|
161
|
+
}
|
|
84
162
|
const response = await axios_1.default.post("https://slack.com/api/chat.postMessage", {
|
|
85
163
|
channel: channelId,
|
|
86
164
|
text: fallbackText,
|
package/dist/slackClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slackClient.js","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;
|
|
1
|
+
{"version":3,"file":"slackClient.js","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":"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"}
|
package/dist/tokenEstimator.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RepoCompareResponse } from "./types";
|
|
2
2
|
interface TokenEstimate {
|
|
3
3
|
totalTokens: number;
|
|
4
4
|
inputTokens: number;
|
|
@@ -16,7 +16,7 @@ interface TokenEstimate {
|
|
|
16
16
|
* @param options - Configuration options
|
|
17
17
|
* @returns Token estimate breakdown
|
|
18
18
|
*/
|
|
19
|
-
export declare const estimateTokenUsage: (data:
|
|
19
|
+
export declare const estimateTokenUsage: (data: RepoCompareResponse, options?: {
|
|
20
20
|
includeDiffs?: boolean;
|
|
21
21
|
includeSystemPrompt?: boolean;
|
|
22
22
|
systemPrompt?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenEstimator.d.ts","sourceRoot":"","sources":["../src/tokenEstimator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tokenEstimator.d.ts","sourceRoot":"","sources":["../src/tokenEstimator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAY,MAAM,SAAS,CAAC;AAExD,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAwDD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,mBAAmB,EACzB,UAAS;IACP,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,KACL,aA0DF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,aAAa,KAAG,MAc7D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,MAAM,EACd,QAAO,aAAa,GAAG,QAAQ,GAAG,eAAe,GAAG,QAAwB,KAC3E,MAkCF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenEstimator.js","sourceRoot":"","sources":["../src/tokenEstimator.ts"],"names":[],"mappings":";;;AAcA;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IAC9C,+DAA+D;IAC/D,iEAAiE;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAW,EAAE;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,eAAe,GAAG;QACtB,MAAM;QACN,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,QAAQ;QACR,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC;IAEF,MAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACrD,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CACxB,CAAC;IAEF,MAAM,kBAAkB,GACtB,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC9B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QAC/B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QAC/B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QAC/B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAElC,OAAO,iBAAiB,IAAI,kBAAkB,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"tokenEstimator.js","sourceRoot":"","sources":["../src/tokenEstimator.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface RepoCommit {
|
|
2
2
|
id: string;
|
|
3
3
|
short_id: string;
|
|
4
4
|
title: string;
|
|
@@ -12,7 +12,7 @@ export interface GitLabCommit {
|
|
|
12
12
|
message: string;
|
|
13
13
|
parent_ids: string[];
|
|
14
14
|
}
|
|
15
|
-
export interface
|
|
15
|
+
export interface RepoDiff {
|
|
16
16
|
old_path: string;
|
|
17
17
|
new_path: string;
|
|
18
18
|
a_mode: string;
|
|
@@ -22,11 +22,15 @@ export interface GitLabDiff {
|
|
|
22
22
|
renamed_file: boolean;
|
|
23
23
|
deleted_file: boolean;
|
|
24
24
|
}
|
|
25
|
-
export interface
|
|
26
|
-
commit:
|
|
27
|
-
commits:
|
|
28
|
-
diffs:
|
|
25
|
+
export interface RepoCompareResponse {
|
|
26
|
+
commit: RepoCommit;
|
|
27
|
+
commits: RepoCommit[];
|
|
28
|
+
diffs: RepoDiff[];
|
|
29
29
|
compare_timeout: boolean;
|
|
30
30
|
compare_same_ref: boolean;
|
|
31
|
+
overflow: boolean;
|
|
31
32
|
}
|
|
33
|
+
export type GitLabCommit = RepoCommit;
|
|
34
|
+
export type GitLabDiff = RepoDiff;
|
|
35
|
+
export type GitLabCompareResponse = RepoCompareResponse;
|
|
32
36
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AACtC,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;AAClC,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CAAC"}
|