Skip to content

Commit b7a7a56

Browse files
committed
Merge pull request #164 from arschles/release-docs
doc(releasing.md): add documentation on how to release a new Deis Workflow
2 parents ec086be + ef3193c commit b7a7a56

1 file changed

Lines changed: 157 additions & 0 deletions

File tree

src/contributing/releasing.md

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
# Releasing a new Deis version
2+
3+
This document describes how to release a new Deis version. It's targetted toward the Deis core
4+
maintainers.
5+
6+
The below sections present a step by step guide to releasing a new Deis Workflow. Throughout all
7+
examples, we'll be assuming that the below two environment variables are present in wherever
8+
you're working. Make sure to set them (e.g. by `export`ing them) before you get started.
9+
10+
- `$DEIS_RELEASE` - the full name of this version. For example, `v2.0.0-beta2`
11+
- `$DEIS_RELEASE_SHORT` - The short name of this version. For example, `beta2`
12+
13+
# What's a release?
14+
15+
A release consists of the following artifacts:
16+
17+
1. Docker images with `$DEIS_RELEASE` tags for each Deis Workflow component:
18+
- [builder](https://github.com/deis/builder)
19+
- [controller](https://github.com/deis/controller)
20+
- [dockerbuilder](https://github.com/deis/dockerbuilder)
21+
- [fluentd](https://github.com/deis/fluentd)
22+
- [logger](https://github.com/deis/logger)
23+
- [minio](https://github.com/deis/minio)
24+
- [postgres](https://github.com/deis/postgres)
25+
- [registry](https://github.com/deis/registry)
26+
- [router](https://github.com/deis/router)
27+
- [slugbuilder](https://github.com/deis/slugbuilder)
28+
- [slugrunner](https://github.com/deis/slugrunner)
29+
- [workflow](https://github.com/deis/worflow)
30+
- [workflow-e2e](https://github.com/deis/workflow-e2e)
31+
- [workflow-manager](https://github.com/deis/workflow-manager) (v2.0.0-beta1-8-g9ba6db7)
32+
2. A new [Helm chart for Deis](https://github.com/deis/charts) that references all of the new
33+
images referenced above. For example, if `$DEIS_RELEASE` is `2.0.0-beta2`, the new chart would
34+
be in a new directory called `workflow-beta2`.
35+
36+
# Step 1: Get the status of all components
37+
38+
First, we'll need to get the statuses of all repositories that house the components we're
39+
interested in upgrading. We'll use
40+
[sgoings/deis-workflow-group](https://github.com/sgoings/deis-workflow-group) to do that in one
41+
place. That repository is a group of git submodules with all of the applicable repositories in it,
42+
so that we can manage everything from one place.
43+
44+
Clone that repository to any location on your local machine, update all submodules and list
45+
the latest commit for each submodule:
46+
47+
```console
48+
git clone https://github.com/sgoings/deis-workflow-group
49+
cd deis-workflow-group
50+
make git-update
51+
git submodule status
52+
```
53+
54+
Keep the list of commit SHAs handy - you'll need it for later.
55+
56+
# Step 2: Create a new Helm chart
57+
58+
Next, we'll create a new [Helm](https://github.com/helm/helm) chart so that we can "stage" a
59+
version of our release for testing. The process is fairly simple:
60+
61+
1. Create a new branch: `git checkout -b release-$DEIS_RELEASE`
62+
2. Copy an existing chart: `cp -r workflow-beta2 workflow-$DEIS_RELEASE_SHORT`
63+
3. Modify the `workflow-$DEIS_RELEASE_SHORT/tpl/generate_params.toml` file to ensure that all
64+
`dockerTag` values look like `git-$COMPONENT_SHA_SHORT`, where `$COMPONENT_SHA_SHORT` is the first
65+
7 characters of the applicable SHA that you got in the previous step.
66+
4. Commit your changes: `git commit -a -m "chore(workflow-$DEIS_RELEASE_SHORT): releasing workflow-$DEIS_RELEASE_SHORT"`
67+
5. Push your changes to your fork: `git push -u $YOUR_FORK_REMOTE release-$DEIS_RELEASE`. Note that
68+
`$YOUR_FORK_REMOTE` is the git URI to the remote of your `deis/charts` fork. Mine is `git@github.com:arschles/deis-charts.git`, for example.
69+
6. Do steps 2-5 with the `workflow-beta2-e2e` directory
70+
7. Open a pull request from your branch to merge into `master` on https://github.com/deis/charts
71+
72+
# Step 3: Manual Testing
73+
74+
After the chart is created with the immutable Docker image tags that represent the final images
75+
(i.e. the ones that will be re-tagged to the immutable release tag, such as `2.0.0-beta2`), it
76+
should be manually tested by as many people as possible. Special attention should be paid to the
77+
user experience, both from an operator and developer perspective.
78+
79+
Our goal is to test with as many object storage and Kubernetes installation configurations as
80+
possible, to ensure there are no gaps in configuration or functionality. See below for a testing
81+
matrix.
82+
83+
Object Storage / Kubernetes Install | Kube-Solo | Google Container Engine | AWS | Micro-Kube | Vagrant |
84+
----------------------------------- | --------- | ----------------------- | --- | ---------- | ------- |
85+
Default (Minio) |
86+
Google Cloud Storage |
87+
Amazon S3 |
88+
89+
# Step 4: Tag and push Docker images
90+
91+
After everyone has tested and determined that there are no showstopping problems for this release,
92+
it's time to tag each individual Docker image with `$DEIS_RELEASE`.
93+
94+
To do so, simply go back to the directory where you checked out the `deis-workflow-group` repo
95+
and run the following two commands to tag and push updated docker images:
96+
97+
```console
98+
TAG=$DEIS_RELEASE make docker-tag
99+
make docker-push
100+
```
101+
102+
# Step 5: Update Helm chart
103+
104+
Now that new Docker images are on public Docker repositories, it's time to update the Helm chart
105+
to reference the official images. To do so, simply modify all `dockerTag` entries in the
106+
`generate_params.toml` files in the `workflow-$DEIS_RELEASE_SHORT` and
107+
`workflow-$DEIS_RELEASE_SHORT-e2e` to be `$DEIS_RELEASE` (instead of the ones based on git tags).
108+
109+
When you're done, commit and push your changes. You should get your pull request reviewed and
110+
merged before continuing.
111+
112+
# Step 6: Update Changelogs
113+
114+
At this point, part of the first part and all of the second part of the release is complete.
115+
That is, the Helm chart for the new Deis version is done, and new Docker versions for all
116+
components are done.
117+
118+
The remaining work is simply generating changelogs and tagging each component's GitHub repository.
119+
120+
First, create a branch for the new changelog:
121+
122+
```console
123+
git checkout -b release-$DEIS_RELEASE_SHORT
124+
```
125+
126+
To generate changelogs, run the below command in each repository. Ensure that `$PREVIOUS_TAG` is
127+
the previous tag that was generated in the repository.
128+
129+
```console
130+
_scripts/generate_changelog.sh $PREVIOUS_TAG
131+
```
132+
133+
This command will output the new changelog entry to STDOUT. Copy it and prepend it to the
134+
existing `CHANGELOG.md` file, and make sure to change `HEAD` in the header of the entry
135+
to `$DEIS_RELEASE`.
136+
137+
Finally, commit, push and submit a Pull Request for your changes:
138+
139+
```console
140+
git commit CHANGELOG.md -m "doc(CHANGELOG.md): add entry for $DEIS_RELEASE_SHORT"
141+
git push -u $YOUR_FORK_REMOTE $DEIS_RELEASE_SHORT
142+
```
143+
144+
Before you continue, ensure pull requests in all applicable repositories are reviewed, and merge
145+
them.
146+
147+
# Step 7: Tag and push git repos
148+
149+
The final step of the release process is to tag each git repository, and push the tag to each
150+
GitHub project. To do so, simply run the below command in the `deis-workflow-group` repository:
151+
152+
```console
153+
TAG=$DEIS_RELEASE TAG_MESSAGE="releasing workflow $DEIS_RELEASE" make git-tag
154+
make git-tag-push
155+
```
156+
157+
You are now done with the release

0 commit comments

Comments
 (0)