Skip to content

Commit d609e49

Browse files
committed
Treat missing release assets as user error
1 parent 8439c2e commit d609e49

File tree

3 files changed

+50
-11
lines changed

3 files changed

+50
-11
lines changed

src/add-progress-bar.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import ProgressBar from 'progress';
2+
import { isGoGitItSilentError } from './utils/errors.js';
23

34
export default async function addProgressBar(
45
text: string | undefined,
@@ -44,7 +45,9 @@ export default async function addProgressBar(
4445
// Ensure the interval is cleared in case of error
4546
clearInterval(timer);
4647

47-
console.error('[go-git-it] An error occurred:', error);
48+
if (!isGoGitItSilentError(error)) {
49+
console.error('[go-git-it] An error occurred:', error);
50+
}
4851
reject(error);
4952
});
5053
});

src/utils/download-strategies.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
pathExists,
1010
moveFileOrDirectory,
1111
} from './cross-platform.js';
12+
import { GoGitItSilentError } from './errors.js';
1213
import { GitHubUrlData } from './url-parser.js';
1314

1415
export async function downloadFullRepository(
@@ -153,11 +154,20 @@ export async function downloadReleaseAsset(
153154
https
154155
.get(redirectUrl, (redirectResponse) => {
155156
if (redirectResponse.statusCode !== 200) {
156-
reject(
157-
new Error(
158-
`Failed to download release asset: HTTP ${redirectResponse.statusCode}`,
159-
),
160-
);
157+
const statusCode = redirectResponse.statusCode;
158+
if (statusCode === 404) {
159+
reject(
160+
new GoGitItSilentError(
161+
'Release asset not found (HTTP 404). Check the release tag and asset name.',
162+
),
163+
);
164+
} else {
165+
reject(
166+
new Error(
167+
`Failed to download release asset: HTTP ${statusCode}`,
168+
),
169+
);
170+
}
161171
return;
162172
}
163173

@@ -177,11 +187,20 @@ export async function downloadReleaseAsset(
177187
if (response.statusCode !== 200) {
178188
writeStream.destroy();
179189
fileHandle.close();
180-
reject(
181-
new Error(
182-
`Failed to download release asset: HTTP ${response.statusCode}`,
183-
),
184-
);
190+
const statusCode = response.statusCode;
191+
if (statusCode === 404) {
192+
reject(
193+
new GoGitItSilentError(
194+
'Release asset not found (HTTP 404). Check the release tag and asset name.',
195+
),
196+
);
197+
} else {
198+
reject(
199+
new Error(
200+
`Failed to download release asset: HTTP ${statusCode}`,
201+
),
202+
);
203+
}
185204
return;
186205
}
187206

src/utils/errors.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export class GoGitItSilentError extends Error {
2+
public readonly silent = true;
3+
4+
constructor(message: string) {
5+
super(message);
6+
this.name = 'GoGitItSilentError';
7+
}
8+
}
9+
10+
export function isGoGitItSilentError(error: unknown): boolean {
11+
return (
12+
error instanceof GoGitItSilentError ||
13+
(typeof error === 'object' &&
14+
error !== null &&
15+
(error as { silent?: boolean }).silent === true)
16+
);
17+
}

0 commit comments

Comments
 (0)