Skip to content

Release Scala 2.13.18 #919

@lrytz

Description

@lrytz
SCALA_VER_BASE="2.13.18"
SCALA_VER_SUFFIX=""
SCALA_SHA=ae6ae4dd59cb90af62093cde52a292e5bd8bb7a8
DIST_SHA=e400c6284b53dd5bfc6df69398da8d6527270c46
SCALA_VER="2.13.18"

Key links:

N weeks before the release

  • Wind down PR queue. There has to be enough time after the last (non-trivial) PR is merged and the next phase. The core of the eco-system needs time to prepare for the final!
  • Triage scala/bug and scala/scala-dev tickets
  • Create next scala/scala milestone, move the magical "Merge to 2.13.x" description to it (so Scabot uses it as default for new PRs), move pending PRs
  • Create next scala/bug milestone, move pending issues
  • Create next scala/scala-dev milestone, move pending issues
  • Check PRs assigned to the milestone, also check WIP
  • Announce expected release date and current nightly "release candidate" (nightly sha-mangled version) at https://scala-ci.typesafe.com/artifactory/scala-integration/ on https://contributors.scala-lang.org/c/announcements
  • Also notify Scala Center advisory board members of the upcoming release, so they can help test if they want (Seth can handle this, if asked)

Release announcement / notes

  • Review merged PRs, make sure release-notes label is applied appropriately
  • PRs with release-notes label must have excellent title & description (title will be pasted literally in release note bullet list)
  • Draft release notes (PR and self-merge, so others can comment there rather than on the commits)
    • Starting point: gh api --paginate -X GET search/issues -f q='repo:scala/scala is:pull-request is:merged milestone:2.12.14 label:release-notes' -q '.items[] | " * \(.title) ([#\(.number)](\(.html_url)) by [@\(.user.login)](\(.user.html_url)))"'
  • On contributors thread, link to release note file and request feedback

N days before release

  • Announce no more PRs will be merged unless last-minute regressions are found. Re-iterate current nightly sha version for testing.
  • Community build: https://scala-ci.typesafe.com/view/scala-2.13.x/
  • Green nightly builds on GitHub Actions: https://github.com/scala/scala/actions/runs/19117739303
  • Check any merged PRs accidentally assigned to the next milestone in this branch, and re-assign them to this milestone
  • Merge in any older release branch
  • Check module versioning (is everything in versions.properties up to date?)
    • including make sure the version of scala-asm we're using is using latest ASM
  • On major release, bump PickleFormat version
  • Test on Akka customer codebase(s), if applicable
  • Close the scala/scala and scala/bug milestones

Stage! (point of soft no-return)

Once sufficient time for community testing has passed, it's time to stage the release!

We call this "soft" no-return because even staged artifacts can end up in local caches and cause confusion.

Release! (point of hard no-return)

"Hard" no-return because Maven Central is forever. Also, S3 uploads should be treated as forever (S3 buckets can be changed, but it can takes days to become consistent). Tags, too, should be treated as forever, even though they can technically be deleted and re-pushed.

  • Push scala/scala tag: git push https://github.com/scala/scala.git v$SCALA_VER
  • Push scala/scala-dist tag: git push https://github.com/scala/scala-dist.git v$SCALA_VER
  • Promote staging repos on https://central.sonatype.com/publishing

Find the release on Maven Central

After everything is on Maven Central and the GitHub release

Prepare downstream

Wait for downstream

Before proceeding any further, wait for the ecosystem to catch up.

  • Downstream publishing:
    • Wait for Scala.js to support the new release
    • Wait for Scala Native to support the new release
    • Wait for scalameta to publish
    • Wait for scalafix to publish
    • Wait for Metals to publish
    • Wait for kind-projector to publish
    • Wait for scoverage to publish
    • Wait for scala-debug-adapter to publish
  • Downstream signoffs:
    • Ask the Scala Center to sign off (Seb)
    • Ask VirtusLab to sign off (Tomasz)

We have promised to wait 48 non-weekend hours, minimum.

If there are delays downstream, at some point it may make sense to go ahead and announce anyway, since news of the release will already be spreading in the community.

Announcements

Afterwards

  • sbt: if it's a 2.12.x release, open PR updating version
  • Scala 3: open PR updating version:
  • Scastie: open PR adding new version (modeled on Add support for Scala 2.13.7 scalacenter/scastie#538)
    • note that the PR won't be mergeable until kind-projector has published; and if kind-projector's version number has changed, ScalaTarget.scala will need updating
  • If it's a major release:
    • Update latestSpecVersion in spec/_config.yml on the old branch, so that spec is marked as no longer current
    • Ditto for the nightly build and spec links in _data/footer.yml and _data/doc-nav-header.yml on docs.scala-lang.org
  • (Akka) Fortify:
    • Publish scala-fortify-plugin
    • Update scala-fortify
    • Update scala-fortify-docs
  • (Akka) Notify eng-updates
  • Create a scala/scala PR to:
    • update starr.version in /versions.properties
    • update Global / baseVersion in /build.sbt
    • update mimaReferenceVersion in /project/MimaFilters.scala
    • clear out mimaFilters in /project/MimaFilters.scala, except the one(s) labeled "KEEP"
    • spec/_config.yml, if it's a major release
  • Once that PR is merged and a new nightly has published, ./advance scala (and PR it) in the community build
  • Update https://contributors.scala-lang.org thread
  • Create https://contributors.scala-lang.org thread for the next release

You're done!

  • Close this ticket and close the scala-dev milestone

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions