@@ -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