Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to GitVersion

Introduction to GitVersion

Introduction to GitVersion (https://github.com/GitTools/GitVersion)

Awesome Incremented

September 21, 2015
Tweet

More Decks by Awesome Incremented

Other Decks in Programming

Transcript

  1. GitVersion Agenda •What is GitVersion? Why to use? •Why Semantic

    Versioning? •GitVersion: How It Works •Using GitVersion
  2. GitVersion What is GitVersion? •Automates Semantic Versioning • Looks at

    git history • Works out SemVer of commit being built •Currently supports • GitFlow & GitHubFlow • Build Server Integration
  3. GitVersion Why GitVersion? Born out of frustration... •Patching versions after

    accepting contributions • Another commit, another build •Slow feedback for non-main branches • No “Continuous Whatever” for features or RCs
  4. GitVersion Why GitVersion? What GitVersion gives •Not having to rebuild

    to increment versions •Not duplicating version information • branch conventions •SemVer for each branch (calculated) •Version flows when merged
  5. GitVersion Why Semantic Versioning? Mainly solves 2 common dependency problems

    •“Version lock” • can’t update → dep’s rely on `exact` versions •“Version promiscuity” • opposite of version lock • update → everything breaks
  6. GitVersion Version lock (example) •Your app is using • facebook

    (1.0.0), twitter (1.0.0) → jsonLib (1.0.0) • facebook (1.1.0) comes out → jsonLib (1.1.0) •Can’t update! twitter locked to jsonLib (1.0.0) • Common when dep. mgnt relies on `exact` versions such as strong naming, e.g. • COM scenarios (Office Addins)
  7. GitVersion Version promiscuity (example) •Again • facebook (1.1.0) comes out

    → jsonLib (1.1.0) • but jsonLib 1.1.0 introduces breaking changes! •Updating breaks twitter 1.0.0 •We need to know when we can update!
  8. GitVersion Why Semantic Versioning? •SemVer = Conventions on breaking changes

    • Can safely update without fear •It’s simple {major}.{minor}.{patch}-{tag}+{buildmetadata} • major = breaking change • minor = feature • patch = bugfix
  9. GitVersion Why Semantic Versioning? “Version lock”-behaviour introduced to tackle “Dependency

    hell” Fun Questions • Is “Version lock” an issue for • OSGI? • Microservices, e.g. 12-factor-app ? • How about “Version promiscuity”?
  10. GitVersion GitVersion: How it works •What GitVersion not does •

    Understanding code changes •Instead it calculates versions from • highest reachable tag ('v2.0.8') • branch-name ('release/2.1.0') • GitVersion.yaml • commits (Merge 'release/3.0.0' into 'master')
  11. GitVersion GitVersion: Example e137e9 -> 1.0.0+0 a5f6c5 -> 1.0.1+1 adb29a

    -> 1.0.1-feature-foo.1+1 (PR #5 Version: `1.0.1-PullRequest.5+2`) 7c2438 -> 1.0.1-feature-foo.1+2 (PR #5 Version: `1.0.1-PullRequest.5+3`) 5f413b -> 1.0.1+4 d6155b -> 2.0.0-rc.1+0 (Before and after tag) d53ab6 -> 2.0.0-rc.2+1 (Pre-release number was bumped because of the tag on previous commit) b5d142 -> 2.0.0+0 (2.0.0 branch was merged, so master is now at 2.0.0) http://gitversion.readthedocs.org/en/latest/examples/
  12. GitVersion Using GitVersion •Command Line Tool • choco install GitVersion.Portable

    • GitVersion.exe /?, init → GitVersion.yaml • GitVersion.exe /output buildserver •MSBuild Task • Install-Package GitVersionTask • Ruby Gem • http://gitversion.readthedocs.org/en/latest/usage/
  13. GitVersion Demo Time Using GitVersion with .NET, Ant & Maven

    https://github.com/mkoertgen/hello.gitversion
  14. GitVersion Demo Time Using GitVersion with .NET, Ant & Maven

    • git clone https://github.com/mkoertgen/hello.gitversion • net> HelloGitVersion.sln • ant> ant • maven> build.bat
  15. GitVersion Summary •GitVersion gives • Automated Semantic Versioning • Branch

    workflows GitFlow & GitHubFlow • Continuous Delivery & Deployment • including pre-releases • Build Server Integration • AppVeyor, TeamCity, Jenkins, NuGet, ...
  16. GitVersion Some references • GitVersion (GitHub) • .NET Rocks #1178

    - Semantic Versioning • Semantic Versioning, GitFlow, GitHubFlow • OctopusDeploy, AppVeyor, … • Atlassian SourceTree