Improve command logging. Refine Git operations on dependency upgrade. See #209
General Notes
- Use the command
helpto get a list of all commands in the release tools. - After fixing a problem use
workspace cleanupto cleanup any mess left behind by the previous step.
One Time Setup
Infrastructure requirements
- Ensure you have the credentials for
buildmasteraccounts on https://repo.spring.io. - Ensure yoiu have the credentials for https://oss.sonatype.org (to deploy and promote GA and service releases, need deployment permissions for
org.springframework.data) insettings.xmlfor server with idsonatype.
Both are available in the Spring/Pivotal Last Pass repository.
Prepare local configuration and credentials
Add an application-local.properties to the project root and add the following properties:
git.username- Your GitHub username.git.password- Your GitHub Password (or API key with scopes:public_repo, read:org, repo:status, repo_deployment, userwhen using 2FA).git.author- Your full name (used for preparing commits).git.email- Your email (used for preparing commits).maven.mavenHome- Pointing to the location of your Maven installation.deployment.username- Your Artifactory user.deployment.api-key- The Artifactory API key to use for artifact promotion.deployment.password- The encrypted Artifactory password..gpg.keyname- The GPG key name.gpg.password- The password of your GPG key.gpg.executable- Path to your GPG executable, typically/usr/local/MacGPG2/bin/gpg2or/usr/local/bin/gpg.sagan.key- Sagan authentication token. Must be a valid GitHub token. Can be the same asgit.passwordwhen using a GitHub token as password.
After that, run the verify command ($ verify) to verify your settings (authentication,
correct Maven, Java, and GPG setup).
See application-local.template for details.
The release process
| Action | Command |
|---|---|
| Build and execute the release shell | mvn package && java -jar target/spring-data-release-cli.jar |
| All following commands are run in the release shell | |
| Pre-release checks | |
| Ensure all work on CVEs potentially contained in the release is done (incl. backports etc.) | N.A. |
| Upgrade dependencies in Spring Data Build parent pom (mind minor/major version rules) | N.A. |
| All release tickets are present | $ tracker releasetickets $trainIteration |
| Review open tickets for release | N.A. |
| Self-assign release tickets | $ tracker prepare $trainIteration |
| Announce release preparations to mailing list (https://groups.google.com/forum/#!forum/spring-data-dev) | N.A. |
| Release the binaries | |
$ release prepare $trainIteration |
|
| Build the artefacts and push them to the apropriate maven repository | $ release build $trainIteration |
$ release conclude $trainIteration |
|
| Push the created commits to GitHub | $ github push $trainIteration |
Push new maintanance branches if the release version was a GA release (X.Y.0 version) |
$ git push $trainIteration.next |
| Distribute documentation and static resources from tag | $ release distribute $trainIteration |
| Post-release tasks | |
| Close JIRA tickets and GitHub release tickets. | $ tracker close $trainIteration |
| Create new release versions and tickets for upcoming version | $ tracker setup-next $trainIteration.next |
Update versions in Sagan. $targets is given as comma separated lists of code names, without spaces. E.g. Moore,Neumann |
$ sagan update $releasetrains |
| Create list of docs for release announcements | $ announcement $trainIteration |
| Announce release (Blog, Twitter) and notify downstream dependency projects as needed. | N.A. |
Utilities
GitHub Labels
ProjectLabelConfiguration contains a per-project configuration which labels should be present in a project. To apply that configuration (create or update), use:
$ github update labels $project
Dependency Upgrade
ProjectDependencies contains a per-project configuration of dependencies.
Workflow:
- Check for dependency upgrades
$ dependency check $trainIteration
Reports upgradable dependencies for Build and Modules and
creates dependency-upgrade-build.properties file.
Edit dependency-upgrade-build.properties to specify the dependency version to upgrade.
Removing a line will omit that dependency upgrade.
- Apply dependency upgrade with
$ dependency upgrade $trainIteration. Applies dependency upgrades currently only to Spring Data Build. - Report store-specific dependencies to Spring Boot's current upgrade
ticket (sample)
$ dependency report $trainIteration
CI Properties Distribution
To distribute ci/pipeline.properties across all modules use:
$ infra distribute ci-properties $trainIteration