@lvnt/release-radar 1.9.2 → 1.9.4

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.
@@ -166,12 +166,8 @@
166
166
  },
167
167
  "Go": {
168
168
  "displayName": "Go Extension",
169
- "downloadUrl": "{{MIRROR_URL}}",
170
- "filename": "go-{{VERSION}}.vsix",
171
- "mirror": {
172
- "sourceUrl": "marketplace-api",
173
- "extensionId": "golang.go"
174
- }
169
+ "downloadUrl": "github.com/golang/vscode-go/releases/download/v{{VERSION}}/go-{{VERSION}}.vsix",
170
+ "filename": "go-{{VERSION}}.vsix"
175
171
  },
176
172
  "GitHub Theme": {
177
173
  "displayName": "GitHub Theme",
@@ -184,11 +180,7 @@
184
180
  },
185
181
  "Material Icon Theme": {
186
182
  "displayName": "Material Icon Theme",
187
- "downloadUrl": "{{MIRROR_URL}}",
188
- "filename": "material-icon-theme-{{VERSION}}.vsix",
189
- "mirror": {
190
- "sourceUrl": "marketplace-api",
191
- "extensionId": "pkief.material-icon-theme"
192
- }
183
+ "downloadUrl": "github.com/material-extensions/vscode-material-icon-theme/releases/download/v{{VERSION}}/material-icon-theme-{{VERSION}}.vsix",
184
+ "filename": "material-icon-theme-{{VERSION}}.vsix"
193
185
  }
194
186
  }
package/config/tools.json CHANGED
@@ -130,8 +130,8 @@
130
130
  },
131
131
  {
132
132
  "name": "Go",
133
- "type": "vscode-marketplace",
134
- "extensionId": "golang.go"
133
+ "type": "github",
134
+ "repo": "golang/vscode-go"
135
135
  },
136
136
  {
137
137
  "name": "GitHub Theme",
@@ -140,8 +140,8 @@
140
140
  },
141
141
  {
142
142
  "name": "Material Icon Theme",
143
- "type": "vscode-marketplace",
144
- "extensionId": "pkief.material-icon-theme"
143
+ "type": "github",
144
+ "repo": "material-extensions/vscode-material-icon-theme"
145
145
  }
146
146
  ]
147
147
  }
@@ -20,6 +20,10 @@ export declare class AssetMirror {
20
20
  * Mirror a single tool (legacy method, still used for /mirror command)
21
21
  */
22
22
  mirror(toolName: string, version: string, config: MirrorConfig, filenameTemplate: string): Promise<MirrorResult>;
23
+ /**
24
+ * Small delay to prevent buffer exhaustion on low-memory systems (RPi)
25
+ */
26
+ private sleep;
23
27
  /**
24
28
  * Mirror multiple tools into a single batch release
25
29
  */
@@ -41,6 +41,12 @@ export class AssetMirror {
41
41
  return { success: false, error: message };
42
42
  }
43
43
  }
44
+ /**
45
+ * Small delay to prevent buffer exhaustion on low-memory systems (RPi)
46
+ */
47
+ sleep(ms) {
48
+ return new Promise(resolve => setTimeout(resolve, ms));
49
+ }
44
50
  /**
45
51
  * Mirror multiple tools into a single batch release
46
52
  */
@@ -49,8 +55,9 @@ export class AssetMirror {
49
55
  const results = new Map();
50
56
  const downloadedFiles = [];
51
57
  console.log(`[AssetMirror] Starting batch mirror for ${items.length} items, tag: ${tag}`);
52
- // Download all files first
53
- for (const item of items) {
58
+ // Download all files first (with delays to prevent buffer exhaustion)
59
+ for (let i = 0; i < items.length; i++) {
60
+ const item = items[i];
54
61
  const filename = this.applyVersion(item.filenameTemplate, item.version);
55
62
  const downloadUrl = `github.com/${this.repo}/releases/download/${tag}/${filename}`;
56
63
  try {
@@ -68,11 +75,19 @@ export class AssetMirror {
68
75
  await this.downloadFile(sourceUrl, tempPath);
69
76
  downloadedFiles.push({ path: tempPath, filename });
70
77
  results.set(item.toolName, { success: true, downloadUrl });
78
+ // Add delay between downloads to let buffers clear (except after last item)
79
+ if (i < items.length - 1) {
80
+ await this.sleep(1000);
81
+ }
71
82
  }
72
83
  catch (error) {
73
84
  const message = error instanceof Error ? error.message : String(error);
74
85
  console.error(`[AssetMirror] Failed to download ${item.toolName}: ${message}`);
75
86
  results.set(item.toolName, { success: false, error: message });
87
+ // Also add delay after failures
88
+ if (i < items.length - 1) {
89
+ await this.sleep(1000);
90
+ }
76
91
  }
77
92
  }
78
93
  // Create single release with all downloaded files
@@ -126,6 +141,7 @@ export class AssetMirror {
126
141
  execSync(`gh release view ${tag} --repo ${this.repo}`, {
127
142
  encoding: 'utf-8',
128
143
  stdio: ['pipe', 'pipe', 'pipe'],
144
+ maxBuffer: 10 * 1024 * 1024,
129
145
  });
130
146
  return true;
131
147
  }
@@ -159,7 +175,7 @@ export class AssetMirror {
159
175
  `-H 'Accept: application/json; api-version=7.2-preview.1' ` +
160
176
  `-H 'Content-Type: application/json' ` +
161
177
  `--data '${query}'`;
162
- const response = execSync(cmd, { encoding: 'utf-8', timeout: 30000 });
178
+ const response = execSync(cmd, { encoding: 'utf-8', timeout: 30000, maxBuffer: 10 * 1024 * 1024 });
163
179
  const data = JSON.parse(response);
164
180
  const versions = data.results?.[0]?.extensions?.[0]?.versions || [];
165
181
  // Find matching version - with or without platform filter
@@ -186,6 +202,7 @@ export class AssetMirror {
186
202
  execSync(`curl -sS -L -o "${destPath}" "${url}"`, {
187
203
  encoding: 'utf-8',
188
204
  timeout: 300000, // 5 minutes for large files
205
+ maxBuffer: 10 * 1024 * 1024,
189
206
  });
190
207
  if (!existsSync(destPath)) {
191
208
  throw new Error('Download failed - file not created');
@@ -195,7 +212,7 @@ export class AssetMirror {
195
212
  const title = `${toolName} ${version}`;
196
213
  const notes = `Mirrored for Nexus proxy access.`;
197
214
  execSync(`gh release create "${tag}" "${filePath}#${filename}" ` +
198
- `--repo ${this.repo} --title "${title}" --notes "${notes}"`, { encoding: 'utf-8', timeout: 300000 });
215
+ `--repo ${this.repo} --title "${title}" --notes "${notes}"`, { encoding: 'utf-8', timeout: 300000, maxBuffer: 10 * 1024 * 1024 });
199
216
  }
200
217
  async createBatchRelease(tag, files, items) {
201
218
  const date = new Date().toLocaleDateString('en-US', {
@@ -213,7 +230,7 @@ export class AssetMirror {
213
230
  // Build file arguments for gh release create
214
231
  const fileArgs = files.map(f => `"${f.path}#${f.filename}"`).join(' ');
215
232
  execSync(`gh release create "${tag}" ${fileArgs} ` +
216
- `--repo ${this.repo} --title "${title}" --notes "${notes}"`, { encoding: 'utf-8', timeout: 600000 } // 10 minutes for multiple uploads
233
+ `--repo ${this.repo} --title "${title}" --notes "${notes}"`, { encoding: 'utf-8', timeout: 600000, maxBuffer: 10 * 1024 * 1024 } // 10 minutes for multiple uploads
217
234
  );
218
235
  }
219
236
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvnt/release-radar",
3
- "version": "1.9.2",
3
+ "version": "1.9.4",
4
4
  "description": "Monitor tool versions and notify via Telegram when updates are detected",
5
5
  "main": "dist/index.js",
6
6
  "bin": {