|  | 
|  | 1 | +--- | 
|  | 2 | +category: announcement | 
|  | 3 | +permalink: /news/post-mortem-3.6.0.html | 
|  | 4 | +title: "Postmortem of Scala 3.6.0" | 
|  | 5 | +by: Scala Core Team | 
|  | 6 | +--- | 
|  | 7 | + | 
|  | 8 | +Incident Date: _October 18th, 2024_   | 
|  | 9 | +Nature of the incident: _Accidental release of 3.6.0-RC1 under 3.6.0 on Maven | 
|  | 10 | +Central_ | 
|  | 11 | + | 
|  | 12 | +On Friday, 18th of October 2024, during the publication process of **3.6.0-RC1** | 
|  | 13 | +an incident occurred that ended up in publishing Scala **3.6.0** instead. After | 
|  | 14 | +an internal investigation, we pinpointed the incident to be technical in nature. | 
|  | 15 | + | 
|  | 16 | +Within one hour of the issue being reported, the | 
|  | 17 | +[Scala Core Team](https://scala-lang.org/scala-core/) mitigated the problem by | 
|  | 18 | +starting the Scala **3.6.1** release – which is to be treated like an RC; it has | 
|  | 19 | +been available since Saturday 19th October. Scala **3.6.0** was abandoned and | 
|  | 20 | +promptly announced to the public as broken. | 
|  | 21 | + | 
|  | 22 | +We apologize to the Scala users for any inconvenience it might have caused. We | 
|  | 23 | +are working on better understanding what led up to this accident and ensuring it | 
|  | 24 | +doesn’t happen again. | 
|  | 25 | + | 
|  | 26 | +We invite you to follow the recommendations below and find out more details | 
|  | 27 | +about our findings of what happened and what is done to prevent future accidents | 
|  | 28 | +of this kind. | 
|  | 29 | + | 
|  | 30 | +## Recommendations | 
|  | 31 | + | 
|  | 32 | +Use version 3.5.2, the current stable Next version, recommended for general | 
|  | 33 | +use.   | 
|  | 34 | +Use version 3.6.1 as an RC version, to be used only for testing.   | 
|  | 35 | +DO NOT USE 3.6.0, not for testing, not for anything, it’s considered broken. | 
|  | 36 | + | 
|  | 37 | +We are working on 3.6.2 as the new stable release, which will be available | 
|  | 38 | +sometime in the second half of November. | 
|  | 39 | + | 
|  | 40 | +## How does it affect users? | 
|  | 41 | + | 
|  | 42 | +Scala 3.6.0 is a broken release \- it should never be used by users of Scala. | 
|  | 43 | +The results of the compilation might not be consumable by stable versions of the | 
|  | 44 | +compiler or TASTy based tooling.   | 
|  | 45 | +Tooling that automatically uses the latest available version of Scala will use | 
|  | 46 | +the hot-fix release 3.6.1, which should be treated as a Release Candidate | 
|  | 47 | +version. We don’t encourage most users to upgrade yet, unless for testing | 
|  | 48 | +purposes. Instead, use the stable 3.5.2 and wait to upgrade until 3.6.2 is out. | 
|  | 49 | + | 
|  | 50 | +## What happened? | 
|  | 51 | + | 
|  | 52 | +During the publication of Scala **3.6.0-RC1** to the Sonatype Maven repository, | 
|  | 53 | +a mistake occurred and we released **a misconfigured 3.6.0** instead. As a | 
|  | 54 | +result, the released version of the compiler produces TASTy files in the | 
|  | 55 | +experimental version that cannot be consumed by stable TASTy consumers (e.g. the | 
|  | 56 | +Scala compiler, tasty-query, Scaladoc). Setting the TASTy version to an | 
|  | 57 | +experimental one is a standard procedure when releasing a new release candidate | 
|  | 58 | +of a minor version of Scala 3. | 
|  | 59 | + | 
|  | 60 | +## What immediate steps were taken? | 
|  | 61 | + | 
|  | 62 | +On the evening of Friday the 18th of October 2024 the internal compiler team was | 
|  | 63 | +informed of the erroneous release and the following immediate steps were taken: | 
|  | 64 | + | 
|  | 65 | +- We announced on social media that Scala 3.6.0 was released unintentionally and | 
|  | 66 | +  is discouraged from being used. | 
|  | 67 | +- We prevented `scala-steward` from automatically upgrading repositories using | 
|  | 68 | +  Scala Next to the 3.6.x line. | 
|  | 69 | +- We followed up with a hotfix release in the form of Scala 3.6.1 on the | 
|  | 70 | +  following day. | 
|  | 71 | + | 
|  | 72 | +## Why did we need 3.6.1? | 
|  | 73 | + | 
|  | 74 | +Some tools in the Scala ecosystem can refer to the latest stable Scala version | 
|  | 75 | +that’s been published on Maven Central. Those include: | 
|  | 76 | + | 
|  | 77 | +- Scala CLI / the `scala` runner (via `-S 3` from the command line or with the | 
|  | 78 | +  `//> using scala 3` using directive) | 
|  | 79 | +- coursier (with `cs setup` and `cs install scala` sub-commands) | 
|  | 80 | +- potentially other tooling integrating with `coursier` | 
|  | 81 | + | 
|  | 82 | +We were concerned Scala users might use this unknowingly broken version of the | 
|  | 83 | +compiler to produce artifacts with the experimental version of TASTy. In | 
|  | 84 | +particular, we wanted to prevent publishing Scala libraries from being published | 
|  | 85 | +to the (immutable) Maven repository using a broken Scala release. It could also | 
|  | 86 | +potentially affect applications using Scala 3.6.0 that would try to use | 
|  | 87 | +libraries produced by Scala 3.6.1 or later. | 
|  | 88 | + | 
|  | 89 | +We decided to publish Scala 3.6.1 as a follow-up ASAP so that the most recent | 
|  | 90 | +version doesn’t include the experimental TASTy flag nor RC settings. With 3.6.1 | 
|  | 91 | +we ensured tooling will, at the very least, refer to a Scala version that | 
|  | 92 | +actually could be considered reasonably stable. | 
|  | 93 | + | 
|  | 94 | +We don’t yet encourage users to upgrade to Scala 3.6.1 on their own, except for | 
|  | 95 | +testing purposes. Users should wait with upgrades until a future announcement. | 
|  | 96 | +For now we advise users to stay on Scala 3.5.2 until further notice. | 
|  | 97 | + | 
|  | 98 | +## Why did it happen? | 
|  | 99 | + | 
|  | 100 | +The accidental release under the incorrect version happened due to a combination | 
|  | 101 | +of multiple factors: | 
|  | 102 | + | 
|  | 103 | +- Scala 3 uses an `sbt` plugin to automatically release artifacts to Sonatype | 
|  | 104 | +  Maven repositories. The automation happens without manual confirmation of the | 
|  | 105 | +  release. This factor prevented us from auditing published artifacts and | 
|  | 106 | +  removing the artifacts from the staging repository. Removing artifacts from | 
|  | 107 | +  Maven Central after they’ve been published is also essentially impossible. | 
|  | 108 | +- We introduced changes to the algorithm for calculating versions of the | 
|  | 109 | +  compiler to mitigate problems with creating `.msi` installer files. As the | 
|  | 110 | +  change did not alter SNAPSHOT/NIGHTLY behavior, we did not detect the issue in | 
|  | 111 | +  time. We now realize similar changes require extra testing procedures, which | 
|  | 112 | +  will be implemented as an improvement. The change was added in | 
|  | 113 | +  [scala3\#21011](https://github.com/scala/scala3/pull/21011). | 
|  | 114 | +- The change introducing the issue was merged on the 11th of July. Now, three | 
|  | 115 | +  months later, at the time of the release the side effects were not properly | 
|  | 116 | +  considered as in the meantime there was a change in staff coupled with | 
|  | 117 | +  insufficient documentation. | 
|  | 118 | +- We experienced unrelated downtime on the side of our infrastructure, which | 
|  | 119 | +  delayed the (as it was meant to be) release of 3.6.0-RC1 from Wednesday 16th | 
|  | 120 | +  to Friday 18th of October. Given that it was an RC, we continued the queued | 
|  | 121 | +  job on Friday. We now realize we should have postponed it further until Monday | 
|  | 122 | +  21st. Resolving the incident would have been a lot easier for the Core and | 
|  | 123 | +  Compiler teams on a weekday rather than on a Friday night. | 
|  | 124 | + | 
|  | 125 | +## How do we stop it from repeating? | 
|  | 126 | + | 
|  | 127 | +In conclusion, after all that we learned from this incident, we are introducing | 
|  | 128 | +the following processes as preventative measures: | 
|  | 129 | + | 
|  | 130 | +- Extra checks to the release procedure to ensure the correct versioning of | 
|  | 131 | +  published Scala artifacts. | 
|  | 132 | +- Any changes related to either release scripts or compiler versioning will be | 
|  | 133 | +  tested using a custom Maven repository before the start of a public release. | 
|  | 134 | +- Additional, manual approval of published artifacts to the staging Maven | 
|  | 135 | +  repository. | 
|  | 136 | +- We will be mindful of the day of week for releases, and avoid Thursdays and | 
|  | 137 | +  Fridays. | 
|  | 138 | +- We will ensure that every change associated with the release process is well | 
|  | 139 | +  documented internally. | 
0 commit comments