Skip to content

Releases: sbt/sbt

1.9.3

24 Jul 06:19
v1.9.3
Compare
Choose a tag to compare

Actionable diagnostics (aka quickfix)

Actionable diagnostics, or quickfix, is an area in Scala tooling that's been getting attention since Chris Kipp presented it in the March 2023 Tooling Summit. Chris has written the roadmap and sent sbt/sbt#7242 that kickstarted the effort, but now there's been steady progress in Build Server Protocol, Dotty, Scala 2.13, IntelliJ, Zinc, etc. Metals 1.0.0, for example, is now capable of surfacing code actions as a quickfix.

sbt 1.9.3 adds a new interface called AnalysisCallback2 to relay code actions from the compiler(s) to Zinc's Analysis file. Future version of Scala 2.13.x (and hopefully Scala 3) will release with proper code actions, but as a demo I've implemented a code action for procedure syntax usages even on current Scala 2.13.11 with -deprecation flag.

This was contributed by Eugene Yokota (@eed3si9n) in zinc#1226. Special thanks to @lrytz for identifying this issue in zinc#1214.

other updates

  • Adds M1/M2/Aarch64 build of sbtn into the installer by @julienrf in #7329
  • Fixes scripted tests timing out after 5 minutes by @eed3si9n in #7336

Full Changelog: v1.9.2...v1.9.3

1.9.2

10 Jul 02:42
v1.9.2
Compare
Choose a tag to compare

Fix

Full Changelog: v1.9.1...v1.9.2

1.9.1

26 Jun 05:41
v1.9.1
Compare
Choose a tag to compare

Change to Scala CLA

sbt 1.9.1 is the first release of sbt after changing to Scala CLA in #7306 etc. A number of contributors to sbt voiced concerns about donating our work to Lightbend after 2022, and Lightbend, Scala Center, and I agreed on changing the contributor license agreement such that the copyright would tranfer to Scala Center, a non-profit organization. sbt and its subcompoments, including Zinc, will remain available under Apache v2 license.

Updates

  • Fixes "Repository for publishing is not specified" error even when publish / skip is set true by @adpi2 in #7295
  • Fixes scripted test not working when sbtPluginPublishLegacyMavenStyle := false by @adpi2 in #7286
  • Fixes copy-pasting to sbt console being slow by @andrzejressel in #7280
  • Fixes missing range in BSP Diagnostic by @adpi2 in #7298
  • Fixes zip64 offset writing by @dwijnand in zinc#1206
  • Fixes a typo in the description of exportPipelining key by @alexklibisz in #7291
  • dependencyBrowseGraph and dependencyDot render in color by @sideeffffect in #7301. This can be opted-out using dependencyDotNodeColors setting.
  • Adds softwaremill/tapir.g8 to sbt new default menu by @katlasik in #7300
  • Makes sbt new default menu extensible via templateDescriptions setting key and templateRunLocal input key by @eed3si9n in #7304
  • Adds Hedgehog Scala to default test framework by @kevin-lee in #7287
  • Updates semanticdbVersion to 4.7.8 by @ckipp01 in #7294
  • Updates JNA to 5.13.0 by @xuwei-k in io#346
  • Updates Scala 2.13 for Zinc etc to 2.13.11 by @mkurz in #7279
  • Updates sbtn to 1.9.0 by @mkurz in #7290
  • Updates Scala Toolkit to 0.2.0 by @eed3si9n in #7318

Behind the scene

new contributors

Full Changelog: v1.9.0...v1.9.1

1.9.0

02 Jun 13:54
v1.9.0
Compare
Choose a tag to compare

Changes with compatibility implications

  • Deprecates IntegrationTest configuration. See below.
  • Updates underlying Coursier to 2.1.2 by @eed3si9n.

Deprecation of IntegrationTest configuration

sbt 1.9.0 deprecates IntegrationTest configuration. (RFC-3 proposes to deprecate general use of configuration axis beyond Compile and Test, and this is the first installment of the change.)

The recommended migration path is to create a subproject named "integration", or "foo-integration" etc.

lazy val integration = (project in file("integration"))
  .dependsOn(core) // your current subproject
  .settings(
    publish / skip := true,
    // test dependencies
    libraryDependencies += something % Test,
  )

From the shell you can run:

> integration/test

Assuming these are slow tests compared to the regular tests, I might not aggregate them at all from other subprojects, and maybe only run it on CI, but it's up to you.

Why deprecate IntegrationTest? IntegrationTest was a demoware for the idea of custom configuration axis, and now that we are planning to deprecate the mechanism to simplify sbt, we wanted to stop advertising it. We won't remove it during sbt 1.x series, but deprecation signals the non-recommendation status.

This was contributed by @eed3si9n and @mdedetrich in lm#414/#7261.

POM consistency of sbt plugin publishing

sbt 1.9.0 publishes sbt plugin to Maven repository in a POM-consistent way. sbt has been publishing POM file of sbt plugins as sbt-something-1.2.3.pom even though the artifact URL is suffixed as sbt-something_2.12_1.0. This allowed "sbt-something" to be registered by Maven Central, allowing search. However, as more plugins moved to Maven Central, it was considered that keeping POM consisntency rule was more important, especially for corporate repositories to proxy them.

sbt 1.9.0 will publish using both the conventional POM-inconsistent style and POM-consistent style so prior sbt releases can still consume the plugin. However, this can be opted-out using sbtPluginPublishLegacyMavenStyle setting.

This fix was contributed by Adrien Piquerez (@adpi2) at Scala Center in coursier#2633, sbt#7096 etc. Special thanks to William Narmontas (@ScalaWilliam) and Wudong Liu (@wudong) whose experimental plugin sbt-vspp paved the way for this feature.

sbt new, a text-based adventure

sbt 1.9.0 adds text-based menu when sbt new or sbt init is called without arguments:

$ sbt -Dsbt.version=1.9.0-RC2 init
....

Welcome to sbt new!
Here are some templates to get started:
 a) scala/toolkit.local               - Scala Toolkit (beta) by Scala Center and VirtusLab
 b) typelevel/toolkit.local           - Toolkit to start building Typelevel apps
 c) sbt/cross-platform.local          - A cross-JVM/JS/Native project
 d) scala/scala-seed.g8               - Scala 2 seed template
 e) playframework/play-scala-seed.g8  - A Play project in Scala
 f) playframework/play-java-seed.g8   - A Play project in Java
 g) scala-js/vite.g8                  - A Scala.JS + Vite project
 i) holdenk/sparkProjectTemplate.g8   - A Scala Spark project
 m) spotify/scio.g8                   - A Scio project
 n) disneystreaming/smithy4s.g8       - A Smithy4s project
 q) quit
Select a template (default: a):

Unlike Giter8, .local template creates build.sbt etc in the current directory, and reboots into an sbt session.

This was contributed by Eugene Yokota (@eed3si9n) in #7228.

Actionable diagnostics steps

sbt 1.9.0 adds actions to Problem, allowing the compiler to suggest code edits as part of the compiler warnings and errors in a structual manner.

See Roadmap for actionable diagnostics for more details. The changes were contributed by @ckipp01 in #7242 and @eed3si9n in bsp#527/#7251/zinc#1186 etc.

releaseNotesURL setting

sbt 1.9.0 adds releaseNotesURL setting, which creates info.releaseNotesUrl property in the POM file. This will then be used by Scala Steward. See
Add release notes URLs to your POMs
for details.

This was contributed by Arman Bilge in lm#410.

Other updates

Behind the scene

1.9.0-RC3

15 May 08:58
v1.9.0-RC3
Compare
Choose a tag to compare
1.9.0-RC3 Pre-release
Pre-release

Changes since sbt 1.9.0-RC2

Changes since sbt 1.9.0-RC1

  • Fixes libraryDependencySchemes not overriding assumedVersionScheme lm#415 by @adriaanm
  • Fixes RC1 not working on sbt-reproducible-builds #7234 by @adpi2
  • Updates to sbt-giter8-resolver 0.16.2 by @eed3si9n
  • More interactive sbt new by @eed3si9n

POM consistency of sbt plugin publishing

sbt 1.9.0 publishes sbt plugin to Maven repository in a POM-consistent way. sbt has been publishing POM file of sbt plugins as sbt-something-1.2.3.pom even though the artifact URL is suffixed as sbt-something_2.12_1.0. This allowed "sbt-something" to be registered by Maven Central, allowing search. However, as more plugins moved to Maven Central, it was considered that keeping POM consisntency rule was more important, especially for corporate repositories to proxy them.

sbt 1.9.0 will publish using both the conventional POM-inconsistent style and POM-consisntent sytle so prior sbt releases can still consume the plugin. However, this can be opted-out using sbtPluginPublishLegacyMavenStyle setting.

This fix was contributed by Adrien Piquerez (@adpi2) at Scala Center in coursier#2633, sbt#7096 etc.

sbt new, a text-based adventure

sbt 1.9.0 adds text-based menu when sbt new or sbt init is called without arguments:

$ sbt -Dsbt.version=1.9.0-RC3 init
....

Welcome to sbt new!
Here are some templates to get started:
 a) scala/toolkit.local               - Scala Toolkit (beta) by Scala Center and VirtusLab
 b) typelevel/toolkit.local           - Toolkit to start building Typelevel apps
 c) sbt/cross-platform.local          - A cross-JVM/JS/Native project
 d) scala/scala-seed.g8               - Scala 2 seed template
 e) playframework/play-scala-seed.g8  - A Play project in Scala
 f) playframework/play-java-seed.g8   - A Play project in Java
 g) scala-js/vite.g8                  - A Scala.JS + Vite project
 i) holdenk/sparkProjectTemplate.g8   - A Scala Spark project
 m) spotify/scio.g8                   - A Scio project
 n) disneystreaming/smithy4s.g8       - A Smithy4s project
 q) quit
Select a template (default: a):

Unlike Giter8, .local template creates build.sbt etc in the current directory, and reboots into an sbt session.

This was contributed by Eugene Yokota in #7228.

releaseNotesURL setting

sbt 1.9.0 adds releaseNotesURL setting, which creates info.releaseNotesUrl property in the POM file. This will then be used by Scala Steward. See
Add release notes URLs to your POMs
for details.

This was contributed by Arman Bilge in lm#410.

Deprecation of IntegrationTest configuration

sbt 1.9.0 deprecates IntegrationTest configuration. (RFC-3 proposes to deprecate general use of configuration axis beyond Compile and Test, and this is the first installment of the change.)

The recommended migration path is to create a subproject named "integration", or "foo-integration" etc.

lazy val integration = (project in file("integration"))
  .dependsOn(core) // your current subproject
  .settings(
    publish / skip := true,
    // test dependencies
    libraryDependencies += something % Test,
  )

From the shell you can run:

> integration/test

Assuming these are slow tests compared to the regular tests, I might not aggregate them at all from other subprojects, and maybe only run it on CI, but it's up to you.

Why deprecate IntegrationTest? IntegrationTest was a demoware for the idea of custom configuration axis, and now that we are planning to deprecate the mechanism to simplify sbt, we wanted to stop advertising it. We won't remove it during sbt 1.x series, but deprecation signals the non-recommendation status.

Changes with compatibility implications

  • Deprecates IntegrationTest configuration by @eed3si9n. See above.
  • Updates underlying Coursier to 2.1.2 by @eed3si9n.

Other updates

Behind the scene

Full Changelog: v1.8.3...v1.9.0-RC3

1.8.3

12 May 07:23
v1.8.3
Compare
Choose a tag to compare

Security fix

IO.withTemporaryFile fix

sbt 1.8.3 fixes sbt.io.IO.withTemporaryFile etc not limiting access on Unix-like systems. Prior to this patch release, some functions were using java.io.File.createTempFile, which does not set strict file permissions, as opposed to the NIO-equivalent that does.

This means that on a shared Unix-like systems, build user or plugin's use of sbt.io.IO.withTemporaryFile etc would have exposed the information to other users.

This issue was reported by Oleksandr Zolotko at IBM, and was fixed by Eugene Yokota (@eed3si9n) in io#344/zinc#1185.

Other updates

sbt 1.8.3 backports Zinc and IO fixes from 1.9.0-RC2 as well.

1.9.0-RC2

07 May 21:08
v1.9.0-RC2
26e9af1
Compare
Choose a tag to compare
1.9.0-RC2 Pre-release
Pre-release

Changes since sbt 1.9.0-RC1

  • Fixes libraryDependencySchemes not overriding assumedVersionScheme lm#415 by @adriaanm
  • Fixes RC1 not working on sbt-reproducible-builds #7234 by @adpi2
  • Updates to sbt-giter8-resolver 0.16.2 by @eed3si9n
  • More interactive sbt new by @eed3si9n

POM consistency of sbt plugin publishing

sbt 1.9.0 publishes sbt plugin to Maven repository in a POM-consistent way. sbt has been publishing POM file of sbt plugins as sbt-something-1.2.3.pom even though the artifact URL is suffixed as sbt-something_2.12_1.0. This allowed "sbt-something" to be registered by Maven Central, allowing search. However, as more plugins moved to Maven Central, it was considered that keeping POM consisntency rule was more important, especially for corporate repositories to proxy them.

sbt 1.9.0 will publish using both the conventional POM-inconsistent style and POM-consisntent sytle so prior sbt releases can still consume the plugin. However, this can be opted-out using sbtPluginPublishLegacyMavenStyle setting.

This fix was contributed by Adrien Piquerez (@adpi2) at Scala Center in coursier#2633, sbt#7096 etc.

sbt new, a text-based adventure

sbt 1.9.0 adds text-based menu when sbt new or sbt init is called without arguments:

$ sbt -Dsbt.version=1.9.0-RC2 init
....

Welcome to sbt new!
Here are some templates to get started:
 a) scala/toolkit.local               - Scala Toolkit (beta) by Scala Center and VirtusLab
 b) typelevel/toolkit.local           - Toolkit to start building Typelevel apps
 c) sbt/cross-platform.local          - A cross-JVM/JS/Native project
 d) scala/scala-seed.g8               - Scala 2 seed template
 e) playframework/play-scala-seed.g8  - A Play project in Scala
 f) playframework/play-java-seed.g8   - A Play project in Java
 g) scala-js/vite.g8                  - A Scala.JS + Vite project
 i) holdenk/sparkProjectTemplate.g8   - A Scala Spark project
 m) spotify/scio.g8                   - A Scio project
 n) disneystreaming/smithy4s.g8       - A Smithy4s project
 q) quit
Select a template (default: a):

Unlike Giter8, .local template creates build.sbt etc in the current directory, and reboots into an sbt session.

This was contributed by Eugene Yokota in #7228.

releaseNotesURL setting

sbt 1.9.0 adds releaseNotesURL setting, which creates info.releaseNotesUrl property in the POM file. This will then be used by Scala Steward. See
Add release notes URLs to your POMs
for details.

This was contributed by Arman Bilge in lm#410.

Deprecation of IntegrationTest configuration

sbt 1.9.0 deprecates IntegrationTest configuration. (RFC-3 proposes to deprecate general use of configuration axis beyond Compile and Test, and this is the first installment of the change.)

The recommended migration path is to create a subproject named "integration", or "foo-integration" etc.

lazy val integration = (project in file("integration"))
  .dependsOn(core) // your current subproject
  .settings(
    publish / skip := true,
    // test dependencies
    libraryDependencies += something % Test,
  )

From the shell you can run:

> integration/test

Assuming these are slow tests compared to the regular tests, I might not aggregate them at all from other subprojects, and maybe only run it on CI, but it's up to you.

Why deprecate IntegrationTest? IntegrationTest was a demoware for the idea of custom configuration axis, and now that we are planning to deprecate the mechanism to simplify sbt, we wanted to stop advertising it. We won't remove it during sbt 1.x series, but deprecation signals the non-recommendation status.

Changes with compatibility implications

  • Deprecates IntegrationTest configuration by @eed3si9n. See above.
  • Updates underlying Coursier to 2.1.2 by @eed3si9n.

Other updates

Behind the scene

1.9.0-RC1

01 May 07:04
v1.9.0-RC1
Compare
Choose a tag to compare
1.9.0-RC1 Pre-release
Pre-release

POM consistency of sbt plugin publishing

sbt 1.9.0 publishes sbt plugin to Maven repository in a POM-consistent way. sbt has been publishing POM file of sbt plugins as sbt-something-1.2.3.pom even though the artifact URL is suffixed as sbt-something_2.12_1.0. This allowed "sbt-something" to be registered by Maven Central, allowing search. However, as more plugins moved to Maven Central, it was considered that keeping POM consisntency rule was more important, especially for corporate repositories to proxy them.

sbt 1.9.0 will publish using both the conventional POM-inconsistent style and POM-consisntent sytle so prior sbt releases can still consume the plugin. However, this can be opted-out using sbtPluginPublishLegacyMavenStyle setting.

This fix was contributed by Adrien Piquerez (@adpi2) at Scala Center in coursier#2633, sbt#7096 etc.

sbt new, a text-based adventure

sbt 1.9.0 adds text-based menu when sbt new is called without arguments:

$ sbt -Dsbt.version=1.9.0-RC1 new
....

Welcome to sbt new!
Here are some templates to get started:
  1) scala/toolkit.local               - Scala Toolkit (beta) by Scala Center and VirtusLab
  2) typelevel/toolkit.local           - Toolkit to start building Typelevel apps
  3) sbt/cross-platform.local          - A cross-JVM/JS/Native project
  4) scala/scala-seed.g8               - Scala 2 seed template
  5) playframework/play-scala-seed.g8  - A Play project in Scala
  6) playframework/play-java-seed.g8   - A Play project in Java
  7) scala-js/vite.g8                  - A Scala.JS + Vite project
  8) holdenk/sparkProjectTemplate.g8   - A Scala Spark project
  9) spotify/scio.g8                   - A Scio project
 10) disneystreaming/smithy4s.g8       - A Smithy4s project
 q) quit
Select a template (default: 1):

Unlike Giter8, .local template creates build.sbt etc in the current directory, and reboots into an sbt session.

This was contributed by Eugene Yokota in #7228.

Deprecation of IntegrationTest configuration

sbt 1.9.0 deprecates IntegrationTest configuration. (RFC-3 proposes to deprecate general use of configuration axis beyond Compile and Test, and this is the first installment of the change.)

The recommended migration path is to create a subproject named "integration", or "foo-integration" etc.

lazy val integration = (project in file("integration"))
  .dependsOn(core) // your current subproject
  .settings(
    publish / skip := true,
    // test dependencies
    libraryDependencies += something % Test,
  )

From the shell you can run:

> integration/test

Assuming these are slow tests compared to the regular tests, I might not aggregate them at all from other subprojects, and maybe only run it on CI, but it's up to you.

Why deprecate IntegrationTest? IntegrationTest was a demoware for the idea of custom configuration axis, and now that we are planning to deprecate the mechanism to simplify sbt, we wanted to stop advertising it. We won't remove it during sbt 1.x series, but deprecation signals the non-recommendation status.

releaseNotesURL setting

sbt 1.9.0 adds releaseNotesURL setting, which creates info.releaseNotesUrl property in the POM file. This will then be used by Scala Steward. See
Add release notes URLs to your POMs
for details.

This was contributed by Arman Bilge in lm#410.

Changes with compatibility implications

  • Deprecates IntegrationTest configuration by @eed3si9n. See RFC-3 for more details.
  • Updates underlying Coursier to 2.1.2 by @eed3si9n.

Other updates

Behind the scene

1.8.2

05 Jan 06:17
v1.8.2
Compare
Choose a tag to compare

updates

1.8.1

03 Jan 22:01
v1.8.1
Compare
Choose a tag to compare

Bug fixes

  • Fixes slf4j 2.x getting pulled into the metabuild #7115 by @eed3si9n
  • Fixes BSP support on Windows by making PATH environment variable case insensitive by #7085 by @dos65

Updates

New Contributors

Full Changelog: v1.8.0...v1.8.1