![]() Semantically Versioned package named “Ladder.” At the time that Firetruck isĬreated, Ladder is at version 3.1.0. Consider a library called “Firetruck.” It requires a Not too flexible) dependency specifications can finally be made.Ī simple example will demonstrate how Semantic Versioning can make dependency Once these intentions are clear, flexible (but By giving a name and clearĭefinition to the above ideas, it becomes easy to communicate your intentions WithoutĬompliance to some sort of formal specification, version numbers areĮssentially useless for dependency management. The problem is that “close” isn’t good enough. In fact, you probably do somethingĬlose to this already. This allows pre-existing projects to assume compliance at anyĪrbitrary point and for automated tools to discover this fact. The first revision that introduces SemVer compliance SHOULD be tagged When tagging releases in a version control system, the tag for a version Using this system allowsĪutomated tools to inspect your package and determine SemVer compliance and ![]() (Git, Mercurial, SVN, etc) to store your code. This sub-specification SHOULD be used if you use a version control system Patch and minor version MUST be reset to 0 when major It MAY include minorĪnd patch level changes. Incompatible changes are introduced to the public API. Major version X (X.y.z | X > 0) MUST be incremented if any backwards MUST be reset to 0 when minor version is incremented. Incremented if substantial new functionality or improvements are introduced Minor version Y (x.Y.z | x > 0) MUST be incremented if new, backwardsĬompatible functionality is introduced to the public API. Instance: 1.0.0-alpha1 0) MUST be incremented if only backwardsĬompatible bug fixes are introduced. Precedence SHOULD be determined by lexicographic ASCII sort order. Satisfy but have a lower precedence than the associated normal version. The string MUST beĬomprised of only alphanumerics plus dash. String immediately following the patch version and a dash. For instance: 1.1.3 -> 2.0.0 and 2.1.7 ->Ī pre-release version number MAY be denoted by appending an arbitrary When a minor version number is incremented, the ![]() When a major version number is incremented, the minor version and patch Each element MUST increase numerically by increments of one. ![]() X is the major version, Y is the minor version, and Z is the patch However it is done, it should be precise and comprehensive.Ī normal version number MUST take the form X.Y.Z where X, Y, and Z are This APIĬould be declared in the code itself or exist strictly in documentation. Software using Semantic Versioning MUST declare a public API. “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, Semantic Versioning Specification (SemVer) I call this system “Semantic Versioning.” Under this scheme, version numbersĪnd the way they change convey meaning about the underlying code and what hasīeen modified from one version to the next. Bug fixes notĪffecting the API increment the patch version, backwards compatible APIĪdditions/changes increment the minor version, and backwards incompatible API Once you identify your publicĪPI, you communicate changes to it with specific increments to your version Important that this API be clear and precise. This mayĬonsist of documentation or be enforced by the code itself. Requirements that dictate how version numbers are assigned and incremented.įor this system to work, you first need to declare a public API. Prevent you from easily and safely moving your project forward.Īs a solution to this problem, I propose a simple set of rules and (assuming compatibility with more future versions than is reasonable).ĭependency hell is where you are when version lock and/or version promiscuity Specified too loosely, you will inevitably be bitten by version promiscuity Release new versions of every dependent package). If the dependency specifications are too tight, you are inĭanger of version lock (the inability to upgrade a package without having to In systems with many dependencies, releasing new package versions can quicklyīecome a nightmare. Integrate into your software, the more likely you are to find yourself, one “dependency hell.” The bigger your system grows and the more packages you In the world of software management there exists a dread place called
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |