Every Infinito.Nexus release follows the same path. It starts with a green main branch, goes through version number, changelog and tag, and ends with announcements on the blog, Mastodon, LinkedIn, the WhatsApp group and the newsletter. This guide shows who does what and when. ![]()
The Process at a Glance
| # | Step | Who |
|---|---|---|
| 1 | main passes CI/CD green |
CI/CD |
| 2 | Kevin Veen-Birkenbach | |
| 3 | Kevin Veen-Birkenbach | |
| 4 | Main author of the release | |
| 5 | Main author of the release | |
| 6 | Kevin Veen-Birkenbach | |
| 7 | Main author of the release | |
| 8 | Main author of the release |
The Workflow as a Diagram
Dark green = required ·
Dark blue = decision ·
White, dashed = optional ·
Dark red = stop
%%{init: {"theme": "base", "themeVariables": {"fontSize": "16px", "lineColor": "#475569", "textColor": "#0f172a", "titleColor": "#0f172a", "edgeLabelBackground": "#ffffff"}, "flowchart": {"wrappingWidth": 320, "nodeSpacing": 30, "rankSpacing": 45, "padding": 14}}}%%
flowchart TD
subgraph GATE["🚦 Gate · CI/CD"]
A{{"1️⃣ main green in CI/CD?"}}
X["🛑 No release<br/>fix main first"]
end
subgraph REL["🏷️ Release · Kevin Veen-Birkenbach"]
B{{"2️⃣ What changed?"}}
B1["💥 Major<br/>14.2.0 ➜ 15.0.0"]
B2["✨ Minor<br/>14.2.0 ➜ 14.3.0"]
B3["🐛 Patch<br/>14.2.0 ➜ 14.2.1"]
C["3️⃣ Changelog entry + Git tag"]
end
subgraph BLOG["✍️ Blog · Main author"]
D["4️⃣ Generate blog article<br/>from changelog entry"]
E["6️⃣ Review by Kevin Veen-Birkenbach"]
F["📰 Article goes live"]
end
subgraph OPT["➕ Optional · Main author"]
direction TB
O1["5️⃣ Developer tutorial<br/>hub.infinito.nexus"]
O2["5️⃣ Tutorial video<br/>video.infinito.nexus"]
O3["5️⃣ What's New video<br/>video.infinito.nexus"]
M["🆘 Need help?<br/>matrix.infinito.nexus"]
O1 ~~~ O2 ~~~ O3 ~~~ M
end
subgraph ANN["📣 Announce · Main author"]
G["7️⃣ Mastodon<br/>for developers"]
H["7️⃣ LinkedIn<br/>for business"]
I["8️⃣ WhatsApp + newsletter<br/>for the community"]
end
A -->|no| X
A -->|yes| B
B -->|breaking| B1
B -->|complete features| B2
B -->|fixes or incomplete features| B3
B1 & B2 & B3 --> C
C --> D --> E --> F
F --> G & H
G & H --> I
D -.-> OPT
classDef required fill:#065f46,stroke:#022c22,stroke-width:2px,color:#ffffff
classDef decision fill:#1e3a8a,stroke:#172554,stroke-width:2px,color:#ffffff
classDef optional fill:#ffffff,stroke:#334155,stroke-width:2px,stroke-dasharray:6 4,color:#0f172a
classDef stop fill:#991b1b,stroke:#450a0a,stroke-width:2px,color:#ffffff
class B1,B2,B3,C,D,E,F,G,H,I required
class A,B decision
class O1,O2,O3,M optional
class X stop
style GATE fill:#f1f5f9,stroke:#334155,stroke-width:2px,color:#0f172a
style REL fill:#f1f5f9,stroke:#334155,stroke-width:2px,color:#0f172a
style BLOG fill:#f1f5f9,stroke:#334155,stroke-width:2px,color:#0f172a
style ANN fill:#f1f5f9,stroke:#334155,stroke-width:2px,color:#0f172a
style OPT fill:#fafafa,stroke:#334155,stroke-width:2px,stroke-dasharray:6 4,color:#0f172a
Prerequisite: main Is Green 
Releases are published regularly by Kevin Veen-Birkenbach, always based on the current main branch.
The full CI/CD pipeline on main must pass green first. If even one job is red, there is no release. ![]()
The integration status shows whether the last main run is green.
Choose the Version Number 
We follow Semantic Versioning. A release tag has the form vMAJOR.MINOR.PATCH, for example v14.2.0. Which part goes up depends on what the release contains:
| Release type | When? | What changes? | Example |
|---|---|---|---|
| The release is breaking: existing setups need changes before they work again. | First number +1, all others reset to 0 | v14.2.0 ➜ v15.0.0 |
|
| Complete new features arrive and nothing breaks. | Second number +1, last one reset to 0 | v14.2.0 ➜ v14.3.0 |
|
| Bugs get fixed, or features ship that are not complete yet. | Last number +1 | v14.2.0 ➜ v14.2.1 |
Only complete changes are ready for at least a (beta) minor release. Anything incomplete ships as a patch release at most. For example, a feature or app without full Swarm and Tor support is never more than a patch release.
Publish the Release 
Publishing a release takes two steps:
Add it to the changelog as a new section ## [<version>] - <YYYY-MM-DD>with the parts For Users and For Developers.
Create the Git tag v<version>and push it.
Pushing the tag automatically starts the CI job that publishes the release images. The release docs have the technical details.
Generate the Blog Article 
After the release is out, the main author of the release creates an article for blog.infinito.nexus. The main author is whoever delivered the core of the release. For a breaking major release, for example, that is the person who introduced the breaking changes.
Audience: end users and customers
Article checklist:
-
Generated from the changelog entry, above all from its For Users part -
Links to the changelog entry at s.infinito.nexus/changelog -
Written from the user’s perspective: What can I do now that I couldn’t do before? No developer jargon, no internals. -
Focus on new features and what they bring to the user -
Category: Release -
Relevant tags, for example the affected apps and topics -
A fitting header image that contains the Infinito.Nexus logo 
Add a Tutorial and Videos (If Possible) 
If the release brings something that needs to be explained, the main author also provides:
-
A developer tutorial on hub.infinito.nexus that explains how to use the new features -
A tutorial video on video.infinito.nexus -
A “What’s New” video on video.infinito.nexus that presents the release
Tip: There are Claude skills that make this easy. Just record a video and let them add animations to it.
Need help? Ask in the matching rooms on matrix.infinito.nexus.
Review 
Once the article is written, Kevin Veen-Birkenbach reviews it. The article goes live only after that review, and then the next steps follow.
Prepare the Social Media Posts 
After the review, the author prepares a Mastodon post and a LinkedIn post. Each channel speaks to its own audience:
| Channel | Audience | Focus |
|---|---|---|
| End users and customers | New features from the user’s point of view | |
| Developers, IT people, hackers | What is new in Infinito.Nexus? | |
| Business contacts | What value does the release add? |
Mastodon
The goal is to show the IT community what is new in Infinito.Nexus. The author shares the blog article with this post on microblog.infinito.nexus.
-
Short: about 400 characters -
As many relevant hashtags as possible, for example #InfinitoNexus #OpenSource #SelfHosting #FOSS #DevOps #Ansible #Docker #Linux #Homelab -
Attach the blog article’s header image -
Link to the blog article
LinkedIn
Posted on the Infinito.Nexus LinkedIn page.
-
Short and to the point -
Written for business contacts: business value instead of technical details -
Link to the blog article
Inform the Community 
Finally, the author announces the release, each time with a link to the blog article:
in the relevant WhatsApp group
through the newsletter
Questions or ideas about the release process? Just reply in this thread. ![]()