Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
917707b
add semantic release learning hour with devops tag
ibanFR Apr 27, 2025
c2c42a8
add Ivan Fernandez to contributors and create member page
ibanFR Nov 14, 2025
a44c176
update author and affiliation in semantic release.md front-matter
ibanFR Nov 14, 2025
46be946
update semantic_release.md with detailed session outline and concepts…
ibanFR Nov 14, 2025
5fca314
remove TODO section from semantic_release.md
ibanFR Nov 15, 2025
841b212
remove hyphen from Semantic Release link
ibanFR Nov 15, 2025
06c4ee2
update section Concept: Semantic Versioning Specification in semantic…
ibanFR Nov 15, 2025
b844b08
update session outline in semantic_release.md with revised time alloc…
ibanFR Nov 18, 2025
e8e286b
update semantic_release.md to clarify concepts and improve structure
ibanFR Nov 26, 2025
4552880
Merge branch 'main' into semantic-release
ibanFR Nov 26, 2025
63ff892
correct spelling of Iván Fernández in contributor files
ibanFR Nov 26, 2025
c064282
Merge branch 'sammancoaching:main' into semantic-release
ibanFR Dec 2, 2025
c70382f
.t approve search results
ibanFR Dec 2, 2025
29acdfd
doc: update semantic_release.md with learning goals
ibanFR Dec 4, 2025
c1b4813
doc: update semantic_release.md conclusions section
ibanFR Dec 4, 2025
6e9ef49
doc: remove Session Outline section from semantic_release.md
ibanFR Dec 5, 2025
b316b4c
doc: add Session Outline section to semantic_release.md
ibanFR Dec 5, 2025
f6b94af
Merge branch 'sammancoaching:main' into semantic-release
ibanFR Dec 5, 2025
96008e0
doc: update connect section in semantic_release.md
ibanFR Dec 5, 2025
1edced8
doc: update Session Outline section in semantic_release.md
ibanFR Dec 5, 2025
7722b2a
Merge branch 'sammancoaching:main' into semantic-release
ibanFR Dec 13, 2025
d7ee95d
doc: update Connect section in semantic_release.md
ibanFR Dec 13, 2025
a864c9e
docs: correct grammatical error in semantic versioning description
ibanFR Dec 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions _data/contributors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,8 @@ nicolerauch:
url: http://nicole-rauch.de
affiliation: Independent
member: yes
ibanfr:
title: Iván Fernández
url: https://ibanfr.github.io/
affiliation: Independent
member: no
165 changes: 165 additions & 0 deletions _learning_hours/devops/semantic_release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
---
theme: devops
title: Semantic Release
kata: lift_button
difficulty: 1
author: ibanfr
affiliation: Independent
tags: devops
---

# Semantic Release
Learn how to apply Semantic Versioning (SemVer) to automate software releases by working through the [Lift Button]({% link _kata_descriptions/lift_button.md %})
Kata.

This Learning Hour will help you understand versioning principles and integrate them into your development
workflow.

## 🎯 Learning Goals

1. Understand the principles of Semantic Versioning (SemVer).
2. Write semantic commit messages to document the nature of the changes made to the codebase.
3. Explore how semantic-release uses the commit messages to automate software releases.

## 📝 Session Outline

* 5 min connect: How are version numbers assigned for your software?
* 5 min concept: Semantic Versioning Specification
* 10 min concept: Semantic Release
* 20 min concrete: Release initial features for Lift Button
* 15 min concrete: Release a BREAKING CHANGE for Lift Button
* 5 min conclusions: When should you use semantic commit messages?

## 1️⃣ Connect: How are version numbers assigned for your software? (⏱️ 5 min)

Discuss with the group how version numbers are currently assigned in their current projects (you may
use [Describe your experience]({% link _activities/connect/your_experience.md %}) or
[Three Facts]({% link _activities/connect/three_facts.md %}) depending on the team size).

Write notes of what they say on a whiteboard or shared document where everyone can see them.

Review the notes and highlight those that relate to the concepts covered in the upcoming sections.

## 2️⃣ Concept: Semantic Versioning Specification (⏱️ 5 min)

[Semantic Versioning] (SemVer) is a versioning scheme that consist in a simple set of rules and requirements that
dictate how version numbers are assigned and incremented for software releases.

SemVer uses a three-part version number - `MAJOR.MINOR.PATCH` - to communicate changes to the software with specific
increments to the version number:

- `MAJOR` version, increased for backwards incompatible changes.
- `MINOR` version, increased for new features/functionality in a backwards compatible manner.
- `PATCH` version, increased for backwards compatible bug fixes.

## 3️⃣ Concept: Semantic Release (⏱️ 10 min)

[Semantic Release] is a tool that automates the release process by analyzing commit messages to determine the type of
changes made in the codebase.

Contributors follow a specific commit message convention to indicate the nature of their changes:

```
<type>: <description>

<optional body>

<optional footer>
```

For example:

```conventionalcommit
feat: add lights() method to Lift class to query the light status
```

By using Semantic Release, teams can ensure consistent and reliable releases, reduce human error, and streamline the
release process.

## 4️⃣ Concrete: Release initial features for Lift Button (⏱️ 20 min)

After reviewing the [Lift Button Requirements]({% link _kata_descriptions/lift_button.md %}), the team has come up
with an initial Test list to implement the first features of the Lift Button:

```java
//TEST LIST
//[] - doors should be CLOSED when Lift is created
//[] - should switch lights ON when button is pressed and doors are CLOSED
//[] - should OPEN the lift doors when lift arrives
//[] - should switch OFF the lights when lift arrives
//[] - lights should be OFF when button is pressed AND doors are OPEN
```

Your task is to help the team implement the initial Lift Button features and automate the release process using Semantic
Release:

1. Start by creating a new repository from [this template].
2. Write one test at a time and document your changes using semantic commit messages:

```html
| Type | Description |
|----------|--------------------------------------|
| feat | A new feature |
| fix | A bug fix |
| refactor | A behavior preserving change |
```

3. View your [repository's releases and tags] to see the published versions based on your commit messages (new
features and fixes are immediately available to the users after a commit is pushed to the main branch).

## 5️⃣ Concrete: Release a BREAKING CHANGE for Lift Button (⏱️ 15 min)

Following the release of version `v1.y.z`, customers raised a safety concern: the lift doors should not be closed when
the lift is initialized!

As a result, the customers have requested a change so that the doors remain open upon lift creation. Here is the new
feature request:

```gherkin
Feature: Open doors when lift is first started

As a safety-conscious user
I want the lift doors to be open when the lift is first started
So that I can ensure safe entry and exit from the lift

Scenario: The one where the Lift is first started
When the Lift is first started
Then the Lift doors should be OPEN
```

This change requires users of version `v1.y.z` to update their code for compatibility with the new lift behavior, so
the team will release this feature as a breaking change:

1. Update the code to implement the new requirement and release a new version of the Lift Button.
2. Use the footer in your commit message to indicate that this change is not backwards compatible.

```
<type>: <description>

BREAKING CHANGE: <breaking change summary>
<breaking change description + migration instructions>
```
3. After pushing your commit to the main branch, check your [repository's releases and tags] to see the new major
version created for the breaking change.

## 6️⃣ Conclusions: When should you use semantic commit messages? (⏱️ 5 min)

Now that you have experienced how semantic commit messages are used to release new features of the Lift Button, ask the
group to think about:

> _[When should you use]({% link _activities/conclusions/when_to_use_this.md %}) semantic commit messages?_

Collect and summarize the ideas for everyone. Highlight the ones that better align with the learning goals:

> _"Use semantic commit messages to automate software releases in a continuous delivery pipeline"_
>
> _"Semantic commit messages help communicate the nature of changes to the codebase"_


[Semantic Versioning]: https://semver.org/

[Semantic Release]: https://semantic-release.gitbook.io/semantic-release

[this template]: https://github.com/ibanFR/semantic-release-kata

[repository's releases and tags]: https://docs.github.com/en/repositories/releasing-projects-on-github/viewing-your-repositorys-releases-and-tags
12 changes: 12 additions & 0 deletions society/contributors/ibanfr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
layout: member
title: Iván Fernández
author: ibanfr
role: Technical Coach
---

# {{ page.title}}
{% assign author = site.data.contributors[page.author] %}
{{author.title}} is an {{author.affiliation}} {{page.role}}.

Find more information about {{author.title}} at his [site]({{author.url}}).
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,10 @@
"title": "Learning Hour: Learn Faster By Practicing Teaching",
"url": "/learning_hours/devops/learn_faster.html"
},
{
"title": "Learning Hour: Semantic Release",
"url": "/learning_hours/devops/semantic_release.html"
},
{
"title": "Learning Hour: The three ways of DevOps",
"url": "/learning_hours/devops/three_ways.html"
Expand Down Expand Up @@ -1271,6 +1275,10 @@
"title": "Gregor Riegler",
"url": "/society/contributors/gregorriegler.html"
},
{
"title": "Iv\u00e1n Fern\u00e1ndez",
"url": "/society/contributors/ibanfr.html"
},
{
"title": "Llewellyn Falco",
"url": "/society/contributors/isidore.html"
Expand Down
Loading