Release Process =============== * The release process works best with `Gitflow `_ branching. * Contributors can do whatever they want on PRs and feature branches to deliver a feature to **develop** branch. * Maintainers can do whatever they want on PRs and merges to **main** will result in packages being released to GitHub and NuGet. Ocelot uses the following process to accept work into the NuGet packages. 1. User creates an issue or picks up an `existing issue `_ in GitHub. An issue can be created by converting `discussion `_ topics if necessary and agreed upon. 2. User creates `a fork `_ and branches from this (unless a member of core team, they can just create a branch on the head repo) e.g. ``feature/xxx``, ``bug/xxx`` etc. It doesn't really matter what the "xxx" is. It might make sense to use the issue number and maybe a short description. 3. When the contributor is happy with their work they can create a pull request against **develop** in GitHub with their changes. 4. The maintainer must follow the `SemVer `_ support for this is provided by `GitVersion `_. So if the maintainer needs to make breaking changes, be sure to use the correct commit message, so **GitVersion** uses the correct **SemVer** tags. Do not manually tag the Ocelot repo: this will break things! 5. The Ocelot team will review the PR and if all is good merge it, else they will suggest feedback that the user will need to act on. In order to speed up getting a PR the contributor should think about the following: - Have I covered all my changes with tests at unit and acceptance level? - Have I updated any documentation that my changes may have affected? - Does my feature make sense, have I checked all of Ocelot's other features to make sure it doesn't already exist? In order for a PR to be merged the following must have occured: - All new code is covered by unit tests. - All new code has at least 1 acceptance test covering the happy path. - Tests must have passed locally. - Build must have green status. - Build must not have slowed down dramatically. - The main Ocelot package must not have taken on any non MS dependencies. 6. After the PR is merged to **develop** the Ocelot NuGet packages will not be updated until a release is created. 7. When enough work has been completed to justify a new release, **develop** branch will be merged into **main** as **release/xxx** branch, the release process will begin which builds the code, versions it, pushes artifacts to GitHub and NuGet packages to NuGet. 8. The final step is to go back to GitHub and close any issues that are now fixed. **Note**: All linked issues to the PR in **Development** settings (right side PR settings) will be closed automatically while merging the PR. It is imperative that developer uses the "**Link an issue from this repository**" pop-up dialog of the **Development** settings! Notes ----- All NuGet package builds and releases are done with CircleCI, see `Pipelines - ThreeMammals/Ocelot `_. Only Tom Pallister (owner) and Ocelot Core Team members (maintainers) can merge releases into **main** at the moment. This is to ensure there is a final `quality gate <#quality-gates>`_ in place. Tom is mainly looking for security issues on the final merge. We **do** follow this development and release process! If anything is unclear or you get stuck in the process, please contact the `Ocelot Core Team `_ members or repository maintainers. Quality Gates ------------- To be developed...