From 3a767ce2b882f19c980b5efd4913734df76fe25b Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Tue, 29 Jul 2025 15:52:52 +0200 Subject: [PATCH 01/10] Describe the release procedures --- RELEASE.md | 220 ++++++++++++++++++++++++++++++++++++ UPDATE_TIMEZONE_DATABASE.md | 95 ++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 RELEASE.md create mode 100644 UPDATE_TIMEZONE_DATABASE.md diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 000000000..59d3625d1 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,220 @@ +# kotlinx-datetime release checklist + +## Full release + +To release `kotlinx-datetime`: + +1. Make sure there are no updates to either Windows/IANA timezone name mapping + or to the IANA timezone database that we publish. + * + checks this automatically every night. + * Follow the procedure in + [UPDATE_TIMEZONE_DATABASE.md](UPDATE_TIMEZONE_DATABASE.md) + if there are updates or to check for updates manually. + +2. Check out the `master` branch: + > `git checkout master` + +3. Retrieve the most recent version of it: + > `git pull` + +4. Search & replace `` with `` in + * Documentation: [README.md](README.md) + * [gradle.properties](gradle.properties) + * **NOT** [CHANGES.md](CHANGES.md)! + +5. Write release notes in [CHANGES.md](CHANGES.md): + * Follow the established style from the earlier release notes. + * Write each change on a single line (don't wrap with a caret return). + * Look through the commit messages since the previous release: + > `git log v..` + + Example: `git log v0.7.0..` lists the commits made since 0.7.0. + +6. Create a new branch for this release: + > `git checkout -b version-` + +7. Commit and push the changes: + > `git commit -a -m 'Version '` + > `git push -u origin version-` + +8. Open a GitHub pull request and review it. + Wait for the CI to finish. + +### Publishing a normal release with the compatibility artifact + +For the nearest future, **follow this subsection**. +When we no longer have the compatibility artifact, we'll remove the subsection. + +9. Create a new branch from `version-`: + > `git checkout -b version--compat version-` + +10. Replace `` with `-0.6.x-compat` + in [gradle.properties](gradle.properties). + +11. Commit and push the changes: + > `git commit -a -m 'Version , compatibility artifact` + > `git push -u origin version--compat` + +12. Create another branch from `version-`: + > `git checkout -b version--normal version-` + +13. Merge the `dkhalanskyjb/remove-deprecated-instant` branch: + > `git merge dkhalanskyjb/remove-deprecated-instant` + +14. Push the changes: + > `git push -u origin version--normal` + +15. Double-check the results. + The `normal` branch should be different from `compat` in having removed + a lot of code related to `kotlinx.datetime.Instant` and + `kotlinx.datetime.Clock` and having a `version-` in + `gradle.properties` instead of `version--0.6.x-compat`. + > `git diff version--compat version--normal` + +16. In TeamCity, start deployment of `version--compat` by running the + `Deployment/Start Deployment [RUN THIS ONE]` configuration: + . + Use the `Run custom build` button. + - In the `Changes` tab, select the build branch `version--compat`. + - In the `Parameters` tab, set the parameters: + * `Version` to `-0.6.x-compat`. + * Leave `VersionSuffix` blank. + * Leave `ZoneInfoVersion` blank. + +17. Start deployment of `version--normal`. + - In the `Changes` tab, select the build branch `version--normal`. + - In the `Parameters` tab, set the parameters: + * `Version` to ``. + * Leave `VersionSuffix` blank. + * Leave `ZoneInfoVersion` blank. + +18. Wait for the *eight* deployment tasks to finish: + for both `version--normal` and `version--compat`, + `Start Deployment [RUN THIS ONE]`, `DeployCentral (Mac OS X)`, + `Deploy To Central`, and `Deploy ZoneInfo To Central` need to succeed. + +19. Notify the release facilitator. + Publish the release cooperatively. + The artifacts to publish are: + - `kotlinx-datetime` version ``. + - `kotlinx-datetime` version `-0.6.x-compat`. + - `kotlinx-datetime-zoneinfo` version `-spi.`. + *NOT* `-spi.-0.6.x-compat`! + +20. Merge `version-` into `master`: + > `git checkout master` + > `git merge version-` + > `git push` + +21. In [GitHub](https://github.com/Kotlin/kotlinx-datetime): + * Create a release named `v`, creating the `v` tag. + * Cut & paste lines from [CHANGES.md](CHANGES.md) into the description. + +22. Set the `latest-version` branch to `v`. + > `git checkout latest-release` + > `git merge --ff-only master` + > `git push` + +23. Announce the new release in [Slack](https://kotlinlang.slack.com). + +24. Propose the website documentation update: + * In the `JetBrains/kotlin-web-site` repository: + - Update `dateTimeVersion` to `` in + . + - Update `KOTLINX_DATETIME_RELEASE_LABEL` to `v` in + . + - Create a pull request with the changes. + * In the `JetBrains/kotlin-compiler-server` repository: + - Update `kotlinx-datetime` to `` in + + - Create a pull request with the changes. + +25. Remove the `version--normal`, `version--compat`, and + `version-` branches. + +### Publishing a normal release + +9. In TeamCity, start deployment of `version-` by running the + `Deployment/Start Deployment [RUN THIS ONE]` configuration: + . + Use the `Run custom build` button. + - In the `Changes` tab, select the build branch `version-`. + - In the `Parameters` tab, set the parameters: + * `Version` to ``. + * Leave `VersionSuffix` blank. + * Leave `ZoneInfoVersion` blank. + +10. Wait for the *four* deployment tasks to finish: + `Start Deployment [RUN THIS ONE]`, `DeployCentral (Mac OS X)`, + `Deploy To Central`, and `Deploy ZoneInfo To Central` need to succeed. + +11. Notify the release facilitator. + Publish the release cooperatively. + The artifacts to publish are: + - `kotlinx-datetime` version ``. + - `kotlinx-datetime-zoneinfo` version `-spi.`. + +12. Merge `version-` into `master`: + > `git checkout master` + > `git merge version-` + > `git push` + +13. In [GitHub](https://github.com/Kotlin/kotlinx-datetime): + * Create a release named `v`, creating the `v` tag. + * Cut & paste lines from [CHANGES.md](CHANGES.md) into the description. + +14. Set the `latest-version` branch to `v`. + > `git checkout latest-release` + > `git merge --ff-only master` + > `git push` + +15. Announce the new release in [Slack](https://kotlinlang.slack.com). + +16. Propose the website documentation update: + * In the `JetBrains/kotlin-web-site` repository: + - Update `dateTimeVersion` to `` in + . + - Update `KOTLINX_DATETIME_RELEASE_LABEL` to `v` in + . + - Create a pull request with the changes. + * In the `JetBrains/kotlin-compiler-server` repository: + - Update `kotlinx-datetime` to `` in + + - Create a pull request with the changes. + +17. Remove the `version-` branch. + +## Publishing just the timezone database + +> TODO: this section needs to be updated when either Kotlin/Wasm/WASI +reaches stability or we start publishing the timezone database for other +platforms. +Then, it will not be enough to just publish the database for the latest version, +we will need to publish the timezone database for the older `kotlinx-datetime` +versions as well. + +1. Update the IANA timezone database as specified in + [UPDATE_TIMEZONE_DATABASE.md](UPDATE_TIMEZONE_DATABASE.md). + `tzdb-` should now contain an up-to-date timezone database + that wasn't yet published. + +2. In TeamCity, start deployment of `tzdb-` by running the + `Deployment/Start Deployment [RUN THIS ONE]` configuration: + . + Use the `Run custom build` button. + - In the `Changes` tab, select the build branch `tzdb-`. + - In the `Parameters` tab, set the parameters: + * `Version` to the latest published `kotlinx-datetime` version. + Example: `0.7.1`. + * Leave `VersionSuffix` blank. + * Leave `ZoneInfoVersion` blank. + +3. Wait for the *four* deployment tasks to finish: + `Start Deployment [RUN THIS ONE]`, `DeployCentral (Mac OS X)`, + `Deploy To Central`, and `Deploy ZoneInfo To Central` need to succeed. + +4. Notify the release facilitator. + Publish the release cooperatively. + The artifact to publish is + `kotlinx-datetime-zoneinfo` version `-spi.`. diff --git a/UPDATE_TIMEZONE_DATABASE.md b/UPDATE_TIMEZONE_DATABASE.md new file mode 100644 index 000000000..d0f1d9477 --- /dev/null +++ b/UPDATE_TIMEZONE_DATABASE.md @@ -0,0 +1,95 @@ +# Updating the timezone database + +If the build configuration +fails, the timezone databases bundled with `kotlinx-datetime` need updating. +This means either the IANA timezone database artifact provided for Wasm/WASI, +the Windows/IANA timezone name mapping, or both. + +## Updating the IANA timezone database artifact + +We publish a separate artifact for Wasm/WASI that includes +the IANA timezone database, as Wasm/WASI does not provide access to the +timezone database out of the box. +This means that whenever a new version of the timezone database gets published, +we need to release a new version of the artifact. + +1. Ensure you have no changes in `timezones/full/tzdb/`: + > `git status timezones/full/tzdb/` + +2. Check out `master`, make sure it's up to date: + > `git checkout master; git pull` + +3. Visit and note the latest available tag + (``). + +4. Search & replace `` with ``. + - In `gradle.properties`, replace `tzdbVersion=` + with `tzdbVersion=`. + - In `README.md`, + replace `` in the Gradle configuration snippet + with ``. + +5. Call the `:kotlinx-datetime-zoneinfo:tzdbDownloadAndCompile` Gradle task: + > `./gradlew tzdbDownloadAndCompile` + +6. Create a new branch: + > `git checkout -b tzdb-` + +7. Commit and push the changes: + > `git commit timezones/full/tzdb -m 'Use IANA tzdb '` + > `git push -u origin tzdb-` + +8. Create a GitHub pull request and review the changes. + +9. Wait for the CI build to pass. + +10. Follow the procedure for publishing a timezone database-only release + (see [RELEASE.md](RELEASE.md)). + +11. Squash-and-merge the branch. + +## Updating Windows/IANA timezone name mappings + +Windows uses its own convention for timezone names. +We store internally the mapping between IANA timezone names +(which we use for all platforms as a standard) and the +Windows-specific names encountered in the Windows registry. + +1. Stash the changes you have: + > `git stash` + +2. Check out `master`, make sure it's up to date: + > `git checkout master; git pull` + +3. Call the `:kotlinx-datetime:downloadWindowsZonesMapping` Gradle task: + > `./gradlew downloadWindowsZonesMapping` + +4. If the task succeeds, the library already has the most up-to-date version + of the name mapping. + No actions are necessary. + +5. If the task fails, it should say + `The new mappings were written to the filesystem.`. + Verify this by checking the difference: + > `git diff` + +6. Create a new branch: + > `git checkout -b update-windows-tz-names` + +7. Commit and push the changes: + > `git commit -a -m "Update the Windows/IANA timezone name mappings"` + > `git push -u origin update-windows-tz-names` + +8. Create a GitHub pull request and review the changes. + Normally, the changes are small: only a few timezone names are added, + or some deprecated timezone names are removed. + Verify that this is the case. + +9. Wait for the CI build to pass. + +10. Squash-and-merge the changes and remove the branch on GitHub. + Then, also remove the branch locally: + > `git checkout master; git branch -D update-windows-tz-names` + +11. Follow the procedure for publishing a new release + (see [RELEASE.md](RELEASE.md)) if new timezone names were added. From 93598990dfd08dd3d42cbaf05fec69c5461195ae Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Mon, 9 Mar 2026 11:23:22 +0100 Subject: [PATCH 02/10] Double-check that the timezone database update notifier works --- UPDATE_TIMEZONE_DATABASE.md | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/UPDATE_TIMEZONE_DATABASE.md b/UPDATE_TIMEZONE_DATABASE.md index d0f1d9477..c7be1f0a8 100644 --- a/UPDATE_TIMEZONE_DATABASE.md +++ b/UPDATE_TIMEZONE_DATABASE.md @@ -36,17 +36,24 @@ we need to release a new version of the artifact. > `git checkout -b tzdb-` 7. Commit and push the changes: - > `git commit timezones/full/tzdb -m 'Use IANA tzdb '` + > `git commit timezones/*/tzdb gradle.properties README.md -m 'Use IANA tzdb '` > `git push -u origin tzdb-` 8. Create a GitHub pull request and review the changes. -9. Wait for the CI build to pass. +9. Start the "Check for timezone database updates" CI build + with the `tzdb-` branch. -10. Follow the procedure for publishing a timezone database-only release +10. Wait for both the usual CI build and the + "Check for timezone database updates" one to pass. + +11. Follow the procedure for publishing a timezone database-only release (see [RELEASE.md](RELEASE.md)). -11. Squash-and-merge the branch. +12. Squash-and-merge the branch. + +13. Start the "Check for timezone database updates" TeamCity build + and make sure it passes. ## Updating Windows/IANA timezone name mappings @@ -85,11 +92,19 @@ Windows-specific names encountered in the Windows registry. or some deprecated timezone names are removed. Verify that this is the case. -9. Wait for the CI build to pass. +9. Start the "Check for timezone database updates" CI build + with the `tzdb-` branch. + +10. Wait for both the usual CI build and the + "Check for timezone database updates" one to pass. -10. Squash-and-merge the changes and remove the branch on GitHub. +11. Squash-and-merge the changes and remove the branch on GitHub. Then, also remove the branch locally: > `git checkout master; git branch -D update-windows-tz-names` -11. Follow the procedure for publishing a new release +12. Follow the procedure for publishing a new release (see [RELEASE.md](RELEASE.md)) if new timezone names were added. + +13. Start the "Check for timezone database updates" TeamCity build + and make sure it passes. + From 2574edceb272c6ba34f1815a252010431ba18022 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Mon, 9 Mar 2026 11:39:25 +0100 Subject: [PATCH 03/10] Work around @tubular/time-tzdb not knowing how to remove files --- UPDATE_TIMEZONE_DATABASE.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/UPDATE_TIMEZONE_DATABASE.md b/UPDATE_TIMEZONE_DATABASE.md index c7be1f0a8..01d203ca2 100644 --- a/UPDATE_TIMEZONE_DATABASE.md +++ b/UPDATE_TIMEZONE_DATABASE.md @@ -29,30 +29,33 @@ we need to release a new version of the artifact. replace `` in the Gradle configuration snippet with ``. -5. Call the `:kotlinx-datetime-zoneinfo:tzdbDownloadAndCompile` Gradle task: +5. Remove the existing timezone database: + > `rm -r timezones/*/tzdb` + +6. Call the `:kotlinx-datetime-zoneinfo:tzdbDownloadAndCompile` Gradle task: > `./gradlew tzdbDownloadAndCompile` -6. Create a new branch: +7. Create a new branch: > `git checkout -b tzdb-` -7. Commit and push the changes: - > `git commit timezones/*/tzdb gradle.properties README.md -m 'Use IANA tzdb '` +8. Commit and push the changes: + > `git commit timezones/*/tzdb gradle.properties README.md -m 'Use IANA tzdb ';` > `git push -u origin tzdb-` -8. Create a GitHub pull request and review the changes. +9. Create a GitHub pull request and review the changes. -9. Start the "Check for timezone database updates" CI build - with the `tzdb-` branch. +10. Start the "Check for timezone database updates" CI build + with the `tzdb-` branch. -10. Wait for both the usual CI build and the +11. Wait for both the usual CI build and the "Check for timezone database updates" one to pass. -11. Follow the procedure for publishing a timezone database-only release +12. Follow the procedure for publishing a timezone database-only release (see [RELEASE.md](RELEASE.md)). -12. Squash-and-merge the branch. +13. Squash-and-merge the branch. -13. Start the "Check for timezone database updates" TeamCity build +14. Start the "Check for timezone database updates" TeamCity build and make sure it passes. ## Updating Windows/IANA timezone name mappings From 6fdf817140ce447deffdb048d2ed605b3f4c095e Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy <52952525+dkhalanskyjb@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:29:38 +0200 Subject: [PATCH 04/10] Update references from CHANGES.md to CHANGELOG.md --- RELEASE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 59d3625d1..7ecbce423 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -21,9 +21,9 @@ To release `kotlinx-datetime`: 4. Search & replace `` with `` in * Documentation: [README.md](README.md) * [gradle.properties](gradle.properties) - * **NOT** [CHANGES.md](CHANGES.md)! + * **NOT** [CHANGELOG.md](CHANGELOG.md)! -5. Write release notes in [CHANGES.md](CHANGES.md): +5. Write release notes in [CHANGELOG.md](CHANGELOG.md): * Follow the established style from the earlier release notes. * Write each change on a single line (don't wrap with a caret return). * Look through the commit messages since the previous release: @@ -109,7 +109,7 @@ When we no longer have the compatibility artifact, we'll remove the subsection. 21. In [GitHub](https://github.com/Kotlin/kotlinx-datetime): * Create a release named `v`, creating the `v` tag. - * Cut & paste lines from [CHANGES.md](CHANGES.md) into the description. + * Cut & paste lines from [CHANGELOG.md](CHANGELOG.md) into the description. 22. Set the `latest-version` branch to `v`. > `git checkout latest-release` @@ -162,7 +162,7 @@ When we no longer have the compatibility artifact, we'll remove the subsection. 13. In [GitHub](https://github.com/Kotlin/kotlinx-datetime): * Create a release named `v`, creating the `v` tag. - * Cut & paste lines from [CHANGES.md](CHANGES.md) into the description. + * Cut & paste lines from [CHANGELOG.md](CHANGELOG.md) into the description. 14. Set the `latest-version` branch to `v`. > `git checkout latest-release` From ab1f54d0f709912087b06f7ebdfc1affa2047867 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy <52952525+dkhalanskyjb@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:40:03 +0200 Subject: [PATCH 05/10] Change git log command for release notes Updated instructions for viewing commit logs since the last release. --- RELEASE.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 7ecbce423..7253cdc9a 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -27,9 +27,7 @@ To release `kotlinx-datetime`: * Follow the established style from the earlier release notes. * Write each change on a single line (don't wrap with a caret return). * Look through the commit messages since the previous release: - > `git log v..` - - Example: `git log v0.7.0..` lists the commits made since 0.7.0. + > `git log origin/latest-release..` 6. Create a new branch for this release: > `git checkout -b version-` From a14904ed520171b7f428701d16822afbb6815f82 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Fri, 24 Apr 2026 14:00:08 +0200 Subject: [PATCH 06/10] Update with the latest procedure --- RELEASE.md | 92 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 7253cdc9a..4356ab414 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -71,34 +71,38 @@ When we no longer have the compatibility artifact, we'll remove the subsection. > `git diff version--compat version--normal` 16. In TeamCity, start deployment of `version--compat` by running the - `Deployment/Start Deployment [RUN THIS ONE]` configuration: - . + `Deployment/Deploy [RUN THIS ONE]` configuration: + . Use the `Run custom build` button. - In the `Changes` tab, select the build branch `version--compat`. - In the `Parameters` tab, set the parameters: * `Version` to `-0.6.x-compat`. - * Leave `VersionSuffix` blank. - * Leave `ZoneInfoVersion` blank. + * `Artifacts to publish` to `zoneinfo only`. 17. Start deployment of `version--normal`. - In the `Changes` tab, select the build branch `version--normal`. - In the `Parameters` tab, set the parameters: * `Version` to ``. - * Leave `VersionSuffix` blank. - * Leave `ZoneInfoVersion` blank. - -18. Wait for the *eight* deployment tasks to finish: - for both `version--normal` and `version--compat`, - `Start Deployment [RUN THIS ONE]`, `DeployCentral (Mac OS X)`, - `Deploy To Central`, and `Deploy ZoneInfo To Central` need to succeed. - -19. Notify the release facilitator. - Publish the release cooperatively. - The artifacts to publish are: - - `kotlinx-datetime` version ``. - - `kotlinx-datetime` version `-0.6.x-compat`. - - `kotlinx-datetime-zoneinfo` version `-spi.`. - *NOT* `-spi.-0.6.x-compat`! + * `Artifacts to publish` to `all`. + +18. Wait for the two `Deployment/Upload deployment to central portal` + tasks to finish, one for `version--normal` and + one for `version--compat`: + . + +19. Click on the completed `Deployment/Upload deployment to central portal` + builds, check their `Artifacts` tabs. + They should have `deployment-.zip` and `deployment--0.6.x-compat.zip`, + correspondingly. + Check the contents of these archives. + The non-compat archive should contain `kotlinx-datetime` with + version ``, as well as the zoneinfo `-spi.`. + The compat archive should contain `kotlinx-datetime` with + version `-0.6.x-compat`, but *NO* zoneinfo + `-spi.-0.6.x-compat`! + If all of this matches, approve the builds in + `Deployment/Publish deployment`: + . 20. Merge `version-` into `master`: > `git checkout master` @@ -134,24 +138,23 @@ When we no longer have the compatibility artifact, we'll remove the subsection. ### Publishing a normal release 9. In TeamCity, start deployment of `version-` by running the - `Deployment/Start Deployment [RUN THIS ONE]` configuration: - . + `Deployment/Deploy [RUN THIS ONE]` configuration: + . Use the `Run custom build` button. - In the `Changes` tab, select the build branch `version-`. - In the `Parameters` tab, set the parameters: * `Version` to ``. - * Leave `VersionSuffix` blank. - * Leave `ZoneInfoVersion` blank. + * `Artifacts to publish` to `all`. -10. Wait for the *four* deployment tasks to finish: - `Start Deployment [RUN THIS ONE]`, `DeployCentral (Mac OS X)`, - `Deploy To Central`, and `Deploy ZoneInfo To Central` need to succeed. +10. Wait for the `Deployment/Upload deployment to central portal` task to finish: + . -11. Notify the release facilitator. - Publish the release cooperatively. - The artifacts to publish are: - - `kotlinx-datetime` version ``. - - `kotlinx-datetime-zoneinfo` version `-spi.`. +11. Click on the completed `Deployment/Upload deployment to central portal` + build, check its `Artifacts` tab, the `deployment-.zip` archive. + It should contain `kotlinx-datetime` for all supported targets with + version ``, as well as the zoneinfo `-spi.`. + If this matches, approve the build in `Deployment/Publish deployment`: + . 12. Merge `version-` into `master`: > `git checkout master` @@ -198,21 +201,20 @@ versions as well. that wasn't yet published. 2. In TeamCity, start deployment of `tzdb-` by running the - `Deployment/Start Deployment [RUN THIS ONE]` configuration: - . + `Deployment/Deploy [RUN THIS ONE]` configuration: + . Use the `Run custom build` button. - In the `Changes` tab, select the build branch `tzdb-`. - In the `Parameters` tab, set the parameters: * `Version` to the latest published `kotlinx-datetime` version. - Example: `0.7.1`. - * Leave `VersionSuffix` blank. - * Leave `ZoneInfoVersion` blank. - -3. Wait for the *four* deployment tasks to finish: - `Start Deployment [RUN THIS ONE]`, `DeployCentral (Mac OS X)`, - `Deploy To Central`, and `Deploy ZoneInfo To Central` need to succeed. - -4. Notify the release facilitator. - Publish the release cooperatively. - The artifact to publish is - `kotlinx-datetime-zoneinfo` version `-spi.`. + Example: `0.8.0`. + * `Artifacts to publish` to `zoneinfo`. + +3. Wait for the `Deployment/Upload deployment to central portal` task to finish: + . + +4. Click on the completed `Deployment/Upload deployment to central portal` + build, check its `Artifacts` tab, the `deployment-.zip` archive. + It should contain the zoneinfo `-spi.` and nothing else. + If this matches, approve the build in `Deployment/Publish deployment`: + . From 917d455b8cedfd6a18c2d9b81a624f75874814b7 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Thu, 30 Apr 2026 12:08:44 +0200 Subject: [PATCH 07/10] Fix the incorrect instruction --- RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index 4356ab414..f017f1af9 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -77,7 +77,7 @@ When we no longer have the compatibility artifact, we'll remove the subsection. - In the `Changes` tab, select the build branch `version--compat`. - In the `Parameters` tab, set the parameters: * `Version` to `-0.6.x-compat`. - * `Artifacts to publish` to `zoneinfo only`. + * `Artifacts to publish` to `core only`. 17. Start deployment of `version--normal`. - In the `Changes` tab, select the build branch `version--normal`. From b98f3ba92593f76e07c62c5eb3ab76151dc887a2 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Thu, 30 Apr 2026 12:16:07 +0200 Subject: [PATCH 08/10] Describe creating tags for the compatibility release --- RELEASE.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index f017f1af9..a280a7721 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -110,7 +110,8 @@ When we no longer have the compatibility artifact, we'll remove the subsection. > `git push` 21. In [GitHub](https://github.com/Kotlin/kotlinx-datetime): - * Create a release named `v`, creating the `v` tag. + * Create a release named `v`, creating the `v` tag, + based off of the `version--normal` branch. * Cut & paste lines from [CHANGELOG.md](CHANGELOG.md) into the description. 22. Set the `latest-version` branch to `v`. @@ -118,9 +119,14 @@ When we no longer have the compatibility artifact, we'll remove the subsection. > `git merge --ff-only master` > `git push` -23. Announce the new release in [Slack](https://kotlinlang.slack.com). +23. Create the `v-0.6.x-compat` tag based off of the + `version--compat` branch: + > `git tag v-0.6.x-compat version--compat` + > `git push --tags` + +24. Announce the new release in [Slack](https://kotlinlang.slack.com). -24. Propose the website documentation update: +25. Propose the website documentation update: * In the `JetBrains/kotlin-web-site` repository: - Update `dateTimeVersion` to `` in . @@ -132,7 +138,7 @@ When we no longer have the compatibility artifact, we'll remove the subsection. - Create a pull request with the changes. -25. Remove the `version--normal`, `version--compat`, and +26. Remove the `version--normal`, `version--compat`, and `version-` branches. ### Publishing a normal release From 5f7f11fc74c299e0c8b2c06756c75de0049f7f64 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy <52952525+dkhalanskyjb@users.noreply.github.com> Date: Mon, 4 May 2026 09:34:19 +0200 Subject: [PATCH 09/10] Fix a git command typo Co-authored-by: Filipp Zhinkin --- RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index a280a7721..b4e871ba5 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -51,7 +51,7 @@ When we no longer have the compatibility artifact, we'll remove the subsection. in [gradle.properties](gradle.properties). 11. Commit and push the changes: - > `git commit -a -m 'Version , compatibility artifact` + > `git commit -a -m 'Version , compatibility artifact'` > `git push -u origin version--compat` 12. Create another branch from `version-`: From 58f0b2516e7715d5ade36424ab048d48eed78770 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Mon, 4 May 2026 10:11:53 +0200 Subject: [PATCH 10/10] Cleanup --- RELEASE.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index b4e871ba5..610ca07c3 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -114,7 +114,7 @@ When we no longer have the compatibility artifact, we'll remove the subsection. based off of the `version--normal` branch. * Cut & paste lines from [CHANGELOG.md](CHANGELOG.md) into the description. -22. Set the `latest-version` branch to `v`. +22. Set the `latest-release` branch to `v`. > `git checkout latest-release` > `git merge --ff-only master` > `git push` @@ -168,7 +168,8 @@ When we no longer have the compatibility artifact, we'll remove the subsection. > `git push` 13. In [GitHub](https://github.com/Kotlin/kotlinx-datetime): - * Create a release named `v`, creating the `v` tag. + * Create a release named `v`, creating the `v` tag, + based off of the `master` branch. * Cut & paste lines from [CHANGELOG.md](CHANGELOG.md) into the description. 14. Set the `latest-version` branch to `v`. @@ -214,13 +215,15 @@ versions as well. - In the `Parameters` tab, set the parameters: * `Version` to the latest published `kotlinx-datetime` version. Example: `0.8.0`. - * `Artifacts to publish` to `zoneinfo`. + * `Artifacts to publish` to `zoneinfo only`. 3. Wait for the `Deployment/Upload deployment to central portal` task to finish: . 4. Click on the completed `Deployment/Upload deployment to central portal` - build, check its `Artifacts` tab, the `deployment-.zip` archive. + build, check its `Artifacts` tab, the `deployment-.zip` archive + (where `` is the latest published `kotlinx-datetime` version, + e.g. `0.8.0`). It should contain the zoneinfo `-spi.` and nothing else. If this matches, approve the build in `Deployment/Publish deployment`: .