Let's Ship This Thing! 🚀

By: Gary Ewan Park


@gep13

Agenda

  • What is an issue?
  • What is Semantic Versioning?
  • What branching strategy should I use?
  • What is GitVersion?
  • What is GitReleaseManager?
@gep13

What is an

issue

@gep13

Demo

Q. What is an issue?

...it is the focal point for work undertaken on a particular task/bug/feature in a product release.

@gep13

What is

Semantic Versioning

@gep13
Q. What is Semantic Versioning?

...a simple set of rules and requirements that dictate how version numbers are assigned and incremented. These rules are based on, but not necessarily limited to, pre-existing widespread common practices in use in both closed and open-source software.

@gep13

The Rules

Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes
  • MINOR version when you add functionality in a backwards-compatible manner
  • PATCH version when you make backwards-compatible bug fixes

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

@gep13

Examples

  • 0.1.0
  • 0.3.13
  • 1.0.0
  • 0.2.0-alpha.3
  • 0.2.0-alpha.3+Branch.develop.Sha.e6eb071cd30974b80d7e237b85e7729a1d791e1e
@gep13

How do you know

when to bump

a version number

@gep13

Tools

@gep13
Q. How do you know when to bump a version number?
There is no quick answer 😿
@gep13

What

branching strategy

should I use

@gep13

GitHub Flow

@gep13
Create a branch

Add commits

Open a Pull Request

Discuss and review your code

Deploy

Merge

GitFlow

@gep13
Q. What branching strategy should I use?

It depends! 🤷

@gep13

What is

GitVersion

@gep13
Q. What is GitVersion?

...a tool to help you achieve Semantic Versioning on your project.

@gep13

Demo

Why do I need

GitVersion

@gep13
@gep13
@gep13
@gep13

?

@gep13
Q. Why do I need GitVersion?

To make version assertion reliable and consistent

@gep13

What is

GitReleaseManager

@gep13
Q. What is GitReleaseManager?

...a tool that will help create, and manage, a release for your application/product.

@gep13

Demo

Gary Ewan Park

Principal Software Engineer
Chocolatey Software, Inc

@gep13

Questions

Learn More

@gep13

- We have all been here - We are excited to ship the next version - What is in it? - What problems have we solved? - What bugs have we addressed? - What features are we excited about shipping? - How do we communicate these to our end users?

- Cake build script sample for running GitVersion and GitReleaseManager is in the repository

- Fundamental principal - traceability and communication - What version number does it have? - What issues/pull requests are associated with it?

- Single point of truth for information - Both for developers and users - Where we can trace changes associated with the issue - Where we can communicate changes about the issue

- Loaded topic - large discussion - Not going into the details

- A semantic version number expresses the intention of the release - What has changed since the last version

- Final example here has ALL information needed for the purposes of traceability - Most common to have both a "short" version for normal usage, and use the full version as an informational version

- There is no magic bullet here - These tools definitely help in keeping you "honest" about the changes going into a given release - There may be marketing reasons why a certain version number is needed

- Again a loaded topic

- This is the simpler of the two strategies that I am going to show

- This is the more complicated strategy, but also the one that I prefer

- Even though it appears more complicated - Once you break it down, the process is very similar to GitHub Flow - If you squint your eyes a bit!

- Again, there is no magic bullet - Pick the workflow that works for your team - Document it, so that everyone knows what to expect

- .Net Framework - .Net Global Tool - GitHub Action - Doesn't help you decide when a version number need to change

- This couples you to a CI system

- No idea what the version number is

- Started out as a tool from Particular - .Net Framework - .Net Global Tool - GitHub Action