Jump to content

Semantic version library


Mat
 Share

Recommended Posts

Semantic versioning (SemVer) is a style of version numbers that defines more precisely the version numbering format.
 
The official specification can be found at semver.org.
 
In summary, version numbers consist of Major version, minor version and patch (in the normal 1.2.3 form). Major version changes indicate what AutoIt would call "script breaking" changes. Minor versions add functionality, and patches fix bugs. In addition, semantic versioning allows for pre-release tagging, so rather than a beta cycle that goes 1.3.1, 1.3.2, 1.3.3 etc, before a release of 1.4.0 you'd have 1.4.0-beta1, 1.4.0-beta2 etc. Builds can also contain metadata, so a full version string could be "1.4.0-beta2+compatibilitybuild" or something along those lines.
 
The cool bit is conditions. This means you can write the normal dependency strings and compare versions against them. For example ">1.2.1 <=1.2.3" matches any of 1.2.1, 1.2.2, 1.2.3 and any pre-releases of 1.2.2 or 1.2.3 (but not pre-releases of 1.2.1). You can also match like "=1.2.*" or match according to versions that are compatible, or reasonably close.
 
The api is very similar to how it is used in other languages. Npm has its library here, which has a good description of the types of comparisons. The examples on that page are the basis for most of the unit tests.
 
SemVer.au3
Fork me on Github
 
Thanks to Manadar for some of the unit tests, and Assert() function taken from his assert.au3.
 
As a final note, AutoIt does not use semantic versioning, and a version number with 4 parts will not match as being valid under this system.

Semver in other languages: .NETNode.jsRuby, PHP, Go, Java, Python, you get the idea. Basically search github and you'll find a compatible library in any language.

comparison based on pre-release tags isn't implemented yet, though is defined by the standard.

Edited by Mat
Link to comment
Share on other sites

  • 1 year later...

Cheers @Mat

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...