├── LICENSE
├── README.md
└── illustrations
├── automated-deployment.png
├── commit-format.png
├── git-flow.png
├── release-history.png
├── ship-to-qa.png
└── task-management.png
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Boris Kuznetsov
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Software process framework, v0.1
2 |
3 | The document describes the process of developing, testing and shipping software.
4 |
5 | It aims to achieve the goal of an efficiency of communication and collaboration between team members.
6 |
7 | ## Related tools
8 |
9 | - [srelease](https://github.com/achempion/srelease) — bash script created to automate release management process
10 |
11 |
12 | ## Topics
13 |
14 | 1. git-flow
15 | 2. release history
16 | 3. commit format
17 | 4. task management
18 | 5. how to ship code to QA team
19 | 6. automated deployment
20 |
21 | ## Git-flow
22 |
23 |
24 |
25 |
26 |
27 | Gitflow is a tool to decrease entropy into your repository.
28 | It contains information how to work with branches (develop, release, master),
29 | how to ship features, how to implement hot fixes.
30 |
31 | Useful links:
32 | - http://nvie.com/posts/a-successful-git-branching-model/ — blog post
33 | - https://github.com/petervanderdoes/gitflow-avh — repository
34 | - https://github.com/petervanderdoes/gitflow-avh/wiki/Installation — how to install
35 |
36 | Each branch should have a format that follows the naming rule:
37 | `-task_description_with_underline`
38 |
39 | Feature and Hotfix branches should:
40 | - start with ``
41 | - end with `-task_desctiption`
42 |
43 | It's possible to use a date instead of ``.
44 |
45 | **feature**
46 | `feature/task-11-sign_up_tests`
47 | `feature/2018-05-17-allow_user_to_edit_email`
48 |
49 | **hotfix**
50 | `hotfix/task-11-fix_user_validation`
51 | `hotfix/2017-02-02-fix_user_validation`
52 |
53 | ## Release history
54 |
55 |
56 |
57 |
58 |
59 | To track our process of development, keep what we do and what we did,
60 | we need to create `releases/` directory.
61 |
62 | Here is the structure of `releases/` catalog:
63 |
64 | ```
65 | └── releases/
66 | ├── current/
67 | │ ├── .keep
68 | │ ├── task-11
69 | │ ├── task-13
70 | │ └── task-15
71 | └── history/
72 | ├── .keep
73 | └── 2017-02-02
74 | ```
75 |
76 | `.keep` need to keep an empty folder at the git repository
77 |
78 | `task-11`, `task-13`, `task-15` is the identifications of a task at your task management system.
79 |
80 | The content of the task file should describe additional actions needed to be done after deployment, such as:
81 | - notify someone
82 | - run some custom command on the server
83 |
84 | Here is an example of task file:
85 |
86 | **releases/current/task-11**
87 | ```ruby
88 | # updates product rating by new formula
89 | rake features:task_11
90 | ```
91 |
92 | After, we can automatically concatenate all task files into the release file
93 |
94 | **releases/history/2017-02-02**
95 | ```ruby
96 | task-11
97 | # updates product rating by new formula
98 | rake features:task_11
99 | ```
100 |
101 | `2017-02-02` in `releases/history/2017-02-02` is a date of release branch creation.
102 |
103 | You can also additionally specify the release pourpose by adding a postfix: `2017-02-02-backend_team`.
104 |
105 | Here is a tool to automate work with `releases/` directory
106 | https://github.com/achempion/srelease
107 |
108 | ## Commit format
109 |
110 |
111 |
112 |
113 |
114 | Each commit should refers to task into your tast management software.
115 |
116 | Here is an example:
117 |
118 | `[refs #task-13] commit message` — if your want refer to one
119 | `[refs #task-11, #task-15] commit message` — if your want refer to more
120 |
121 | ## Task management
122 |
123 |
124 |
125 |
126 |
127 | Task management is really on your own.
128 |
129 | One thing that required is
130 | **each task should contain a link to the PR (pull request)**.
131 |
132 | ## How to ship code to QA team
133 |
134 |
135 |
136 |
137 |
138 | Here is the most interesting part.
139 |
140 | When your team develops, you have many pull requests to develop branch.
141 | Also, your QA needs to test each task.
142 |
143 | In usual — you have a `testing` branch and all your team
144 | merging their *feature branches* to `testing` then deploy.
145 |
146 | That approach has several disadvantages:
147 | - you can't simply "undeploy" branch from testing
148 | - you need to manually merge each time
149 | - you need to manually deploy each time
150 | - you need to wait until deploy have been finished,
151 | run tasks if needed then notify QA
152 |
153 | You need a tool to automate process of creating testing branches
154 | from labeled PRs.
155 |
156 | ## Automated deployment
157 |
158 |
159 |
160 |
161 |
162 | When testing branch builds you need to deploy.
163 | This process should be automated too.
164 |
165 | The clue is that you can go even further and
166 | automate running tasks from `releases/current/*`.
167 |
168 | ## Useful links
169 |
170 | [GitLab communication handbook](https://about.gitlab.com/handbook/communication/)
171 |
172 | [Is group chat making you sweat? by Jasob Fried, Basecamp](https://m.signalvnoise.com/is-group-chat-making-you-sweat)
173 |
--------------------------------------------------------------------------------
/illustrations/automated-deployment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/achempion/software_process_framework/1154d770520b3ad37536ebf7fc927130bf0ab47b/illustrations/automated-deployment.png
--------------------------------------------------------------------------------
/illustrations/commit-format.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/achempion/software_process_framework/1154d770520b3ad37536ebf7fc927130bf0ab47b/illustrations/commit-format.png
--------------------------------------------------------------------------------
/illustrations/git-flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/achempion/software_process_framework/1154d770520b3ad37536ebf7fc927130bf0ab47b/illustrations/git-flow.png
--------------------------------------------------------------------------------
/illustrations/release-history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/achempion/software_process_framework/1154d770520b3ad37536ebf7fc927130bf0ab47b/illustrations/release-history.png
--------------------------------------------------------------------------------
/illustrations/ship-to-qa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/achempion/software_process_framework/1154d770520b3ad37536ebf7fc927130bf0ab47b/illustrations/ship-to-qa.png
--------------------------------------------------------------------------------
/illustrations/task-management.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/achempion/software_process_framework/1154d770520b3ad37536ebf7fc927130bf0ab47b/illustrations/task-management.png
--------------------------------------------------------------------------------