2023-06-23 13:49:08 +00:00
|
|
|
# ADR: Release process - in DevOps
|
|
|
|
|
|
|
|
## Status
|
|
|
|
|
|
|
|
accepted
|
|
|
|
|
|
|
|
## Context
|
|
|
|
|
|
|
|
We discussed how we will handle releases in cooperation with gitlab-ci.
|
|
|
|
|
|
|
|
## Decision
|
|
|
|
### Legend
|
|
|
|
* B. User:
|
|
|
|
* Z: Time passes / systems do something:
|
|
|
|
* E: Events:
|
|
|
|
|
|
|
|
### Outcome of Eventstroming: Events ordered by time
|
|
|
|
|
2023-07-19 12:41:15 +00:00
|
|
|
* B: is the human devops
|
|
|
|
* S: is the build / ci system
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
stateDiagram-v2
|
|
|
|
state prepare_release {
|
|
|
|
state "B: Pulls the latest changes" as pull
|
|
|
|
state "B: Possibly merge/rebase with main" as merge
|
|
|
|
state "B: starts 'create release-notes'" as rn
|
|
|
|
state "B: commits his changes with [skip-ci]." as c1
|
|
|
|
|
|
|
|
[*] --> pull
|
|
|
|
pull --> merge
|
|
|
|
merge --> rn
|
|
|
|
rn --> c1
|
|
|
|
c1 --> [*]
|
|
|
|
}
|
|
|
|
state release {
|
|
|
|
state "B: starts the release build and specifies major, minor, patch" as trigger
|
|
|
|
state "S: does a git fetch & status and checks if there are no changes at origin" as fetch
|
|
|
|
state "S: starts tests" as test
|
|
|
|
state "S: runs the linting" as lint
|
|
|
|
state "S: possibly does image building and image testing" as image
|
|
|
|
state "S: version numbers are adjusted in project.clj/package.json to full version" as vno
|
|
|
|
state "S: change commit is tagged with git tag" as c2
|
|
|
|
state "S: version numbers are adjusted in project.clj/package.json to next snapshot " as snap
|
|
|
|
state "S: makes a bump commit with [skip-ci]." as c3
|
|
|
|
state "S: push to gitlab/gitea along with git tags" as push
|
|
|
|
|
|
|
|
[*] --> trigger
|
|
|
|
trigger --> fetch
|
|
|
|
fetch --> lint
|
|
|
|
fetch --> test
|
|
|
|
fetch --> image
|
|
|
|
test --> vno
|
|
|
|
lint --> vno
|
|
|
|
image --> vno
|
|
|
|
vno --> c2
|
|
|
|
c2 --> snap
|
|
|
|
snap --> c3
|
|
|
|
c3 --> push
|
|
|
|
push --> [*]
|
|
|
|
}
|
|
|
|
state ci_tag {
|
|
|
|
state "S: CI starts - for a new tag" as ct1
|
|
|
|
state "S: runs the linting" as ct2
|
|
|
|
state "S: CI runs tests" as ct3
|
|
|
|
state "S: makes artifacts" as ct4
|
|
|
|
state "S: possibly performs image building and image testing" as ct5
|
|
|
|
state "S: publishes images and artifacts" as ct6
|
|
|
|
|
|
|
|
|
|
|
|
[*] --> ct1
|
|
|
|
ct1 --> ct2
|
|
|
|
ct2 --> ct3
|
|
|
|
ct3 --> ct4
|
|
|
|
ct4 --> ct5
|
|
|
|
ct5 --> ct6
|
|
|
|
ct6 --> [*]
|
|
|
|
}
|
|
|
|
state ci_version_bump {
|
|
|
|
state "S: CI starts - for push with the last commit" as cvb1
|
|
|
|
state "S: CI runs tests" as cvb2
|
|
|
|
state "S: performs the linting" as cvb3
|
|
|
|
|
|
|
|
[*] --> cvb1
|
|
|
|
cvb1 --> cvb2
|
|
|
|
cvb2 --> cvb3
|
|
|
|
cvb3 --> [*]
|
|
|
|
}
|
|
|
|
|
|
|
|
[*] --> prepare_release
|
|
|
|
prepare_release --> release
|
|
|
|
release --> ci_tag
|
|
|
|
release --> ci_version_bump
|
|
|
|
ci_tag --> [*]
|
|
|
|
ci_version_bump --> [*]
|
|
|
|
|
|
|
|
```
|
2023-06-23 13:49:08 +00:00
|
|
|
|
|
|
|
## Consequences
|
|
|
|
|
|
|
|
1. we implement the release process by using pyb
|
|
|
|
2. we do test & linting local
|
|
|
|
3. we do all git operations local
|