├── 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 --------------------------------------------------------------------------------