Skip to content

Commit 18cb7ec

Browse files
authored
Merge pull request #102 from beNative/codex/add-logging-to-repoeditview-methods
Improve release logging in RepoEditView
2 parents 6b94b07 + 7a90e99 commit 18cb7ec

File tree

1 file changed

+94
-40
lines changed

1 file changed

+94
-40
lines changed

components/modals/RepoFormModal.tsx

Lines changed: 94 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,20 +2225,20 @@ const RepoEditView: React.FC<RepoEditViewProps> = ({ onSave, onCancel, repositor
22252225
});
22262226
setReleasesError("A GitHub Personal Access Token is required to manage releases. Please set one in Settings > Behavior.");
22272227
} else {
2228-
logger.error('Failed to fetch releases despite GitHub PAT', {
2229-
repoId: repository?.id ?? null,
2230-
repoPath: repository?.localPath ?? null,
2231-
remoteUrl: repository?.remoteUrl ?? null,
2228+
const errorMessage = "Failed to fetch releases. This may be due to an invalid PAT or insufficient permissions (requires 'Contents: Read & write'). Check the debug console for more details.";
2229+
logger.error('Failed to fetch releases for repository', {
2230+
repoId: repository.id,
2231+
repoName: repository.name,
2232+
error: errorMessage,
22322233
});
2233-
setReleasesError("Failed to fetch releases. This may be due to an invalid PAT or insufficient permissions (requires 'Contents: Read & write'). Check the debug console for more details.");
2234+
setReleasesError(errorMessage);
22342235
}
22352236
}
22362237
} catch (e: any) {
2237-
logger.error('Failed to fetch releases', {
2238-
repoId: repository?.id ?? null,
2239-
repoPath: repository?.localPath ?? null,
2240-
remoteUrl: repository?.remoteUrl ?? null,
2241-
error: e instanceof Error ? { message: e.message, stack: e.stack } : e,
2238+
logger.error('Error while fetching releases', {
2239+
repoId: repository.id,
2240+
repoName: repository.name,
2241+
error: e,
22422242
});
22432243
setReleasesError(`Error: ${e.message}`);
22442244
} finally {
@@ -3272,59 +3272,113 @@ const RepoEditView: React.FC<RepoEditViewProps> = ({ onSave, onCancel, repositor
32723272
}, []);
32733273

32743274
const handleUpdateRelease = async (releaseId: number, options: Partial<ReleaseInfo>) => {
3275-
if (!repository) return;
3276-
const result = await window.electronAPI?.updateRelease({ repo: repository, releaseId, options });
3277-
if (result?.success) {
3278-
setToast({ message: 'Release updated.', type: 'success' });
3279-
fetchReleases();
3280-
} else {
3281-
setToast({ message: `Error: ${result?.error || 'API call failed.'}`, type: 'error' });
3275+
if (!repository) {
3276+
logger.warn('handleUpdateRelease called without repository context', { releaseId, options });
3277+
return;
3278+
}
3279+
3280+
const repoLogContext = { repoId: repository.id, repoName: repository.name, releaseId, options };
3281+
logger.info('Updating release', repoLogContext);
3282+
3283+
try {
3284+
const result = await window.electronAPI?.updateRelease({ repo: repository, releaseId, options });
3285+
3286+
if (result?.success) {
3287+
logger.info('Release update succeeded', repoLogContext);
3288+
setToast({ message: 'Release updated.', type: 'success' });
3289+
fetchReleases();
3290+
} else {
3291+
const errorMessage = result?.error || 'API call failed.';
3292+
logger.error('Release update failed', { ...repoLogContext, error: errorMessage });
3293+
setToast({ message: `Error: ${errorMessage}`, type: 'error' });
3294+
}
3295+
} catch (error) {
3296+
logger.error('Release update threw an exception', { ...repoLogContext, error });
3297+
setToast({ message: `Error: ${(error as Error).message}`, type: 'error' });
32823298
}
32833299
};
3284-
3300+
32853301
const handleDeleteRelease = async (releaseId: number) => {
3286-
if (!repository) return;
3302+
if (!repository) {
3303+
logger.warn('handleDeleteRelease called without repository context', { releaseId });
3304+
return;
3305+
}
3306+
3307+
logger.info('Preparing to delete release', { repoId: repository.id, repoName: repository.name, releaseId });
32873308
confirmAction({
32883309
title: 'Delete Release',
32893310
message: 'Are you sure you want to delete this release? This action cannot be undone.',
32903311
confirmText: 'Delete',
32913312
icon: <ExclamationTriangleIcon className="h-6 w-6 text-red-600" />,
32923313
onConfirm: async () => {
3293-
const result = await window.electronAPI?.deleteRelease({ repo: repository, releaseId });
3294-
if (result?.success) {
3295-
setToast({ message: 'Release deleted.', type: 'success' });
3296-
fetchReleases();
3297-
} else {
3298-
setToast({ message: `Error: ${result?.error || 'API call failed.'}`, type: 'error' });
3314+
try {
3315+
const result = await window.electronAPI?.deleteRelease({ repo: repository, releaseId });
3316+
if (result?.success) {
3317+
logger.info('Release deletion succeeded', { repoId: repository.id, repoName: repository.name, releaseId });
3318+
setToast({ message: 'Release deleted.', type: 'success' });
3319+
fetchReleases();
3320+
} else {
3321+
const errorMessage = result?.error || 'API call failed.';
3322+
logger.error('Release deletion failed', { repoId: repository.id, repoName: repository.name, releaseId, error: errorMessage });
3323+
setToast({ message: `Error: ${errorMessage}`, type: 'error' });
3324+
}
3325+
} catch (error) {
3326+
logger.error('Release deletion threw an exception', { repoId: repository.id, repoName: repository.name, releaseId, error });
3327+
setToast({ message: `Error: ${(error as Error).message}`, type: 'error' });
32993328
}
33003329
},
33013330
});
33023331
};
33033332

33043333
const handleSaveRelease = async () => {
3305-
if (!repository || !editingRelease) return;
3306-
3334+
if (!repository || !editingRelease) {
3335+
logger.warn('handleSaveRelease called without required context', {
3336+
hasRepository: Boolean(repository),
3337+
hasEditingRelease: Boolean(editingRelease),
3338+
});
3339+
return;
3340+
}
3341+
33073342
const options = {
33083343
tag_name: editingRelease.tagName!,
33093344
name: editingRelease.name!,
33103345
body: editingRelease.body || '',
33113346
draft: editingRelease.isDraft || false,
33123347
prerelease: editingRelease.isPrerelease || false,
33133348
};
3314-
3315-
let result;
3316-
if (editingRelease.isNew) {
3317-
result = await window.electronAPI?.createRelease({ repo: repository, options });
3318-
} else {
3319-
result = await window.electronAPI?.updateRelease({ repo: repository, releaseId: editingRelease.id!, options });
3320-
}
33213349

3322-
if (result?.success) {
3323-
setToast({ message: `Release ${editingRelease.isNew ? 'created' : 'saved'}.`, type: 'success' });
3324-
setEditingRelease(null);
3325-
fetchReleases();
3326-
} else {
3327-
setToast({ message: `Error: ${result?.error || 'API call failed.'}`, type: 'error' });
3350+
const logContext = {
3351+
repoId: repository.id,
3352+
repoName: repository.name,
3353+
releaseId: editingRelease.id ?? null,
3354+
tagName: editingRelease.tagName,
3355+
options,
3356+
isNew: Boolean(editingRelease.isNew),
3357+
};
3358+
3359+
logger.info('Saving release', logContext);
3360+
3361+
try {
3362+
let result;
3363+
if (editingRelease.isNew) {
3364+
result = await window.electronAPI?.createRelease({ repo: repository, options });
3365+
} else {
3366+
result = await window.electronAPI?.updateRelease({ repo: repository, releaseId: editingRelease.id!, options });
3367+
}
3368+
3369+
if (result?.success) {
3370+
logger.info('Release save succeeded', logContext);
3371+
setToast({ message: `Release ${editingRelease.isNew ? 'created' : 'saved'}.`, type: 'success' });
3372+
setEditingRelease(null);
3373+
fetchReleases();
3374+
} else {
3375+
const errorMessage = result?.error || 'API call failed.';
3376+
logger.error('Release save failed', { ...logContext, error: errorMessage });
3377+
setToast({ message: `Error: ${errorMessage}`, type: 'error' });
3378+
}
3379+
} catch (error) {
3380+
logger.error('Release save threw an exception', { ...logContext, error });
3381+
setToast({ message: `Error: ${(error as Error).message}`, type: 'error' });
33283382
}
33293383
};
33303384

0 commit comments

Comments
 (0)