@@ -555,19 +555,39 @@ export class Buddy {
555
555
private getUpdateType ( current : string , latest : string ) : 'major' | 'minor' | 'patch' {
556
556
try {
557
557
// Clean version strings, including v, @ prefix for version ranges
558
- const cleanCurrent = current . replace ( / ^ [ v ^ ~ > = < @ ] + / , '' )
559
- const cleanLatest = latest . replace ( / ^ [ v ^ ~ > = < @ ] + / , '' )
558
+ let cleanCurrent = current . replace ( / ^ [ v ^ ~ > = < @ ] + / , '' )
559
+ let cleanLatest = latest . replace ( / ^ [ v ^ ~ > = < @ ] + / , '' )
560
+
561
+ // For GitHub Actions, normalize incomplete versions like "4" to "4.0.0"
562
+ // This is important for proper semver comparison
563
+ const normalizeVersion = ( version : string ) : string => {
564
+ const parts = version . split ( '.' )
565
+ while ( parts . length < 3 ) {
566
+ parts . push ( '0' )
567
+ }
568
+ return parts . join ( '.' )
569
+ }
570
+
571
+ cleanCurrent = normalizeVersion ( cleanCurrent )
572
+ cleanLatest = normalizeVersion ( cleanLatest )
560
573
561
574
if ( Bun . semver . order ( cleanLatest , cleanCurrent ) <= 0 )
562
575
return 'patch'
563
576
564
- if ( Bun . semver . satisfies ( cleanLatest , `~${ cleanCurrent } ` ) )
565
- return 'patch'
577
+ // Use manual comparison for more accurate update type determination
578
+ const currentParts = cleanCurrent . split ( '.' ) . map ( Number )
579
+ const latestParts = cleanLatest . split ( '.' ) . map ( Number )
566
580
567
- if ( Bun . semver . satisfies ( cleanLatest , `^${ cleanCurrent } ` ) )
581
+ // Major version change
582
+ if ( latestParts [ 0 ] > currentParts [ 0 ] )
583
+ return 'major'
584
+
585
+ // Minor version change
586
+ if ( latestParts [ 0 ] === currentParts [ 0 ] && latestParts [ 1 ] > currentParts [ 1 ] )
568
587
return 'minor'
569
588
570
- return 'major'
589
+ // Patch version change
590
+ return 'patch'
571
591
}
572
592
catch {
573
593
return 'patch'
0 commit comments