{"id":23144,"date":"2020-11-23T16:42:51","date_gmt":"2020-11-24T00:42:51","guid":{"rendered":"https:\/\/www.spokeo.com\/compass\/?p=23144"},"modified":"2022-04-13T12:23:48","modified_gmt":"2022-04-13T20:23:48","slug":"semantic-versioning","status":"publish","type":"post","link":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/","title":{"rendered":"Semantic Versioning"},"content":{"rendered":"\n<p>Anyone who opens any software at all is familiar with versioning. It\u2019s a concept people understand &#8211; newer versions of software have higher numbers. Think about all those iOS updates required for your iPhone. It might seem like a simple thing to come up with &#8211; each update comes with an increased number with the highest number being the most current version . For software development teams, this is not as simple as it seems.<\/p>\n\n\n\n<p>Semantic Versioning Specification (SemVer) is a universal system for automating and tracking performance versioning of software. This framework for specifying changes uses a three-part number system in a major.minor.patch format. For example, version 4.7.6:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>(4) Major version: API changes, backwards incompatible with previous versions<\/li><li>(7) Minor version: New features, functionality enhancement<\/li><li>(6) Patch: Bug fix, maintenance release&nbsp;<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/nr_u4B_PM_RJxiq_0Y1e8v-8dFEztW8JkScMWYtwFAa0io4LBkwqUib0ErAf23AP4ffh5AdjjmfiGfT_axAw7DP7qOzaoYKnHZEthap8bv6epHjrzboV2i-Bj5SObl1FMeKiSys_\" alt=\"\" width=\"556\" height=\"319\"\/><\/figure>\n\n\n\n<p>Think about what a version number actually means. Most people would understand that when the same software, version 4.7.7, is released, it\u2019s not very different from version 4.7.6. However, version 5.0.0 is probably very different. For an agile development team releasing software frequently, it takes time and effort to get those versions right. Someone on the planning side has to make a decision about whether a change is big or small. Agile development organizations often try to embrace change more often, which requires constant evaluation to determine the version change when&nbsp; evaluating new software patches .&nbsp;<\/p>\n\n\n\n<p>This system keeps development and QA cycles organized by removing the burden of centrally tracking the current version in progress for the pertinent application. SemVer provides a nice and clean way of tracing releases to versioned strings and associating those with certain enhancements or fixes to the application code itself. When a team is evaluating whether a given version is appropriate for them to use, they can trust that the numbers \u201csummarize\u201d the nature of the changes between versions. Version 5.0.0 is indeed much different than 4.7.6, so upgrading should be done with proper planning.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The SemVer System<\/h2>\n\n\n\n<p>At Spokeo, the engineer writing the code decides&nbsp; what constitutes a major, minor, or breaking change. They implement a ticket and commit that code to Git using \u201cConventional Commits,\u201d which are a way of standardizing the notation of code changes. When the developer commits a change, it needs to be prefixed by the type of the change:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>BREAKING CHANGE:&nbsp; Anything not be backwards compatible with previous functionality<\/li><li>feat: Adding something new&nbsp;<\/li><li>fix: bug fix<\/li><\/ul>\n\n\n\n<p>Conventional commit says that when automating semantic versioning, we have to map these different prefixes to the right parts of the versions. For example if \u201cfix:\u201d is part of a commit message in the version control\u2019s pull request, then you should bump the Z in X.Y.Z.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tools for SemVer Automation&nbsp;<\/h2>\n\n\n\n<p>Although someone could check the commit history to decide what a new version number should be, that\u2019s hard to scale for the number of software projects and pretty boring! Spokeo automates this task away using Git, Jenkins, and Bumpversion. As developers are commiting code with Git, they include messages that can help decide version changes. Jenkins is configured to watch specific branches in all of our relevant repositories where we\u2019ve implemented semantic versioning. It\u2019s only watching specific branches because we only want to tag and update the X.Y.Z version strings that we planned on during a release. When Jenkins detects changes to the designated branch of the source repository, it kicks off scripts that make a version number update.&nbsp; Bumpversion actually keeps track of which number version is being deployed via its .bumpversion.cfg configuration file, which is in the same repository as the code and looks something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/vK-v4LX_phe6_fskXFcbxATrZRvvsApo7QFV9LEdY7-jHw424P4L9jLfbsNMB9A8S8rHcvyPMFeiHvU6wFsemMBh8NNNHFB96BfMJGuxHEM8t02stG9c2pu2Q19f-6yqG3P0yFyl\" alt=\"\" width=\"577\" height=\"412\"\/><\/figure>\n\n\n\n<p>The current version is specified by the \u201ccurrent_version\u201d key inside this file. The other scripts Jenkins is running can modify this and then run bumpversion. <strong>Commit<\/strong> key tells bumpversion to commit the changes to Git after running \u201cbumpversion\u201d executable. This process ensures&nbsp; that files and changes are staged, committed and ready to be pushed upstream. <strong>Tag <\/strong>tells bumpversion to create a (git) tag in order to reference it later as the build\/deploy associated with these code changes. If we looked back at the commit history after this runs, we would see that the bumperversion file changed. Now we know what version our freshly-baked release is.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/9lQe1_ZLzZUvxgP3_iTAOTDe7g85CB1YM_JOcnaTnVrtU8nSorIdeghXqUUDQSpgUFGCynzFXD0heVzC33HNx8PuEptz6l4Oh0yRcpqanksiU2ZdkzNZBGQwiXeMTSR1bYy1buO4\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion&nbsp;<\/h2>\n\n\n\n<p>To wrap things up, Spokeo is using semantic versioning in an automated fashion to facilitate tagging and naming of our applications. This process provides a nice and clean way of tracing releases to versioned strings and associating those with certain enhancements or fixes to software. Automating the versioning based on a developer&#8217;s commits means the developers are empowered to make the right choice for the version number, and no one has to slow down and crunch the math on what version should be released. The version number tells our developers&nbsp; what update they\u2019re getting at a quick glance. Since we already had all the tools used in automation working in tandem with our QA and production environments, we could easily integrate everything once we had the initial workflow finalized. If you have any questions about setting up or maintaining Semantic Versioning, drop them in the comments below!&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Anyone who opens any software at all is familiar with versioning. It\u2019s a concept people understand &#8211; newer versions of software have higher numbers. Think about all those iOS updates&hellip;<\/p>\n","protected":false},"author":88,"featured_media":23444,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[722],"tags":[592,803,804,805],"class_list":["post-23144","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-blog","tag-recruiting","tag-semantic-versioning","tag-software-engineering","tag-web-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Semantic Versioning - The Compass Blog | Digital Identity and People Search | Spokeo<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Semantic Versioning - The Compass Blog | Digital Identity and People Search | Spokeo\" \/>\n<meta property=\"og:description\" content=\"Anyone who opens any software at all is familiar with versioning. It\u2019s a concept people understand &#8211; newer versions of software have higher numbers. Think about all those iOS updates&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/\" \/>\n<meta property=\"og:site_name\" content=\"The Compass Blog | Digital Identity and People Search | Spokeo\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Spokeo\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-11-24T00:42:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-13T20:23:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"621\" \/>\n\t<meta property=\"og:image:height\" content=\"414\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Olivia Tighe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Spokeo\" \/>\n<meta name=\"twitter:site\" content=\"@Spokeo\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Olivia Tighe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/\",\"url\":\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/\",\"name\":\"Semantic Versioning - The Compass Blog | Digital Identity and People Search | Spokeo\",\"isPartOf\":{\"@id\":\"https:\/\/www.spokeo.com\/compass\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1\",\"datePublished\":\"2020-11-24T00:42:51+00:00\",\"dateModified\":\"2022-04-13T20:23:48+00:00\",\"author\":{\"@id\":\"https:\/\/www.spokeo.com\/compass\/#\/schema\/person\/79de1b18e01fb71637ea971e65b66b34\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1\",\"width\":621,\"height\":414},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.spokeo.com\/compass\/#website\",\"url\":\"https:\/\/www.spokeo.com\/compass\/\",\"name\":\"The Compass Blog | Digital Identity and People Search | Spokeo\",\"description\":\"The official Spokeo blog covers topics such as digital identity, consumer protection and privacy, how to avoid scams and catfishing, and more.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.spokeo.com\/compass\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.spokeo.com\/compass\/#\/schema\/person\/79de1b18e01fb71637ea971e65b66b34\",\"name\":\"Olivia Tighe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.spokeo.com\/compass\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5147448fc308e61aecaa6782b45b69738d5ed842652b02bffc24ca6e0a7a1911?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5147448fc308e61aecaa6782b45b69738d5ed842652b02bffc24ca6e0a7a1911?s=96&r=g\",\"caption\":\"Olivia Tighe\"},\"url\":\"https:\/\/www.spokeo.com\/compass\/author\/olivia\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Semantic Versioning - The Compass Blog | Digital Identity and People Search | Spokeo","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/","og_locale":"en_US","og_type":"article","og_title":"Semantic Versioning - The Compass Blog | Digital Identity and People Search | Spokeo","og_description":"Anyone who opens any software at all is familiar with versioning. It\u2019s a concept people understand &#8211; newer versions of software have higher numbers. Think about all those iOS updates&hellip;","og_url":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/","og_site_name":"The Compass Blog | Digital Identity and People Search | Spokeo","article_publisher":"https:\/\/www.facebook.com\/Spokeo\/","article_published_time":"2020-11-24T00:42:51+00:00","article_modified_time":"2022-04-13T20:23:48+00:00","og_image":[{"width":621,"height":414,"url":"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1","type":"image\/jpeg"}],"author":"Olivia Tighe","twitter_card":"summary_large_image","twitter_creator":"@Spokeo","twitter_site":"@Spokeo","twitter_misc":{"Written by":"Olivia Tighe","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/","url":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/","name":"Semantic Versioning - The Compass Blog | Digital Identity and People Search | Spokeo","isPartOf":{"@id":"https:\/\/www.spokeo.com\/compass\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/#primaryimage"},"image":{"@id":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1","datePublished":"2020-11-24T00:42:51+00:00","dateModified":"2022-04-13T20:23:48+00:00","author":{"@id":"https:\/\/www.spokeo.com\/compass\/#\/schema\/person\/79de1b18e01fb71637ea971e65b66b34"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.spokeo.com\/compass\/semantic-versioning\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.spokeo.com\/compass\/semantic-versioning\/#primaryimage","url":"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1","width":621,"height":414},{"@type":"WebSite","@id":"https:\/\/www.spokeo.com\/compass\/#website","url":"https:\/\/www.spokeo.com\/compass\/","name":"The Compass Blog | Digital Identity and People Search | Spokeo","description":"The official Spokeo blog covers topics such as digital identity, consumer protection and privacy, how to avoid scams and catfishing, and more.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.spokeo.com\/compass\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.spokeo.com\/compass\/#\/schema\/person\/79de1b18e01fb71637ea971e65b66b34","name":"Olivia Tighe","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.spokeo.com\/compass\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5147448fc308e61aecaa6782b45b69738d5ed842652b02bffc24ca6e0a7a1911?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5147448fc308e61aecaa6782b45b69738d5ed842652b02bffc24ca6e0a7a1911?s=96&r=g","caption":"Olivia Tighe"},"url":"https:\/\/www.spokeo.com\/compass\/author\/olivia\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.spokeo.com\/compass\/image\/Tech-Blog-Header-1-scaled.jpg?fit=621%2C414&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p8V62u-61i","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/posts\/23144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/users\/88"}],"replies":[{"embeddable":true,"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/comments?post=23144"}],"version-history":[{"count":1,"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/posts\/23144\/revisions"}],"predecessor-version":[{"id":23309,"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/posts\/23144\/revisions\/23309"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/media\/23444"}],"wp:attachment":[{"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/media?parent=23144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/categories?post=23144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.spokeo.com\/compass\/wp-json\/wp\/v2\/tags?post=23144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}