@@ -894,19 +894,54 @@ <h3 id="homebrew">Homebrew<a class="headerlink" href="#homebrew" title="Permanen
894894brew upgrade mockery
895895</ code > </ pre > </ div >
896896< script type ="text/javascript ">
897+ const start = performance . now ( ) ;
897898
898899function insert_installation_command ( element_to_override , version ) {
899900 element_to_override . innerHTML = `
900- <div class="highlight"><span class="filename">Text Only</span>< pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>go install github.com/vektra/mockery/v3@${ version }
901+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>go install github.com/vektra/mockery/v3@${ version }
901902</code></pre></div>
902903` ;
903904}
904905
906+ function compareSemver ( v1 , v2 ) {
907+ const parseVersion = ( version ) => {
908+ const [ main , preRelease ] = version . replace ( / ^ v / , "" ) . split ( "-" ) ;
909+ const mainParts = main . split ( '.' ) . map ( Number ) ;
910+ const preParts = preRelease ? preRelease . split ( '.' ) . map ( ( part ) => isNaN ( part ) ? part : Number ( part ) ) : [ ] ;
911+ return { mainParts, preParts } ;
912+ } ;
913+
914+ const compareParts = ( a , b ) => {
915+ for ( let i = 0 ; i < Math . max ( a . length , b . length ) ; i ++ ) {
916+ const partA = a [ i ] || 0 ;
917+ const partB = b [ i ] || 0 ;
918+ if ( partA > partB ) return 1 ;
919+ if ( partA < partB ) return - 1 ;
920+ }
921+ return 0 ;
922+ } ;
923+
924+ const { mainParts : main1 , preParts : pre1 } = parseVersion ( v1 ) ;
925+ const { mainParts : main2 , preParts : pre2 } = parseVersion ( v2 ) ;
926+
927+ const mainComparison = compareParts ( main1 , main2 ) ;
928+ if ( mainComparison !== 0 ) return mainComparison ;
929+
930+ // Compare pre-release parts
931+ if ( pre1 . length === 0 && pre2 . length > 0 ) return 1 ; // No pre-release > pre-release
932+ if ( pre1 . length > 0 && pre2 . length === 0 ) return - 1 ; // Pre-release < no pre-release
933+ return compareParts ( pre1 , pre2 ) ;
934+ }
935+
936+
937+
905938const version_key = "/mockery/version" ;
906939const element = document . getElementById ( 'mockery-install-go-command' ) ;
907- const url = `https://api.github.com/repos/vektra/mockery/releases/tags/v3 ` ;
940+ const url = `https://api.github.com/repos/vektra/mockery/releases` ;
908941
909942let version = sessionStorage . getItem ( version_key ) ;
943+
944+
910945if ( version !== null ) {
911946 insert_installation_command ( element , version ) ;
912947} else {
@@ -917,15 +952,28 @@ <h3 id="homebrew">Homebrew<a class="headerlink" href="#homebrew" title="Permanen
917952 fetch ( request )
918953 . then ( ( response ) => response . json ( ) )
919954 . then ( ( data ) => {
920- sessionStorage . setItem ( version_key , data . name ) ;
921- insert_installation_command ( element , data . name ) ;
955+ let latest_version = "" ;
956+ data . forEach ( ( release ) => {
957+ let release_tag = release . tag_name ;
958+ if ( ! release_tag . startsWith ( "v3" ) ) {
959+ return
960+ } ;
961+ if ( latest_version === "" || compareSemver ( release_tag , latest_version ) === 1 ) {
962+ latest_version = release_tag ;
963+ } ;
964+ } ) ;
965+ sessionStorage . setItem ( version_key , latest_version ) ;
966+ insert_installation_command ( element , latest_version ) ;
922967 } )
923968 . catch ( ( error ) => {
924969 console . error ( error ) ;
925970 element . innerHTML = `failed to fetch latest release info from: https://api.github.com/repos/vektra/mockery/releases/tags/v3` ;
926971 }
927972 ) ;
928973}
974+
975+ const end = performance . now ( ) ;
976+ console . log ( `Execution time for finding latest mockery tag: ${ end - start } milliseconds` ) ;
929977</ script >
930978
931979
0 commit comments