SlideShare a Scribd company logo
1 of 46
Semantic Versioning,
the whole story
Jake Ginnivan
jake.ginnivan.net
@jakeginnivan
Agenda
Semantic Versioning
Git Branching
Strategies
Continuous Delivery
The whole story!
GitVersion
github.com/Particular/GitVersion
What is Semantic Versioning?
1.2.3-beta.4+567
Why SemVer?
Dependency Hell
Version
Lock
Version
promiscuity
NuGet gotchas
2.0.0-beta.1
NuGet gotchas
2.0.0-beta2 2.0.0-beta11>
NuGet gotchas
2.0.0-beta0002
SemVer extensions
1.2.3-beta.4
Side effects?
Feature A
Bug A
Feature B
Feature C
Feature D
Will this break existing consumers?
Will customers pay for this feature?
Side effects?
Feature A
Bug A
Feature B
Feature C
Feature D
Does this require a patch release?
Git branching strategies
GitFlow and GitHubFlow
GitHubFlow
Or the simple pull request model made popular by GitHub
Atlassian call it the ‘forking workflow’
GitHubFlow
Particular/GitVersion
GitVersion (Local)
JakeGinnivan/GitVersion
Fork!
Clone
push
ConsoleImprovements
Pull Request
GitHubFlow – Build Versioning
GitHubFlow Major/Minor changes
NextVersion.txt
Branch name
conventions
GitFlow
A successful Git branching model
To WebSequenceDiagrams!
Because they are awesome
1.0.1-beta.1
1.0.1-beta.2
1.0.1-beta.1
1.0.1
1.0.1-beta.1
1.0.1
1.1.0.0-unstable
1.1.0.0-PullRequest.1
1.1.0.2-PullRequest.1
1.1.0.3-unstable
Bug fixes
only
2.0.0-beta.1
2.0.0-beta.12.0.0-beta.1
2.0.0-beta.2 2.0.0.5-unstable
2.0.0
It works for GitHubFlow too!
• Supporting old releases is built into
the workflow
• Very structured which needs to be
followed
• Releases require rebuild
• Encourages Waterfall
• Simple
• Mainline development
• Supporting old releases is
difficult
Which branching strategy?
GitHubFlow GitFlow
Continuous Delivery
Not the whole story, but the parts that matter to versioning/releases
Release Pipeline
CI Build
Acceptance
Tests
Deploy
Release Pipeline
CI Build
Acceptance
Tests
Deploy
Semantic Versioning
Git Branching
Strategies
Continuous Delivery
Questions?

More Related Content

What's hot

GitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLabGitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLabShinu Suresh
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners HubSpot
 
Git workflows
Git workflowsGit workflows
Git workflowsXpand IT
 
CI/CD Overview
CI/CD OverviewCI/CD Overview
CI/CD OverviewAn Nguyen
 
CI and CD with Jenkins
CI and CD with JenkinsCI and CD with Jenkins
CI and CD with JenkinsMartin Málek
 
Semantic Versioning - How to not break the Internet
Semantic Versioning - How to not break the InternetSemantic Versioning - How to not break the Internet
Semantic Versioning - How to not break the Internetkathrinholzmann
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaEdureka!
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginnersBugRaptors
 
Understanding Branching and Merging in Git
Understanding Branching and Merging in GitUnderstanding Branching and Merging in Git
Understanding Branching and Merging in Gitgittower
 
A successful Git branching model
A successful Git branching model A successful Git branching model
A successful Git branching model abodeltae
 
Git branching strategies
Git branching strategiesGit branching strategies
Git branching strategiesjstack
 
Bamboo - an introduction
Bamboo - an introductionBamboo - an introduction
Bamboo - an introductionSven Peters
 

What's hot (20)

GitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLabGitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLab
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners
 
Git workflows
Git workflowsGit workflows
Git workflows
 
BDD with Cucumber
BDD with CucumberBDD with Cucumber
BDD with Cucumber
 
CI/CD Overview
CI/CD OverviewCI/CD Overview
CI/CD Overview
 
CI and CD with Jenkins
CI and CD with JenkinsCI and CD with Jenkins
CI and CD with Jenkins
 
Introduction git
Introduction gitIntroduction git
Introduction git
 
Semantic Versioning - How to not break the Internet
Semantic Versioning - How to not break the InternetSemantic Versioning - How to not break the Internet
Semantic Versioning - How to not break the Internet
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginners
 
Understanding Branching and Merging in Git
Understanding Branching and Merging in GitUnderstanding Branching and Merging in Git
Understanding Branching and Merging in Git
 
A successful Git branching model
A successful Git branching model A successful Git branching model
A successful Git branching model
 
Git branching strategies
Git branching strategiesGit branching strategies
Git branching strategies
 
Git & Github for beginners
Git & Github for beginnersGit & Github for beginners
Git & Github for beginners
 
GitLab.pptx
GitLab.pptxGitLab.pptx
GitLab.pptx
 
Jenkins
JenkinsJenkins
Jenkins
 
Bamboo - an introduction
Bamboo - an introductionBamboo - an introduction
Bamboo - an introduction
 
Git Branching Model
Git Branching ModelGit Branching Model
Git Branching Model
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
Jenkins CI presentation
Jenkins CI presentationJenkins CI presentation
Jenkins CI presentation
 

Viewers also liked

Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Rogerio Prado de Jesus
 
Semantic Versioning Lightning Talk
Semantic Versioning Lightning TalkSemantic Versioning Lightning Talk
Semantic Versioning Lightning TalkAaron Blythe
 
DevOps Summit 2016 - Release Management em Ambientes Híbridos
DevOps Summit 2016 - Release Management em Ambientes HíbridosDevOps Summit 2016 - Release Management em Ambientes Híbridos
DevOps Summit 2016 - Release Management em Ambientes HíbridosIgor Rosa Macedo
 
Semantic Versioning with GitVersion
Semantic Versioning with GitVersionSemantic Versioning with GitVersion
Semantic Versioning with GitVersionGary Park
 
Gitflow - Una metología para manejo de Branches
Gitflow - Una metología para manejo de BranchesGitflow - Una metología para manejo de Branches
Gitflow - Una metología para manejo de BranchesJavier Alvarez
 
Git Magic: Versioning Files like a Boss
Git Magic: Versioning Files like a BossGit Magic: Versioning Files like a Boss
Git Magic: Versioning Files like a Bosstmacwilliam
 
Community live #1 - Gitflow Workflow
Community live #1 - Gitflow WorkflowCommunity live #1 - Gitflow Workflow
Community live #1 - Gitflow WorkflowLiora Milbaum
 
OSGi Community Event 2010 - Automated Semantic Versioning for OSGi Bundles
OSGi Community Event 2010 - Automated Semantic Versioning for OSGi BundlesOSGi Community Event 2010 - Automated Semantic Versioning for OSGi Bundles
OSGi Community Event 2010 - Automated Semantic Versioning for OSGi Bundlesmfrancis
 
Puppet at GitHub - PuppetConf 2013
Puppet at GitHub - PuppetConf 2013Puppet at GitHub - PuppetConf 2013
Puppet at GitHub - PuppetConf 2013Puppet
 
Git like a Pro (How to use it as it was meant to)
Git like a Pro (How to use it as it was meant to)Git like a Pro (How to use it as it was meant to)
Git like a Pro (How to use it as it was meant to)Dennis Doomen
 
Git-flow workflow and pull-requests
Git-flow workflow and pull-requestsGit-flow workflow and pull-requests
Git-flow workflow and pull-requestsBartosz Kosarzycki
 
Change Management and Versioning in Ontologies
Change Management and Versioning in OntologiesChange Management and Versioning in Ontologies
Change Management and Versioning in OntologiesBaden Hughes
 

Viewers also liked (14)

Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic Versioning
 
Semantic Versioning Lightning Talk
Semantic Versioning Lightning TalkSemantic Versioning Lightning Talk
Semantic Versioning Lightning Talk
 
DevOps Summit 2016 - Release Management em Ambientes Híbridos
DevOps Summit 2016 - Release Management em Ambientes HíbridosDevOps Summit 2016 - Release Management em Ambientes Híbridos
DevOps Summit 2016 - Release Management em Ambientes Híbridos
 
Semantic Versioning with GitVersion
Semantic Versioning with GitVersionSemantic Versioning with GitVersion
Semantic Versioning with GitVersion
 
Gitflow - Una metología para manejo de Branches
Gitflow - Una metología para manejo de BranchesGitflow - Una metología para manejo de Branches
Gitflow - Una metología para manejo de Branches
 
Git Magic: Versioning Files like a Boss
Git Magic: Versioning Files like a BossGit Magic: Versioning Files like a Boss
Git Magic: Versioning Files like a Boss
 
Community live #1 - Gitflow Workflow
Community live #1 - Gitflow WorkflowCommunity live #1 - Gitflow Workflow
Community live #1 - Gitflow Workflow
 
OSGi Community Event 2010 - Automated Semantic Versioning for OSGi Bundles
OSGi Community Event 2010 - Automated Semantic Versioning for OSGi BundlesOSGi Community Event 2010 - Automated Semantic Versioning for OSGi Bundles
OSGi Community Event 2010 - Automated Semantic Versioning for OSGi Bundles
 
Puppet at GitHub - PuppetConf 2013
Puppet at GitHub - PuppetConf 2013Puppet at GitHub - PuppetConf 2013
Puppet at GitHub - PuppetConf 2013
 
Git like a Pro (How to use it as it was meant to)
Git like a Pro (How to use it as it was meant to)Git like a Pro (How to use it as it was meant to)
Git like a Pro (How to use it as it was meant to)
 
Pubmi gitflow
Pubmi gitflowPubmi gitflow
Pubmi gitflow
 
Git-flow workflow and pull-requests
Git-flow workflow and pull-requestsGit-flow workflow and pull-requests
Git-flow workflow and pull-requests
 
Change Management and Versioning in Ontologies
Change Management and Versioning in OntologiesChange Management and Versioning in Ontologies
Change Management and Versioning in Ontologies
 

Similar to SemVer, the whole story

KubeCon EU 2022 Istio, Flux & Flagger.pdf
KubeCon EU 2022 Istio, Flux & Flagger.pdfKubeCon EU 2022 Istio, Flux & Flagger.pdf
KubeCon EU 2022 Istio, Flux & Flagger.pdfWeaveworks
 
Version control git day02
Version control   git day02Version control   git day02
Version control git day02Gourav Varma
 
Git essential training & sharing self
Git essential training & sharing selfGit essential training & sharing self
Git essential training & sharing selfChen-Tien Tsai
 
Managing releases effectively through git
Managing releases effectively through gitManaging releases effectively through git
Managing releases effectively through gitMohd Farid
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagramsDilum Navanjana
 
Improving your workflow with git
Improving your workflow with gitImproving your workflow with git
Improving your workflow with gitDídac Ríos
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHubNicolás Tourné
 
Intro to Version Control with Git and Github
Intro to Version Control with Git and GithubIntro to Version Control with Git and Github
Intro to Version Control with Git and GithubJoe Fleming
 
What's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondWhat's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondLuca Milanesio
 
2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_final2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_finalMythri P K
 
Be a Happier Developer with Git / Productive Team #gettinggitright
Be a Happier Developer with Git / Productive Team #gettinggitright Be a Happier Developer with Git / Productive Team #gettinggitright
Be a Happier Developer with Git / Productive Team #gettinggitright Shunsuke (Sean) Osawa
 
Introduction to Git.pptx
Introduction to Git.pptxIntroduction to Git.pptx
Introduction to Git.pptxgdscuds
 
Git from the trenches
Git from the trenchesGit from the trenches
Git from the trenchesNuno Caneco
 

Similar to SemVer, the whole story (20)

KubeCon EU 2022 Istio, Flux & Flagger.pdf
KubeCon EU 2022 Istio, Flux & Flagger.pdfKubeCon EU 2022 Istio, Flux & Flagger.pdf
KubeCon EU 2022 Istio, Flux & Flagger.pdf
 
Version control git day02
Version control   git day02Version control   git day02
Version control git day02
 
Git essential training & sharing self
Git essential training & sharing selfGit essential training & sharing self
Git essential training & sharing self
 
Git introduction
Git introductionGit introduction
Git introduction
 
Managing releases effectively through git
Managing releases effectively through gitManaging releases effectively through git
Managing releases effectively through git
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagrams
 
Improving your workflow with git
Improving your workflow with gitImproving your workflow with git
Improving your workflow with git
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHub
 
Intro to Version Control with Git and Github
Intro to Version Control with Git and GithubIntro to Version Control with Git and Github
Intro to Version Control with Git and Github
 
What's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondWhat's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyond
 
Git Workshop
Git WorkshopGit Workshop
Git Workshop
 
From CVS to GIT
From CVS to GITFrom CVS to GIT
From CVS to GIT
 
git-docker.pdf
git-docker.pdfgit-docker.pdf
git-docker.pdf
 
2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_final2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_final
 
Github
GithubGithub
Github
 
Be a Happier Developer with Git / Productive Team #gettinggitright
Be a Happier Developer with Git / Productive Team #gettinggitright Be a Happier Developer with Git / Productive Team #gettinggitright
Be a Happier Developer with Git / Productive Team #gettinggitright
 
Introduction to Git.pptx
Introduction to Git.pptxIntroduction to Git.pptx
Introduction to Git.pptx
 
Git from the trenches
Git from the trenchesGit from the trenches
Git from the trenches
 
Git
GitGit
Git
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 

Recently uploaded

Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 

Recently uploaded (20)

Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 

SemVer, the whole story

Editor's Notes

  1. About 8 months ago I was releasing new versions of a few open source projects I help maintain, like TestStack.White, shouldly and Markpad. I was finding each project had a different way of versioning and creating the release notes, so I started playing around with different ideas for TeamCity configurations, build scripts, using version.txt files to try and simplify versioning and allow me to just release a new version with a click of a button in TeamCity. Around that time I had a few gists and blog posts discussing different ways I could think of solving the problem, but was not really happy with any of them. Then Simon Cropp (who is responsible for Fody) pinged me with an idea that Particular who are known best for nServiceBus had been working on. They would use a git branching strategy called GitFlow to infer and manage their semantic version for all their projects. This was pretty cool, I started playing with it, but found that GitFlow was too heavy for simple open source projects which use pull requests targeting master. I simply did not want to increase the barrier to entry on these project. I talked to Simon and Andreas (another guy at Particular) about contributing support for GitHubFlow to their little tool. After discussing it for a while we found the initial requirements and the way we were going to use it differed. So we decided to split, having a separate project for each branching strategy allowing each project to come up with it’s own ideas and ways of doing things with the intention of bringing them back together later. At the time I was thinking, this will be really simple, just a simple console app and I will have the problem solved in a few weekends. Why are things never that simple.. After about 5 months or so both projects had matured, we had learnt a HEAP about semantic versioning and how we could use branching to control that version and we started to merge the projects. 8 months after this all kicked off we are about to finally release version 1 of GitVersion. This talk is not about the tool, but what I personally have learnt over the last 8 months building this projects.
  2. Before getting started, I mentioned GitVersion just before. Much of this tool is about the conventions we have built into GitVersion, but all of this can be applied separately
  3. Each part has a specific meaning, first explain the concept of the public API Major – Breaking/incompatible API change Minor – Add functionality in a backwards compatible manner Patch – Fixes bugs in a backwards compatible manner Pre-release Tag – a ‘.’ Separated tag denoting a pre-release version which may not satisfy the intended compatibility requirements a stable version would Build metadata – Stuff which does not affect the actual semantic version, but can give additional information to the consumers of that package
  4. Example: Web app + Facebook library + twitter library both rely on Json.net Version lock – when dependency specification is too tight, two libraries rely on a single dependency. If we rely on exact versions then we can get into a situation where no dependency can be updated Version promiscuity – when the dependency specification is too loose and libraries start assuming they can run against any version of a dependent library, so upgrading any dependency can introduce compatibility issues between your dependent librarys Note: strong naming in .net causes version lock, and we need binding redirects to break the version lock.
  5. When you have multiple releases in flight at once it becomes hard to tell what the version for each branch should be. Some people have nightly or CI builds, each CI build creates *the same* semantic version. This breaks the CI/Nightly build systems because there will be multiple packages of the same version. How do we deal with that?
  6. Customer facing extensions Major – New features, if this is a paid product then major version bumps often involve users paying a fee Minor – Feature enhancements Patch – Bug fixes Beta still has the same meaning, it is a pre-release of the version before the -
  7. Lets say we have a bunch of features on our backlog, after adopting SemVer you start thinking about the impact of that feature BEFORE working on it. For libraries: - Is this feature going to break our public API, most of the time you know this up-front. - If you are going to introduce a breaking change, does that change your priorities? - Maybe we want to switch to stories which will introduce breaking API changes so they are all in a single breaking release rather than multiple breaking releases over time - Can we think of a way to introduce this feature without breaking something - Is the bug we are fixing a security flaw, or serious enough to patch previous versions? (depends if you are supporting old versions) For products - Is this a feature our customers would pay for? - If it is, maybe we want to start on the path of a new release - For patch releases, do we need to fix in previous releases and do multiple patch releases?
  8. If you are maintaining multiple versions, a patch release has implications. If it exists in previous versions then you have a duty to fix it This has impacts on the development time and other things, so if it is not critical it can be fixed as part of the next minor release This leads right into how do we manage these decisions in source control ->
  9. Who uses git here? Who knows what ‘GitHubFlow is’? What about using pull requests? Anyone here understand GitFlow? And out of those, how many are using GitFlow?
  10. As a contributor, I do not have write access to the main repo So I create my own fork which I can write to. Pull Requests are simple a request to get your code pulled into the main repository which you do not have access to (in the open source model).
  11. That is pretty much it for GitHubFlow, there is another step to get your local repository up to date with upstream once your pull request is merged but that is getting a bit out of scope We now know how to use GitHub (Stash, BitBucket work the same)
  12. There are currently two ways to bump the version number. The first is by using a NextVersion.txt file in your repository root. This allows you to bump the major/minor easily. Once the conventions built into GitVersion pass the version in the NextVersion.txt file, it will be ignored Branch name conventions work just like GitFlow, when you want to work on a feature or breaking change off the mainline just work in a branch which is suffixed with -2.0.0 or whatever version you want. When that branch is merged the version in the branch name will take over when building the target branch Other ideas: Special commit messages, like prefix ‘Breaking:’ to the commit to have the major version bumped. If you like this idea, jump online and +1 the issue.
  13. If you are following GitFlow, you only commit bug fixes to release branches
  14. Then we merge the bug fixes across to develop as they are made What is the issue when SemVer is mixed into this?
  15. When using GitFlow with semantic versioning this doesn’t work so well for major version bumps because we are trying to keep the breaking changes separated until they are ready to be released. When a commit is made on develop, that is a non-breaking change by it’s nature (only minor changes are made on develop) 
  16. So it can be safely merged into the major release branch. We have taken a branching method which fits a more waterfall style company/process and are using it as a too for devs to manage their versions.
  17. We learnt this.. Now that you know the workflows it is not that bad. On top of this, we learnt how you would use GitFlow when using Semantic Versioning.
  18. Now that you know each branching strategy, when would you choose each? Another thing to note is ALWAYS start with GitHubFlow, when you need more only then think about switching. Using GitVersion.exe Now we have covered branching strategies, what they are and when you should use each. This means we are ready to move onto continuous delivery.
  19. What does continuous delivery have to do with Semantic Versioning anyways? A lot, most versioning strategies require a commit or some manual work AFTER a release to start building the correct version. Lets look at a few other solutions
  20. An important part of continuous delivery is the release pipeline, or the idea that you build packages which are ready to deploy to production. To get to production they have to go through a number of steps, they could be manual testing, automated testing, sign off or anything else. The important part of this is that the first step of the chain creates the artifacts. And they are not re-built for different environments, the same binaries which got built and deployed into a testing environment can just be deployed into production.
  21. This is the hard step with semantic versioning. Being able to: - Not have to touch your build server configuration or create a commit as part of your workflow. It is exceptional circumstances which make you step in - For example, both GitHubFlow and GitFlow support both increment the Minor after a tag - No nice migration path between a simple and more complex branching strategy - Making pre-release packages easy to create, not a special or manual process - Guidance, every project has to solve these issues. I have seen HEAPS of different approaches and I have invented quite a few. This is a reusable approach which is really easy to setup and start using - Make the problem about the SEMANTICS of the release, NOT the version number. The version number is an artifact of what type of release it is.
  22. Example simple build chain
  23. Another, showing off the artifacts from the first step being used in the second step
  24. In conclusion semantic versioning is great. It solves dependency hell, allows you to communicate either breaking changes or new features to consumers of your library or software and encourages people to think before breaking their consumers. We have learnt the GitHubFlow and GitFlow branching strategies and how they relate to semantic versioning. And finally we have seen how you can use your branching strategy to assist you in achieving continuous delivery. There is no reason for you not to start using SemVer today, change the way you think about what different features will do to your system and how you will implement them and with GitVersion to help remove the hard manual work out is a no brainer.