-
Make sure to initially set-up your environment.
-
Use the command
helpto get a list of all commands in the release tools. -
After fixing a problem use
workspace cleanupto clean-up any mess left behind by the previous step.
The Pre-Release tasks and Post-Release tasks phases of making a release (opening tickets/closing tickets) is still done manually.
The Build and publish the release phase is whatβs covered by the CI server.
Note many steps of the release process use SSL connections. If you are "using" a tool that performs a MITM attack on SSL connections by adding extra root certificates in your browsers but not in the Java keychain, the process will fail with some error indicating the inability to establish a secure conection.
-
Ensure all work on CVEs potentially contained in the release is done (incl. backports etc.).
-
Upgrade dependencies in Spring Data Build parent pom (mind minor/major version rules).
-
Review open tickets for release:
$ tracker open-tickets $trainIteration
-
Announce release preparations to mailing list (https://groups.google.com/forum/#!forum/spring-data-dev)
-
Create release tag, verify the release can be built, and publish tags:
$ prepare-it $trainIteration
-
π₯ Continue with Build and distribute the release.
| Action | Command |
|---|---|
Open a terminal pointing to the release tools directory |
|
Checkout the |
|
Set the |
|
Edit |
|
Commit the change to this repository |
|
|
|
π¨ To trigger π£ the release manually on Jenkins. Goto https://jenkins.spring.io/view/SpringData/job/spring-data-release/job/release/ and click βΆ Build Now |
|
Once started click on the active job, and then click on Open Blue Ocean. |
Monitor the release process. |
-
For a Maven central release, if the smoke test has passed, the repository will already have been released, so there is nothing more to do.
-
For an Artifactory release, if the smoke test has passed, the release will already have been staged and promoted, so there is nothing more to do.
-
π₯ Continue with Post-Release tasks.
| Action | Command |
|---|---|
Close release tickets. |
|
Create new release versions and tickets for upcoming version |
|
-
π₯ Go to Pre-Release tasks to ship the next release π.
-
π₯ If this has been the last release π, continue with Post-All-Releases tasks for the final steps.
| Action | Command |
|---|---|
Update versions in the Projects Service. |
|
Create list of docs for release announcements |
|
Trigger Antora documentation build (once all artifacts have arrived at the final Maven repository) |
|
Announce release (Blog, Twitter) and notify downstream dependency projects as needed. |
N.A. |
Congratulations π₯³ You completed the release β€οΈ.
-
Ensure you have the credentials for
buildmasteraccounts on https://repo.spring.io.
Both are available in the Spring/Pivotal Last Pass repository.
-
Add an
application-local.propertiesto 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.passphrase- The password of your GPG key. -
gpg.executable- Path to your GPG executable, typically/usr/local/MacGPG2/bin/gpg2or/usr/local/bin/gpg. -
project-service.key- Project Service authentication token. Must be a valid GitHub token. Can be the same asgit.passwordwhen using a GitHub token as password. Use the following scopes:project, read:org, repo, user, workflow.
-
(See application-local.template for details)
-
Verify your local settings (authentication, correct Maven, Java, and GPG setup):
$ verify local
| Action | Command |
|---|---|
All release tickets are present |
|
Self-assign release tickets |
|
Prepare the release |
|
|
|
|
|
Build the release |
|
Build the artifacts from tag and push them to the appropriate maven repository. Also runs smoke tests, does Sonatype "release" if applicable, and does Artifactory "promote" if applicable. |
|
Distribute documentation and static resources from tag |
|
Push the created commits to GitHub |
|
Push new maintenance branches if the release version was a GA release ( |
|
Post-release tasks |
|
Close JIRA tickets and GitHub release tickets. |
|
Create new release versions and tickets for upcoming version |
|
Trigger Antora documentation build (once all artifacts have arrived at the final Maven repository) |
|
Update versions in Projects Service. |
|
Create list of docs for release announcements |
|
Java and Maven versions are installed via SDKman during the Dockerfile build. See ci/java-tools.properties for further details.
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 [--commercial]
ProjectDependencies contains a per-project configuration of dependencies.
To check for dependency upgrades:
$ dependency check $trainIteration
This generates two files that report upgradable dependencies for Spring Data Build and Spring Data modules, respectively:
-
dependency-upgrade-build.properties-
Edit this file to specify the dependencies and their corresponding version to upgrade. Removing a line will omit that dependency upgrade.
-
Update
dependency.upgrade.countvalue. -
Apply dependency upgrades to Spring Data Build:
$ dependency upgrade $trainIteration
-
-
dependency-upgrade-modules.properties-
Open a ticket for each dependency upgrade in the corresponding module (sample).
-
Report store-specific dependencies to Spring Bootβs current upgrade ticket (sample).
To generate a dependency report:
$ dependency report $trainIteration
To upgrade Maven across all modules:
-
Check for the latest stable Maven version.
$ infra maven check $trainIteration
-
This generates a
dependency-upgrade-maven.propertiesfile that reports an upgradable version of Maven Wrapper, if it exists.
-
-
Apply Maven upgrade across all modules.
$ infra maven upgrade $trainIteration
To distribute ci/pipeline.properties from Spring Data Build across all modules:
$ infra distribute ci-properties $trainIteration
To distribute .github/workflows/project.yml from Spring Data Build across all modules:
$ infra distribute gh-workflow $trainIteration
Note that your GitHub token to authenticate against GitHub must have the workflow permission.
Resolve external links in reference documentation and print their status.
$ docs check-links $trainIteration
| Flag | Description |
|---|---|
--local |
read the documentation from disk (target module workspace directory) |
--project |
only check links of a specific project (eg. |
--report |
only report errors of the given categories (ERROR,REDIRECT,OK). Default is ALL |
$ docs check-links Turing GA --report ERROR
$ docs check-links Turing SR1 --local true --project redisResolve external links of any web page (remote/local) and print their status.
$ check-links $url
| Flag | Description |
|---|---|
--report |
only report errors of the given categories (ERROR,REDIRECT,OK). Default is ALL |
$ check-links file:///usr/git/spring-data-mongodb/target/site/reference/html/index.html --report ERROR,REDIRECTHappens typically when when tyring to resolve dependencies locally when running the preparation.
Solution: Check WSS and disable if running.
Happens typically after bumping the java version which does not necessarily trigger container recreation.
10:41:58 Error: No such object: springci/spring-data-release-tools:0.27Solution: alter the Dockerfile (eg. add a newline) and push things again. This will trigger the rebuild of the release tools container image.