Jump to content
Sign in to follow this  
Mat

Semantic version library

Recommended Posts

Mat

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
  • Like 1

Share this post


Link to post
Share on other sites
jvanegmond

Nice to see you making this publicly available. Why not put it on your Github though so I can fork it and make pull requests?

Share this post


Link to post
Share on other sites
Mat

au3-semver on github. I'll update links in the first post to point there instead so it stays up to date.

I was planning on doing a bit more with it, some more testing and making it less strict in the strings it accepts. I haven't had the time though so thought I'd just release it instead. 

Share this post


Link to post
Share on other sites
stealthmsgr

Thanks for posting this. I am presenting this in consideration of a versioning issue that is in review.

Share this post


Link to post
Share on other sites
guinness

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

Share this post


Link to post
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
Sign in to follow this  

×