== 1. Update Dependencies

Dependencies are declared in `gradle/dependency-management.gradle`.
Update the `coreVersion` to the corresponding version of `spring-session-core` and `dataGeodeVersion` to the corresponding version of `spring-session-data-geode`.

Run all the checks:

[source,bash]
----
$ ./gradlew check
----

Create separate issues for each dependency update and push the changes.

== 2. Run the test project

Ensure that the most recent SNAPSHOT is working, by testing it in a sample project, for example https://github.com/eleftherias/session-bom-sample.

== 3. Check All Issues are Closed

You can manually check at https://github.com/spring-projects/spring-session/milestones

== 4. Update Release Version

Update the version number in `gradle.properties` for the release, for example `2021.2.0-RC1`, `2021.1.0`.

== 5. Build Locally

Run the build using

[source,bash]
----
$ ./gradlew check
----

== 6. Push the Release Commit

Push the commit and Jenkins will build and deploy the artifacts.
Wait for the artifact to appear in https://repo1.maven.org/maven2/org/springframework/session/spring-session-bom/

== 7. Tag the release

Tag the release and then push the tag

....
git tag 2021.2.0-RC1
git push origin 2021.2.0-RC1
....

== 8. Update to Next Development Version

Update `gradle.properties` version to next `+SNAPSHOT+` version, update the dependencies in `dependency-management.gradle` to the next `+SNAPSHOT+` versions and then push.

== 9. Update version on project pages

Update the versions on https://spring.io/projects for Spring Session.
The reference documentation should point to the Spring Session Core reference documentation.

== 10. Update Release Notes on GitHub

This step should be skipped for patch releases (e.g 2.7.1). It only applies to pre-releases and GA releases.

Create a new release notes section in the https://github.com/spring-projects/spring-session-bom/wiki[Wiki].
Describe any breaking changes, and noteworthy enhancements.

== 11. Close / Create Milestone

* In
https://github.com/spring-projects/spring-session/milestones[GitHub
Milestones], create a new milestone for the next release version.
* Move any open issues from the existing milestone you just released to
the new milestone.
* Close the milestone for the release.

Note: Spring Session typically releases only one milestone (M1) and one release candidate (RC1).

== 12. Announce the release

* Announce via Slack on
https://pivotal.slack.com/messages/spring-release[#spring-release],
including the keyword `+spring-session-announcing+` in the message.
Something like:

....
spring-session-announcing 2022.0.0 is available.
....

== 13. Create a blog post

Create a https://spring.io/admin/blog[blog post], you can find an example https://spring.io/blog/2022/02/23/spring-session-2021-0-5-and-2021-1-2-released[here].
